打印
[ZLG-MCU]

请大家帮看看ucOS-II的调试问题!

[复制链接]
1268|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
_pc_tk|  楼主 | 2008-5-11 12:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的是在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

相关帖子

沙发
zlgarm| | 2008-5-12 08:33 | 只看该作者

请到ZLG-ARM发表

请到ARM7的专栏:ZLG-ARM发表。

(zlgmcu_zsg)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

8

帖子

0

粉丝