借用ZLG移植代码风险小
不过临界段写法还是喜欢用方法3
#if OS_CRITICAL_METHOD == 3 #define OS_ENTER_CRITICAL() do{cpu_sr=CriticalEnter();}while(0) #define OS_EXIT_CRITICAL() do{CriticalExit(cpu_sr);}while(0) #endif
#define CRITICAL() for(OS_CPU_SR cpu_sr=CriticalEnter(),__ToDo=1; __ToDo;__ToDo=0,CriticalExit(cpu_sr))
OS_CPU_SR CriticalEnter(void) { asm( "mrs r0,primask
" "cpsid i
" "bx lr
" ); return 1; }
void CriticalExit(OS_CPU_SR cpu_sr) { asm( "msr primask,r0
" ); }
|