yoyows 发表于 2020-4-9 14:12

bootloader中断向量表怎么重映射

PIC24F的片子,在bootloader程序和app程序中都有中断,那在切换到app程序中时怎么重映射中断向量表呢

zlzilla 发表于 2020-4-12 20:40

可以先参考一下16bit的bootloader,使用MCC可以直接选择要REMAP的中断到Applicaiton。
https://www.microchip.com/SWLibraryWeb/product.aspx?product=16-bit-Bootloader

也可以参考AN1157
https://www.microchip.com/wwwAppNotes/AppNotes.aspx?appnote=en533906

yoyows 发表于 2020-4-13 17:39

zlzilla 发表于 2020-4-12 20:40
可以先参考一下16bit的bootloader,使用MCC可以直接选择要REMAP的中断到Applicaiton。
https://www.microch ...

你可以大概讲解一下app中断向量表跳转过程吗,看AN1157我的个人理解是,bootloader的gld文件中先写好bootloader和app的中断向量表,然后在app程序中调用中断时按地址调用,一种是按void __attribute__((__interrupt__,address(0x3000 + 0x0EC),__no_auto_psv__)) _USB1Interrupt(void)调用,另一种是按void __attribute__ ((address(0x3000 + 0x0EC))) ISRTable()进行跳转的。

zlzilla 发表于 2020-4-13 22:24

简单的理解就是bootloader将自己的IRQ向量表中要转出去的IRQ,放一个GOTO xxx汇编指令,这个xxx就是Application IRQ的入口地址,所以Bootloader需要知道Application的IRQ表的地址(MCC支持图形化配置相关的地址),这个方法并不需要改gld文件,也是新的16bit bootloader的实现方式。当然如果MCU支持AIVT也可以用直接切中断向量表,这个在application中切就可以了(https://microchipdeveloper.com/faq:2702)

下面是讲解16bit interrupt的文档可以参考。
https://microchipdeveloper.com/16bit:exceptions
http://ww1.microchip.com/downloads/en/DeviceDoc/39707a.pdf

yoyows 发表于 2020-4-14 09:53

zlzilla 发表于 2020-4-13 22:24
简单的理解就是bootloader将自己的IRQ向量表中要转出去的IRQ,放一个GOTO xxx汇编指令,这个xxx就是Applica ...

我用过切换AIVT的方法 ,但是app的中断还是没起来
boot的主程序是这样的:
int main(void)
{
    bool Init;
    INTCON2bits.ALTIVT = 1;
    SYSTEM_Initialize();
    if(_RB5 == 1)//button press
    {
      INTCON2bits.ALTIVT = 0;
      __asm__("goto 0x3000");
    }
    Init = Initialize();

    while(1)
    {   
      if (Init)
      ProcessCommand();
      else
      {
      }
    }
    return 1;
}

yoyows 发表于 2020-4-14 15:52

在我的boot程序里导入不带中断的app程序运行是正常的,换了带中断的程序就不运行了,有没有大神指导一下

cxque 发表于 2022-6-16 14:49

yoyows 发表于 2020-4-14 15:52
在我的boot程序里导入不带中断的app程序运行是正常的,换了带中断的程序就不运行了,有没有大神指导一下 ...

楼主问题解决了吗?我现在也用到同样的问题,只要在app中开启了中断,就会导致复位,不开启中断时没有问题。boot中使用以下代码设置中断向量:
asm("psectintentry,global,class=CODE,delta=2");
asm("pagesel " str(NEW_INTERRUPT_VECTOR)); // 0x1004
asm("GOTO " str(NEW_INTERRUPT_VECTOR));

averyleigh 发表于 2022-6-20 15:22

这个BootLoader没修改过。   

yeates333 发表于 2022-6-20 15:57

在手册上是怎么写的?

cehuafan 发表于 2022-6-20 17:03

中断向量表网上有吧。   

eepo 发表于 2022-6-24 08:25

cxque 发表于 2022-6-16 14:49
楼主问题解决了吗?我现在也用到同样的问题,只要在app中开启了中断,就会导致复位,不开启中断时没有问 ...

请问您解决了?我用的是PIC16F15376,遇到同样的问题,现象一样。

usysm 发表于 2023-2-2 15:38

带BootLoader情况下,需要重新映射中断向量表

1988020566 发表于 2023-2-2 15:47

中断向量表重映射多次么               

macpherson 发表于 2023-2-8 12:10

这个中断向量表初始化的就映射好了吧。

mollylawrence 发表于 2023-2-14 10:23

BootLoader没有修改过。

biechedan 发表于 2023-2-16 17:03

如何在avr的bootloader中重定位中断向量

ccook11 发表于 2023-2-16 17:32

bootloader为什么中断向量映射
页: [1]
查看完整版本: bootloader中断向量表怎么重映射