打印
[PIC®/AVR®/dsPIC®产品]

bootloader中断向量表怎么重映射

[复制链接]
2307|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yoyows|  楼主 | 2020-4-9 14:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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

使用特权

评论回复
5
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;
}

使用特权

评论回复
6
yoyows|  楼主 | 2020-4-14 15:52 | 只看该作者
在我的boot程序里导入不带中断的app程序运行是正常的,换了带中断的程序就不运行了,有没有大神指导一下

使用特权

评论回复
7
cxque| | 2022-6-16 14:49 | 只看该作者
yoyows 发表于 2020-4-14 15:52
在我的boot程序里导入不带中断的app程序运行是正常的,换了带中断的程序就不运行了,有没有大神指导一下 ...

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

使用特权

评论回复
8
averyleigh| | 2022-6-20 15:22 | 只看该作者
这个BootLoader没修改过。   

使用特权

评论回复
9
yeates333| | 2022-6-20 15:57 | 只看该作者
在手册上是怎么写的?  

使用特权

评论回复
10
cehuafan| | 2022-6-20 17:03 | 只看该作者
中断向量表网上有吧。   

使用特权

评论回复
11
eepo| | 2022-6-24 08:25 | 只看该作者
cxque 发表于 2022-6-16 14:49
楼主问题解决了吗?我现在也用到同样的问题,只要在app中开启了中断,就会导致复位,不开启中断时没有问 ...

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

使用特权

评论回复
12
usysm| | 2023-2-2 15:38 | 只看该作者
带BootLoader情况下,需要重新映射中断向量表

使用特权

评论回复
13
1988020566| | 2023-2-2 15:47 | 只看该作者
中断向量表重映射多次么               

使用特权

评论回复
14
macpherson| | 2023-2-8 12:10 | 只看该作者
这个中断向量表初始化的就映射好了吧。

使用特权

评论回复
15
mollylawrence| | 2023-2-14 10:23 | 只看该作者
BootLoader没有修改过。

使用特权

评论回复
16
biechedan| | 2023-2-16 17:03 | 只看该作者
如何在avr的bootloader中重定位中断向量

使用特权

评论回复
17
ccook11| | 2023-2-16 17:32 | 只看该作者
bootloader为什么中断向量映射

使用特权

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

本版积分规则

10

主题

31

帖子

0

粉丝