Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
DIY综合交流区
[RealTouch例程]线程优先级抢占
发布于 2012-08-14 12:14:21 浏览:5993
订阅该版
实验目的 ? 加深优先级调度认识 硬件说明 本实验使用RT-Thread官方的Realtouch开发板作为实验平台。涉及到的硬件主要为 ? 串口3,作为rt_kprintf输出,需要连接JTAG扩展板 具体请参见《Realtouch开发板使用手册》 实验原理及程序结构 实验设计 本实验的主要设计目的是帮助读者快速了解线程优先级的调度过程。请读者注意,本实验本身不具有实际的工程参考价值,只是帮助读者快速了解线程API的用法。 源程序说明 本实验对应1_kernel_thread_priority 系统依赖 在rtconfig.h中需要开启 ``` #define RT_USING_HEAP``` 此项可选,开启此项可以创建动态线程和动态信号量,如果使用静态线程和静态信号量,则此项不是必要的 ``` #define RT_USING_CONSOLE``` 此项必须,本实验使用rt_kprintf向串口打印按键信息,因此需要开启此项 主程序说明 在applications/application.c中的thread_priority_init()函数中初始化了两个线程t1、t2, ```result = rt_thread_init(&thread1, "t1", thread1_entry, RT_NULL, &thread1_stack[0], sizeof(thread1_stack),5, 5); if (result == RT_EOK) rt_thread_startup(&thread1); resul = rt_thread_init(&thread2, "t2", thread2_entry, RT_NULL, &thread2_stack[0], sizeof(thread2_stack),7, 5); if (result == RT_EOK) rt_thread_startup(&thread2); ```两段初始化代码最显著的区别就是优先级不同。 因为优先级较高,首先得到执行的是t1。 ```static void thread1_entry(void* parameter) { for(;count<10;count++) { rt_thread_delay(3*RT_TICK_PER_SECOND); rt_kprintf("count = %d ", count); } } ```t1执行到了rt_thread_delay(2*RT_TICK_PER_SECOND),t2得到执行,t2的主要任务就是获得当前系统tick,并打印 ```static void thread2_entry(void* parameter) { rt_tick_t tick; rt_uint32_t i; for(i=0; ; i++) { tick = rt_tick_get(); rt_thread_delay(RT_TICK_PER_SECOND); rt_kprintf("tick = %d ",tick); } } ```编译调试及观察输出信息 编译请参见《RT-Thread配置开发环境指南》完成编译烧录,参考《Realtouch开发板使用手册》完成硬件连接,连接扩展板上的串口和jlink。 运行后可以看到如下信息: | / - RT - Thread Operating System / | 1.1.0 build Aug 10 2012 2006 - 2012 Copyright by rt-thread team tick = 1 tick = 1001 count = 0 tick = 2001 tick = 3002 tick = 4002 count = 1 tick = 5002 tick = 6002 tick = 7002 count = 2 tick = 8002 tick = 9002 tick = 10002 count = 3 tick = 11003 tick = 12004 tick = 13005 count = 4 tick = 14006 ...... 结果分析 因为更高的优先级,thread1率先得到执行,随后它调用延时,时间为3个系统tick,于是thread2得到执行。可以从打印结果中发现一个规律,在第一次thread2了打印两次thread1会打印一次之后,接下来的话thread2每打印三次thread1会打印一次。对两个线程的入口程序进行分析可以发现,在thread1 3个系统tick的延时里,thread2实际会得到三次执行机会,但显然在thread1的第一个延时内thread2第三次执行并没有执行结束,在第三次延时结束以后,thread2本应该执行第三次打印计数的,但是由于thread1此时的延时也结束了,而其优先级相比thread2要高,所以抢占了thread2的执行而开始执行。当thread1再次进入延时时,之前被抢占的thread2的打印得以继续,然后在经过两次1个系统tick延时和两次打印计数后,在第三次系统tick结束后又遇到了thread1的延时结束,thread1再次抢占获得执行,所以在这次thread1打印之前,thread2执行了三次打印计数。 ![1_kernel_memory_malloc.zip](/uploads/88_2b029aabd2caed04095fcb83f666cd23.zip) ![1_kernel_thread_priority.zip](/uploads/88_27c832ce7a9af40f24304793165a68ff.zip) 下载附件 [实验1_4线程优先级抢占.pdf](https://oss-club.rt-thread.org/uploads/88_8ad87859ccce9207bf628a5c23521969.pdf)
查看更多
4
个回答
默认排序
按发布时间排序
shaolin
2012-08-25
这家伙很懒,什么也没写!
添加例程代码。
sherman
2014-10-11
这家伙很懒,什么也没写!
有个疑问,t1执行到了rt_thread_delay(2*RT_TICK_PER_SECOND)的时候为什么t2执行。谢谢!
shelton
2021-03-27
这家伙很懒,什么也没写!
你好,请问为什么RT_TICK_PER_SECOND都要等1000个TICK?是RT_TICK_PER_SECOND = 1000吗?
撰写答案
登录
注册新账号
关注者
0
被浏览
6k
关于作者
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
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部