21ic问答首页 - PIC18的bootloader引导APP正常,但可能跑飞?
PIC18的bootloader引导APP正常,但可能跑飞?
beijk2023-06-16
硬件: 单片机:PIC18F25K80
情况:
1. bootloader单独跑没有问题;APP单独跑也没问题。
2. 将bootloader的hex文件,loadables到app工程,并将app的cod offset为0x0C00,成功进入app模式。
问题:
由bootloader引导app模式,存在程序跑飞的情况(中断已不响应)。有时候能正常运行半小时,有时仅能正常运行几十秒。
bootloader部分代码:
unsigned char isBootloader __at(0x00AA);
// Bootloader中的中断
void interrupt low_priority InterruptISR_Low(void)
{
if(0 == isBootloader)
{
asm ("pagesel " str (APP_LOW_VECTOR));
asm ("goto " str (APP_LOW_VECTOR));
}
else
lowPriorityISR();
}
void main()
{
...初始化
if(0 == isBootloader)
{
STKPTR = 0x00; // 清除 返回堆栈指针
BSR = 0x00;
asm ("pagesel " str(APP_RESET_VECTOR));
asm ("goto " str(APP_RESET_VECTOR));
}
...
}
情况:
1. bootloader单独跑没有问题;APP单独跑也没问题。
2. 将bootloader的hex文件,loadables到app工程,并将app的cod offset为0x0C00,成功进入app模式。
问题:
由bootloader引导app模式,存在程序跑飞的情况(中断已不响应)。有时候能正常运行半小时,有时仅能正常运行几十秒。
bootloader部分代码:
unsigned char isBootloader __at(0x00AA);
// Bootloader中的中断
void interrupt low_priority InterruptISR_Low(void)
{
if(0 == isBootloader)
{
asm ("pagesel " str (APP_LOW_VECTOR));
asm ("goto " str (APP_LOW_VECTOR));
}
else
lowPriorityISR();
}
void main()
{
...初始化
if(0 == isBootloader)
{
STKPTR = 0x00; // 清除 返回堆栈指针
BSR = 0x00;
asm ("pagesel " str(APP_RESET_VECTOR));
asm ("goto " str(APP_RESET_VECTOR));
}
...
}
您需要登录后才可以回复 登录 | 注册