STM32
登录
直播中
乔丽娜
7年用户
1107经验值
私信
关注
[问答]
如何实现SysTick中断的嵌套自身?
开启该帖子的消息推送
Systick
中断
AREA CODE1, CODE, READONLY
Sys
ti
ck_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 不能正常返回了。
回帖
(1)
王博
2024-3-25 10:56:13
据我所知,ARM中断并不支持自己嵌套自己,或许会因为标志清零延时问题导致刚退出去后发生重进。
当然,你这里说的嵌套,应该说只是模拟类似操作不是真的自己嵌套,这样原理上个人觉得没有大问题,但要求对压栈出栈操作及相关寄存器很清晰,否则比较难以玩转。
据我所知,ARM中断并不支持自己嵌套自己,或许会因为标志清零延时问题导致刚退出去后发生重进。
当然,你这里说的嵌套,应该说只是模拟类似操作不是真的自己嵌套,这样原理上个人觉得没有大问题,但要求对压栈出栈操作及相关寄存器很清晰,否则比较难以玩转。
举报
更多回帖
rotate(-90deg);
回复
相关问答
Systick
中断
systick
的
中断
优先级是否应该设置为最高优先级的
嵌套
中断
?
2024-05-16
278
请问HWI
中断
disable与enable不起作用是什么原因?
2019-10-09
3247
使用CH32V203C8T6芯片
SysTick
定时器配置成
中断
模式,无法进入
中断
怎么解决?
2022-09-09
1425
关于28346的
中断
嵌套
2018-05-14
2369
TC375
中断
嵌套
如何
实现
?
2024-05-27
314
TMS570LS1227 的
中断
嵌套
怎么
实现
?
2018-05-25
2570
请问c6748怎么
实现
中断
嵌套
?
2019-10-22
1809
中断
嵌套
2017-09-27
3040
在rtt中cortex A9的gic怎样去
实现
中断
嵌套
呢
2022-05-09
4266
中断
嵌套
的好处与坏处有哪些?
2023-10-27
328
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分