Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
DIY综合交流区
[RealTouch例程]线程让出
发布于 2012-08-14 09:19:30 浏览:8301
订阅该版
实验目的 ? 快速熟悉线程相关接口 硬件说明 本实验使用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.3k
关于作者
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
【RT-Thread】【ci】【scons】将ci.attachconfig.yml和scons结合使用
2
Rt-thread中OTA下载后,bootloader不搬程序
3
ulog 日志 LOG_HEX 输出时间改为本地日期时间
4
在RT-Thread Studio中构建前执行python命令
5
研究一了一段时间RTT,直接标准版上手太难,想用nano,但又舍不得组件
热门标签
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
I2C_IIC
ESP8266
UART
WIZnet_W5500
ota在线升级
cubemx
PWM
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
出出啊
1518
个答案
343
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
813
个答案
177
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
5
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
3
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部