|
官网上下载的UCOS移植例程中关于OS_ENTER_CRITICAL和OS_EXIT_CRITICAL,如下
#define OS_CRITICAL_METHOD 3u
#if OS_CRITICAL_METHOD == 3u
#define OS_ENTER_CRITICAL() {cpu_sr = OS_CPU_SR_Save();}
#define OS_EXIT_CRITICAL() {OS_CPU_SR_Restore(cpu_sr);}
#endif
在os_cpu_a.asm中实现这两个函数
OS_CPU_SR_Save
MRS R0, PRIMASK ; Set prio int mask to mask all (except faults)
CPSID I
BX LR
OS_CPU_SR_Restore
MSR PRIMASK, R0
BX LR
那么在调用OS_ENTER_CRITICAL()和 OS_EXIT_CRITICAL() 之间,进行了某些操作,R0的值被改变了怎么办呢?
比如执行了某些运算,R0最后变成0xfffffffff了?
或者说R0肯定不会被更改?
对汇编了解的不多,请各位高手不吝赐教。 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|