OSCtxSw OSIntCtxSw汇编代码相同,怎么体现出区别的?
osctxsw()需要保存出口状态。
osintctxsw()不需要。
但是汇编代码都一样,为什么?
OSCtxSw
PUSH {R4, R5}
LDR R4, =NVIC_INT_CTRL ;´¥·¢endSVÒì³£ (causes context switch)
LDR R5, =NVIC_PENDSVSET
STR R5, [R4]
POP {R4, R5}
BX LR
OSIntCtxSw
PUSH {R4, R5}
LDR R4, =NVIC_INT_CTRL ;´¥·¢endSVÒì³£ (causes context switch)
LDR R5, =NVIC_PENDSVSET
STR R5, [R4]
POP {R4, R5}
BX LR
NOP
2019-8-22 08:09:11
在不支持pendsv的芯片上面有差异。
在M系列上面,所有切换都当成统一由pendsv实现。
在不支持pendsv的芯片上面有差异。
在M系列上面,所有切换都当成统一由pendsv实现。
举报
2019-8-22 08:17:57
你好,OSCtxSw OSIntCtxSw这两个函数都在临界区里,这两个函数需要触发pendsv中断处理函数。临界区不是不能产生中断了吗?
你好,OSCtxSw OSIntCtxSw这两个函数都在临界区里,这两个函数需要触发pendsv中断处理函数。临界区不是不能产生中断了吗?
举报
2019-8-22 08:49:35
名称就叫pend呀,在这里触发当然是不会背执行。
等所有ISR都执行完了,才轮到pend
名称就叫pend呀,在这里触发当然是不会背执行。
等所有ISR都执行完了,才轮到pend
举报