在做uC/OS 第3章_基于uCOS-II的基础实验3.2_蜂鸣器控制实验 <br />在下面地方设断点:然后运行<br />发现: OSIntNesting 不断地增加,实际上整个程序只有定时器中断。<br />请问为什么会这样!?谢谢!是定时器中断嵌套自身吗?<br /><br /> MACRO<br />$IRQ_Label HANDLER $IRQ_Exception_Function<br /><br /> EXPORT $IRQ_Label ; 输出的标号<br /> IMPORT $IRQ_Exception_Function ; 引用的外部标号<br /><br />$IRQ_Label<br /> SUB LR, LR, #4 ; 计算返回地址<br /> STMFD SP!, {R0-R3, R12, LR} ; 保存任务环境<br /> MRS R3, SPSR ; 保存状态<br /> STMFD SP, {R3, SP, LR}^ ; 保存用户状态的R3,SP,LR,注意不能回写<br /> ; 如果回写的是用户的SP,所以后面要调整SP<br /> LDR R2, =OSIntNesting ; OSIntNesting++<br /> LDRB R1, [R2]<br /> ADD R1, R1, #1<br /> STRB R1, [R2]<br /><br /> SUB SP, SP, #4*3<br /> <br /> MSR CPSR_c, #(NoInt | SYS32Mode) ; 切换到系统模式<br /> CMP R1, #1<br /> LDREQ SP, =StackUsr<br /> <br /> BL $IRQ_Exception_Function ; 调用c语言的中断处理程序<br /><br /> MSR CPSR_c, #(NoInt | SYS32Mode) ; 切换到系统模式 ---在这里设断点!!<br /> LDR R2, =OsEnterSum ; OsEnterSum,使OSIntExit退出时中断关闭<br /> MOV R1, #1<br /> STR R1, [R2]<br /><br /> BL OSIntExit |
|