bootloader中断向量表怎么重映射
PIC24F的片子,在bootloader程序和app程序中都有中断,那在切换到app程序中时怎么重映射中断向量表呢 可以先参考一下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 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()进行跳转的。 简单的理解就是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 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;
}
在我的boot程序里导入不带中断的app程序运行是正常的,换了带中断的程序就不运行了,有没有大神指导一下 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)); 这个BootLoader没修改过。 在手册上是怎么写的? 中断向量表网上有吧。 cxque 发表于 2022-6-16 14:49
楼主问题解决了吗?我现在也用到同样的问题,只要在app中开启了中断,就会导致复位,不开启中断时没有问 ...
请问您解决了?我用的是PIC16F15376,遇到同样的问题,现象一样。 带BootLoader情况下,需要重新映射中断向量表 中断向量表重映射多次么 这个中断向量表初始化的就映射好了吧。 BootLoader没有修改过。 如何在avr的bootloader中重定位中断向量 bootloader为什么中断向量映射
页:
[1]