是否可以不用pendSV中断做任务切换?
freeRTOS的任务切换我的理解是:通过SysTick中断去触发pendSV中断去做任务切换,因为pendSV中断优先级最低,所以任务切换只会发生在没有中断的时候产生。那是不是也可以不用pendSV做任务切换,只要用systick中断去随便触发一个优先级最低的中断也可以做任务切换?理论上是可以的。可以选用一个普通的IRQ,将其配置成最低的中断优先级,通过NVIC_SetPendingIRQ()触发。
同理,SysTick也可以用一个HW Timer去实现。
但这两个中断完成的事情是如此基本和必须,所以就设计成专用的系统异常了。好处是可以提高系统的可移植性。 这是个好问题,可以探讨一下,坐等OS大神来答疑解惑,个人愚见是可行的, 有没有大佬解答一下这个问题啊? 是否可以直接用system tick中断去软件触发一个最低优先级的中断去做任务切换呢? 我认为 做任务切换并没规定一定用谁,只是在OS里,正如你提到的用它比较合适而已。 万一有其他应用使用了pendSV ,不是就容易让OS被劫持? 我觉得freertos用pendsv做任务切换也是有一定理由的,假设你用其他中断做任务切换,在同一个时间产生中断,那比他优先级低的任务岂不是永远无法执行了? 本帖最后由 andeyqi 于 2018-5-30 11:33 编辑
可以的,完全可以使用SysTick 来系统调度,pendsv会有自身的优势,ST增加pendsv就是给操作系统准备的。pendsv 能解决某中断源的频率和 SysTick 异常的频率比较接近时,会发生“共振”的问题。图片是从Cortex M3权威指南(中文).pdf 截取的关于这段的描述。
andeyqi 发表于 2018-5-30 11:14
可以的,完全可以使用SysTick 来系统调度,pendsv会有自身的优势,ST增加pendsv就是给操作系统准备的。pend ...
使用还是用rtos推荐的比较好
页:
[1]
2