
我想通过SysTick的嵌套自身,实现任务的抢占式调度,请问有人知道要怎么弄吗? 上面的汇编是我直接伪造返回现场让中断直接退出到我想要执行的调度函数RTTaskSchedule ,执行完调度函数RTTaskSchedule 后再执行函数IrqReturn返回到main中。但是这段代码并不能实现我想要的功能,被嵌套的调度函数RTTaskSchedule 不能正常返回了。 |
STM32L562-DK板中居然有个电流测量模块
STM32F030内部晶振怎么设置,内部晶振是延时函数怎么设置
分享STM32F030K6程序运行异常的解决方法
STM32F030正常上电不运行
型号STM32L010RB可以用来做两路BUCK移相小电源?
在固件包中复制出来的例程如何修改头文件路径?
DMA 读取GPIO的状态
stm32的同一个定时器,不同的通道,可以不同时的输出pwm波形吗
基于STM32的锂动力电池检测装置的设计
STM32的低功耗模式
当然,你这里说的嵌套,应该说只是模拟类似操作不是真的自己嵌套,这样原理上个人觉得没有大问题,但要求对压栈出栈操作及相关寄存器很清晰,否则比较难以玩转。
不过真心期待你能成功搞定。
另外,不同优先级任务本身不就支持抢占吗?为什么要如此费周章?
就是第一个中断函数还没执行完,又来了中断,这时候又再一次执行中断函数。
哥们,细说,多谢哈。
如果你说的是同一中断,那不是出不来了么?
哥们仔细看,我要实现的是当前在执行的中断嵌套自身,不是其它的中断来抢占。
首先你要理解中断产生的原理,即便是正常程序操作,在使用各种rtos时,都会增加互斥。只有中断抢占可以打断其他中断而执行,但是中断自己不会抢占自己。除非是你用其他的中断调用的函数和你目前使用的函数是一个。比如你把.s中不同的中断,修改使用同一个函数。
既然是想做到任务的抢占式调度,可以参考freertos的任务调用。
要是参考freeRTOS的内核来,那我直接用freeRTOS不就完事了吗。现在就是想减少调度器的复杂度,以前在51单片机上就是就用中断嵌套自身来调度的,任务调度函数代码贼少。
是的,有点类似递归。这个调度方案就是通过进入中断硬件的压栈和出栈实现抢占式调度,我在m3内核上已经实现了;这个抢占式调度以前在51上用得贼多。
是有无法返回堆栈溢出的风险,这就需要程序员自己去管理任务的执行时间了,比如有task_1ms、task_5ms两个周期执行的任务,task_1ms任务必须在1ms的时间内执行完,否则堆栈溢出;task_5ms任务必须在5ms内执行完(这5ms既要每1ms执行一次task_1ms,还要把task_5ms执行完,剩余的cpu时间去跑主函数main的循环。)