| 
 
| 我用的是优龙科技的LPC2294的板子,在ZLG网站上下的uC/OS-II移植程序,下的程序里包含IRQ.inc,OS_CPU.H,OS_CPU_A.S,OS_CPU_C.C四个移植文件。我根据自己的板子写了启动程序和挂接到IRQ和SWI的一点接口,汇编接口还是用的ZLG的。时钟中断和IRQ中断如下: 
 void Timer0_Exception(void)
 {
 T0IR = 0x01;
 VICVectAddr = 0;
 OSTimeTick();
 }
 
 void CAN2_Rx_ISR(void)
 {
 REG_CANCMR(CAN2).REG= 0x04; // 释放接收寄存器,同时RBS位清零
 VICVectAddr = 0x00U;        // acknowledgeInterrupt
 __asm
 {
 MRS     R0, CPSR
 BIC     R0,R0,#NoInt
 MSR     CPSR_c, R0
 }
 LedFlash(Led2);
 CAN_WriteRxQ(CAN2);
 }
 IRQ中断是一个CAN的接收中断。
 
 本来好像没问题,CAN帧都接收了,但是现在发现好像在任务中一直处于IRQ模式而不是USER模式,并且中断都是关闭的,用AXD调试器或者汇编打不开,好像是打开后单步运行马上又变成IRQ模式并且中断关闭。可能是由于时钟中断,单步执行后总是被时钟中断,但是我觉得退出时钟中断应该是USER模式吧?我现在比较迷茫,不太确定,可是我无论放断点在任务中哪个位置,全速执行到断点总是处于IRQ模式,中断是关闭的。
 
 我感觉调试的情况好像是虽然中断最终进入了,CAN帧也接收了,但是进入的时候总是在某个OS_EXIT_CRITICAL();之后,必需要在某个OS_EXIT_CRITICAL();之后才会进入IRQ中断。而时钟中断是一直都在进行的,OS_TIMETICK里有OS_EXIT_CRITICAL();所以中断也基本都能得到进入。
 不知道全速运行到任务中停下总是IRQ模式并且关着中断的是不是因为时钟中断的原因?还是这个移植的版本默认在IRQ模式运行?还是我自己写的接口或者时钟中断服务程序有问题,麻烦大家帮我看看,或者谁能给我发个在2200系列上调试通过中断嵌套的完整uC/OS-II移植程序,包括接口跟时钟中断服务程序,谢谢大家!我的邮箱是_pc_tk@163.com
 | 
 |