[其他ST产品]

请教大伙,如何实现SysTick中断的嵌套自身?

[复制链接]
118|1
手机看帖
扫描二维码
随时随地手机跟帖
stormwind123|  楼主 | 2022-10-25 09:39 | 显示全部楼层 |阅读模式
  • AREA    CODE1, CODE, READONLY
  • SysTick_Handler        PROC
  •                                 EXPORT        SysTick_Handler
  •                                 IMPORT  RTTaskSchedule
  •                                 POP                {R0-R7}
  •                                 PUSH        {R0-R7}                                        ;这次压栈后,堆栈和刚进中断时一致,但是栈的内容已经被读到寄存器中
  •                                 LDR                R6,=RTTaskSchedule                ;伪造栈的内容,让异常返回到想要执行的函数
  •                                 PUSH        {R0-R7}
  •                                 LDR R0,=0xFFFFFFF9
  •                                 BX R0
  •                                 ENDP
  • AREA    CODE2, CODE, READONLY
  • IrqReturn                PROC
  •                                 EXPORT        IrqReturn
  •                                 POP                {R0,R1}                                        ;进入IrqReturn产生的压栈数据,直接丢弃
  •                                 POP                {R0-R7}                                        ;下面恢复进入systick中断前的8个寄存器
  •                                 MOV                R12,R4
  • ;                                MOV                LR,R5                                        ;LR的值保持当前
  •                                 MSR                XPSR,R7
  •                                 MOV                PC, R6
  • ;                                BX                 LR
  •                                 ENDP
  •                                 END

复制代码



我想通过SysTick的嵌套自身,实现任务的抢占式调度,请问有人知道要怎么弄吗?
上面的汇编是我直接伪造返回现场让中断直接退出到我想要执行的调度函数RTTaskSchedule ,执行完调度函数RTTaskSchedule 后再执行函数IrqReturn返回到main中。但是这段代码并不能实现我想要的功能,被嵌套的调度函数RTTaskSchedule 不能正常返回了。

使用特权

评论回复
laocuo1142| | 2022-10-25 10:45 | 显示全部楼层
freertos用的是中断抢占式,可以参考freertos的使用。407是修改中断组号来实现开启抢占式中断模式,具体的使用建议参考对应芯片手册中关于中断配置的部分。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

291

主题

1184

帖子

1

粉丝