#define OS_CRITICAL_METHOD 3 <br /> <br /> <br />#if OS_CRITICAL_METHOD == 3 <br /> <br />#if OS_CPU_INT_DIS_MEAS_EN > 0 <br /> <br />#define OS_ENTER_CRITICAL() {cpu_sr = OS_CPU_SR_Save(); <br /> OS_CPU_IntDisMeasStart();} <br />#define OS_EXIT_CRITICAL() {OS_CPU_IntDisMeasStop(); <br /> OS_CPU_SR_Restore(cpu_sr);} <br /> <br />#else <br /> <br />#define OS_ENTER_CRITICAL() {cpu_sr = OS_CPU_SR_Save();} <br />#define OS_EXIT_CRITICAL() {OS_CPU_SR_Restore(cpu_sr);} <br /> <br />#endif <br /> <br />#endif <br />**********************************************************<br />**********************************************************<br />#if OS_CRITICAL_METHOD == 3 <br />__arm OS_CPU_SR OS_CPU_SR_Save(void); <br />__arm void OS_CPU_SR_Restore(OS_CPU_SR cpu_sr); <br />#endif <br />**********************************************************<br />**********************************************************<br />OS_CPU_SR_Save <br /> MRS R0, CPSR <br /> ; Set IRQ and FIQ bits in CPSR to disable all interrupts. <br /> ORR R1, R0, #OS_CPU_ARM_CONTROL_INT_DIS <br /> MSR CPSR_c, R1 <br /> BX LR ; Disabled, return the original CPSR contents in R0. <br /><br />OS_CPU_SR_Restore <br /> MSR CPSR_c, R0 <br /> BX LR <br /><br />以上是uc/OS网站上一段移植到arm的程序,请教:<br />1,为什么在disable all interrupts. 和OS_CPU_SR_Restore 中最后一行都有BX LR ? 在这种情况下程序返回到那里去?<br />2,cpu_sr = OS_CPU_SR_Save(); 中OS_CPU_SR_Save()是如何带回一个值返回给cpu_sr的?<br />谢谢!!!!<br /> |
|