打印
[ZLG-ARM]

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

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

相关帖子

沙发
_pc_tk|  楼主 | 2008-5-21 08:21 | 只看该作者

楼上在说什么?

不明白什么意思,我说过这个话????????????????

使用特权

评论回复
板凳
happytoday| | 2008-5-21 11:18 | 只看该作者

周公的移植不太好,实话

使用特权

评论回复
地板
Swd21ic| | 2008-5-25 11:13 | 只看该作者

re

看官方的移植~

使用特权

评论回复
5
Ice_River| | 2008-5-26 10:08 | 只看该作者

ZLG 好像开发了CAN的中间件

你好好找找!

使用特权

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

本版积分规则

6

主题

8

帖子

0

粉丝