Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
DIY综合交流区
[RealTouch例程]线程让出
发布于 2012-08-14 09:19:30 浏览:8231
订阅该版
实验目的 ? 快速熟悉线程相关接口 硬件说明 本实验使用RT-Thread官方的Realtouch开发板作为实验平台。涉及到的硬件主要为 ? 串口3,作为rt_kprintf输出,需要连接JTAG扩展板 具体请参见《Realtouch开发板使用手册》 实验原理及程序结构 实验设计 本实验的主要设计目的是帮助读者快速了解线程相关API,包括线程让出API。请读者注意,本实验本身不具有实际的工程参考价值,只是帮助读者快速了解线程API的用法。 源程序说明 本实验对应1_kernel_thread_yield 系统依赖 在rtconfig.h中需要开启 ``` #define RT_USING_HEAP``` 此项可选,开启此项可以创建动态线程和动态信号量,如果使用静态线程和静态信号量,则此项不是必要的 ``` #define RT_USING_CONSOLE``` 此项必须,本实验使用rt_kprintf向串口打印按键信息,因此需要开启此项 主程序说明 在applications/application.c中的定义了两个线程tid1、tid2, 下面的代码是thread1的入口程序,thread1得到执行后就会计数并打印出来,打印后就调用rt_thread_yield(),让出处理机,thread2的入口程序与之几乎相同。 ```/* 线程1入口 */ static void thread1_entry(void* parameter) { rt_uint32_t count = 0; while (1) { /* 打印线程1的输出 */ rt_kprintf("thread1: count = %d ", count ++); /* 执行yield后应该切换到thread2执行 */ rt_thread_yield(); } } /* 线程2入口 */ static void thread2_entry(void* parameter) { rt_uint32_t count = 0; while (1) { /* 执行yield后应该切换到thread1执行 */ rt_thread_yield(); /* 打印线程2的输出 */ rt_kprintf("thread2: count = %d ", count ++); } } ```编译调试及观察输出信息 编译请参见《RT-Thread配置开发环境指南》完成编译烧录,参考《Realtouch开发板使用手册》完成硬件连接,连接扩展板上的串口和jlink。 运行后可以看到如下信息: ``` | / - RT - Thread Operating System / | 1.1.0 build Aug 10 2012 2006 - 2012 Copyright by rt-thread team thread1: count = 0 thread1: count = 1 thread2: count = 0 thread1: count = 2 thread2: count = 1 thread1: count = 3 thread2: count = 2 thread1: count = 4 thread2: count = 3 thread2: count = 4``` 结果分析 从打印结果中看到,thread1连续打印了两次,我们可以就此分析一下。thread1首先执行,打印计数结果,然后让出, ```rt_thread_yield();``` 系统将启动调度thread2得到执行,thread2执行过程中遇到yield()函数,将执行交还给thread1,此时thread2中yield()函数下的计数打印语句并未得到执行,thread1再次执行计数打印,然后yield(),当执行权再次回到thread2手上的时候,thread2则需要弥补之前所遗留的痛,打印计数咯就。所以我们可以看到thread1打印了两次而thread2只打印了一次。可能你发现接下来,thread1和thread2均只打印了一次,这又是什么原因呢。由前三个打印结果可以分析出,两个线程在规定的时间片内可以完成计数打印和yield()两个操作,所以在thread2第一次得到控制权时候,它完成了打印操作,然后又一次执行了yield(),所以当它在此获得控制权时就会直接打印计数了。所以说thread1打印两次计数结果,thread2打印一次的情况只会在开始时候出现一次。 ![实验1_3线程让出.pdf](/uploads/88_702663d82982807835f5eedcfd8714cc.pdf)
查看更多
8
个回答
默认排序
按发布时间排序
a105
2012-08-14
这家伙很懒,什么也没写!
rt_thread_yield();其实相当一个延时而已,thread1打印两次是因为rt_kprintf("thread1,: count = %d\n",count ++);rt_thread_yield(); 这两句的位置不一样造成的.
bernard
2012-08-14
这家伙很懒,什么也没写!
>rt_thread_yield();其实相当一个延时而已. --- 这个不是哦,只是说放弃了CPU,当前任务状态依然是就绪状态。
bloom5
2012-08-14
这家伙很懒,什么也没写!
>rt_thread_yield();其实相当一个延时而已,thread1打印两次是因为rt_kprintf("thread1,: count = %d >",count ++);rt_thread_yield(); 这两句的位置不一样造成的. --- 如果是延时的话,那打印就不应该是这个样子了,而是应该是thread1、thread2依次打印
wangway
2013-01-01
这家伙很懒,什么也没写!
请问在什么情况下使用这个API呢?
eliucheng
2013-01-16
这家伙很懒,什么也没写!
CODE呢?
shaolin
2013-01-16
这家伙很懒,什么也没写!
code 默认都在 github 上。
wen_enroll
2014-02-08
这家伙很懒,什么也没写!
执行结果最后一句为什么是"thread2: count = 4",而不是"thread1: count = 5"呢??
撰写答案
登录
注册新账号
关注者
0
被浏览
8.2k
关于作者
shaolin
这家伙很懒,什么也没写!
提问
115
回答
444
被采纳
0
关注TA
发私信
相关问题
1
[项目]搞个开源的硬件项目
2
硬件计划贴,及时更新,欢迎提意见
3
软件计划贴,及时更新,欢迎提意见::WMA,MOUNT,LWIP等问题急需解决.
4
MMS协议
5
定点的wma解压库-libwma
6
QQ群记录 [20090821]
7
STM32网络收音机PCB报名征集
8
第一版调试记录
9
第二版硬件讨论
10
RADIO项目相关模块规格--欢迎大家自己做板时规格与此兼容,减少重复劳动
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
8
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
3
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部