【问题标题】:#pragma vector directive ignored on iar rh850 compiler#pragma vector 指令在 iar rh850 编译器上被忽略
【发布时间】:2014-02-19 09:41:22
【问题描述】:

我正在使用 IAR RH850 编译器,并且正在实现中断例程。看来我已经写了所有的书,但是中断跳转到默认的中断处理程序(循环)而不是我的处理程序。我的做法与其他 IAR 项目一样,我使用带有矢量偏移量和 __interrupt 关键字的 #pragma vector 指令编写了中断例程。

#pragma vector=0x100
__interrupt void ISR_CustomHandler(void)
{
  __DI();
  InterruptRoutine();
  __EI();
}

在我的头文件中:

#include <intrinsics.h>
#pragma language=extended
#include <iorh850.h>
__interrupt void ISR_CustomHandler();

在链接器输出文件中它看起来像是被注册的(地址是正确的):

___interrupt_0x10       0x0000941c    0x2  Code  Wk  default_handler.o [4]
___interrupt_0x100      0x000087d0         Code  Gb  RH850.o [1]
___interrupt_0x101      0x0000941c    0x2  Code  Wk  default_handler.o [4]

还有什么需要注意的吗?

在中断时 CPU 跳转到 0x100,这是正确的。但是从这个位置跳转是不正确的——看起来链接器忽略了我的自定义处理程序。任何想法为什么?

【问题讨论】:

    标签: interrupt-handling iar


    【解决方案1】:

    您需要为要通过表调用的每个 ISR 设置相应中断控制寄存器 (ICCxxxx) 中的 TB 位,或者修改默认处理程序以确定要调用的 ISR 并从默认值中调用它处理程序。从你的问题描述来看,我认为你想使用表格法(在相应的ICC中断控制寄存器中设置相应的TB位。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多