嵌入式学习小组
直播中

刘建国

7年用户 204经验值
私信 关注

怎么体现OSCtxSw OSIntCtxSw汇编代码的区别?

  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

回帖(6)

李正茂

2019-8-22 08:09:11
在不支持pendsv的芯片上面有差异。
在M系列上面,所有切换都当成统一由pendsv实现。
举报

高澜栖

2019-8-22 08:17:57
你好,OSCtxSw OSIntCtxSw这两个函数都在临界区里,这两个函数需要触发pendsv中断处理函数。临界区不是不能产生中断了吗?
举报

段朝思

2019-8-22 08:34:15
是又在什么地方打开中断啦吗?
举报

李笑才

2019-8-22 08:49:35
名称就叫pend呀,在这里触发当然是不会背执行。
等所有ISR都执行完了,才轮到pend
举报

更多回帖

发帖
×
20
完善资料,
赚取积分