21ic问答首页 - 求助:PIC16F15376的bootloader跳转App异常
求助:PIC16F15376的bootloader跳转App异常
eepo2022-06-23
本帖最后由 pzsh 于 2022-6-25 15:31 编辑
求助:PIC16F15376的bootloader跳转App异常
情况描述:
开发环境:MPLAB X IDE 5.45.
bootloader的ROM空间0-0x7FF。
App的ROM空间0x800-0x3FFF。
App单独运行不加offset时正常。
bootloader+App,bootloader结束可以正常跳转App,但是App运行到"使能中断",程序就复位了。
如果App中不使能中断,App程序可以持续运行。
下面是bootloader中的中断向量跳转代码:
#define NEW_RESET_VECTOR 0x0800
#define NEW_INTERRUPT_VECTOR 0x0804
#define _str(x) #x
#define str(x) _str(x)
asm("psect intentry,global,class=CODE,delta=2");
asm("pagesel " str(NEW_INTERRUPT_VECTOR));
asm("GOTO " str(NEW_INTERRUPT_VECTOR));
下面是bootloader运行结束跳转代码:
STKPTR = 0x1F;
BSR = 0;
asm("pagesel " str(NEW_RESET_VECTOR));
asm("goto " str(NEW_RESET_VECTOR));
求助:PIC16F15376的bootloader跳转App异常
情况描述:
开发环境:MPLAB X IDE 5.45.
bootloader的ROM空间0-0x7FF。
App的ROM空间0x800-0x3FFF。
App单独运行不加offset时正常。
bootloader+App,bootloader结束可以正常跳转App,但是App运行到"使能中断",程序就复位了。
如果App中不使能中断,App程序可以持续运行。
下面是bootloader中的中断向量跳转代码:
#define NEW_RESET_VECTOR 0x0800
#define NEW_INTERRUPT_VECTOR 0x0804
#define _str(x) #x
#define str(x) _str(x)
asm("psect intentry,global,class=CODE,delta=2");
asm("pagesel " str(NEW_INTERRUPT_VECTOR));
asm("GOTO " str(NEW_INTERRUPT_VECTOR));
下面是bootloader运行结束跳转代码:
STKPTR = 0x1F;
BSR = 0;
asm("pagesel " str(NEW_RESET_VECTOR));
asm("goto " str(NEW_RESET_VECTOR));
赞0
评论
2022-07-09
赞0
评论
2022-07-01
赞0
评论
2022-06-30
赞0
评论
2022-06-28
赞0
评论
2022-06-25
您需要登录后才可以回复 登录 | 注册