打印
[ZLG-ARM]

ads中__irq的疑问!

[复制链接]
1862|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
luogs|  楼主 | 2007-7-31 09:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一般介绍的是在不嵌套的isr中,使用__irq编译器自动产生寄存器保护代码.

在ZLG的提供的ucso-ii的例程中isr都没有加__irq,我在isr上加上__irq也运行正常,但是timer0(提供ucos-ii time tick) isr 前加__irq就运行不对了,哪位大侠可以解释一下吗?

相关帖子

沙发
Ice_River| | 2007-7-31 11:28 | 只看该作者

去查查 加__irq和不加的区别!

我记得看到过,周工的某个文档里面有,想不起来了,抱歉!!!!

使用特权

评论回复
板凳
bear2000| | 2007-7-31 15:45 | 只看该作者

我的一点理解

在target.c中有一段代码
        void IRQ_Exception(void)        (1)         
{
    while(1);                   
}
以及在初始化中断向量时   
   VICDefVectAddr = (uint32)IRQ_Handler;      (2)
在IRQ.S中:
   IRQ_Handler HANDLER IRQ_Exception          (3)

我的理解是如果在ISR后面加入"__irq",编译器会将该ISR认为是irq中的一员,根据(1)(2)(3),最终的结果是程序一直在中断服务程序中循环,不能从中断中恢复。

本人在尝试将LPC2141的虚拟串口程序移植到ucosii的过程中就遇到过以上我说的问题,后来在将ISR后面的"__irq"取掉以后,能够退出中断服务程序,虚拟串口程序也能正常运行。

使用特权

评论回复
地板
wlsui| | 2007-7-31 23:35 | 只看该作者

Re

看下加了__irq时编译器的汇编代码就知道了

使用特权

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

本版积分规则

11

主题

70

帖子

0

粉丝