|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2009-4-7 11:07:48
|
显示全部楼层
感谢回答:
不好意思把另外的帖子的问题放到这里面问吧。
http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=974779&bbs_page_no=1&bbs_id=3011
"现在uC/OS2能在CM3上跑了,可有网友指出移植有问题,在CtxSW中会破坏R4,R5的值。我不知道这个移植中是否利用了CM3的诸多新性"。
(上面是问题部分)
下面是zlg提供的UC/OS模板中OSCtxSw的代码
OSCtxSw
PUSH {R4, R5}
LDR R4, =NVIC_INT_CTRL ; trigger the PendSV exception
; 触发软件中断
LDR R5, =NVIC_PENDSVSET
STR R5, [R4]
POP {R4, R5}
BX LR
有一点比较迷惑 STR R5, [R4]触发PendSV中断以后,自动入栈的的PC是POP{R4,R5}么?换句话说,触发PendSV以后是立刻进入中断步骤(入栈、取地址、进入中断程序)还是要在执行一到两条指令在进入中断步骤。
但是无论如何,都应该不会破坏R4,R5(无论中断在POP{R4,R5}之前进入,还是中断在BX LR之前进入,都不会破坏返回到该任务以后的R4,R5的值)。
|
|