完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
RT-Thread Nano 通过 keil 添加的 3.1.5版本经测试发现在不主动释放CPU的情况下别的线程不会被调度,具体测试如下:
线程A:默认的 main线程,优先级默认,对时间要求不高用来运行耗时任务,在主循环中通过 print函数观察线程运行; 线程B:实时线程,优先级为 0,用来运行对时间有严格要求的线程,在主循环中通过 print函数观察线程运行; 测试1:在线程 A主循环中主动调用 rt_thread_mdelay 函数让渡 CPU,在线程 B主循环中不调用 rt_thread_mdelay函数让渡 CPU,结果:只有线程 B运行; 测试2:在线程 A主循环中不调用 rt_thread_mdelay 函数让渡 CPU,在线程 B主循环中主动调用 rt_thread_mdelay函数让渡 CPU,结果:只有线程 A、B都运行; 测试3:线程 A、B都不主动调用 rt_thread_mdelay 函数让渡 CPU,结果:只有线程 B运行; 测试中一直到线程 B的优先级下调到与线程 A优先级相同,线程 A 才能在线程 B不主动让渡 CPU的情况下被调度执行,所以关于线程调度这块我有点不是很明白,就是线程主动让渡 CPU通常都是在主循环的末尾或者需要延时的时候,那么假如线程 B需要严格控制 1ms周期运行,任务需要消耗 0.5ms,而线程 A运行的是庞大的计算比如 2ms才能算完,那么在计算的中途显然是不好去控制线程 A主动让渡 CPU的,而且线程 A也不知道线程 B什么时候需要 CPU,那么就只能依赖系统的强制切换时间片了,可是在线程 A没有主动释放 CPU的情况下如何让线程 B运行呢?就是 B如何抢占 A已经获得的 CPU从而保证自身固定 且严格1ms的运行周期??? |
|
相关推荐
1个回答
|
|
RT-Thread是基于优先级抢占式的RTOS,运行处于就绪态的最高优先级线程。
在优先级为最高的前提下,多个就绪线程优先级相同,时间片轮转。 根据你的描述,B优先级 > A优先级。 测试1解释:B高于A,B不放弃CPU,A永远不会得以运行,因为B永远就绪。 测试2解释:B高于A,B主动放弃CPU,A运行,因为B Suspend,A就绪,此时A是就绪态的最高优先级线程;不停发生Tick中断,直到B延时时间到,B就绪,抢占A的CPU,B运行,因为A就绪且运行中,被Tick中断打断了,然后在Tick中设置B就绪,在AB均就绪条件下,B优先级更高,B运行。 测试3解释:B高于A,B永远运行,A永远不会运行,因为启动时,B就绪且优先级最高。 你的问题Solution: Solution1 - B优先级最高,使用rt_thread_delay_until函数作为绝对延时,包含线程具体任务时间,符合你的需求。但B严格1ms,对于线程来说,有些严苛了,建议用Solution2。 Solution2 - B优先级最高,用HWTimer,每隔1ms发出Event/Sem,B线程永远等待Event/Sem,收到后运行。 只需要保证B优先级高于A,线程A的2ms运算不会影响到B。A线程的计算是在B完成0.5ms计算后,在0.5~1ms的间隔中进行的。 A也不怕被打断,因为有线程栈。 CPU此时得到充分应用。A,B均没事情干的时候,tidle任务介入,CPU空转。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1139 浏览 0 评论
IaaS+on+DPU(IoD)+下一代高性能算力底座技术白皮书
2201 浏览 0 评论
飞凌嵌入式-ELFBOARD 常用的USB接口及其不同版本介绍第1期
1087 浏览 0 评论
【Vision Board创客营连载体验】RA8D1-Vision Board上OSPI-Flash实践
1561 浏览 0 评论
I.MX6ULL-飞凌 ElfBoard ELF1板卡- 应用层更改引脚复用的方法
3774 浏览 0 评论
65521 浏览 21 评论
嵌入式热门DIY项目:智能机器人开源资料合集(原理图、代码、论文)
67873 浏览 22 评论
57968 浏览 32 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-20 16:09 , Processed in 0.593416 second(s), Total 35, Slave 29 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号