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

PIC18的bootloader引导APP正常,但可能跑飞?

[复制链接]
593|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
beijk|  楼主 | 2023-6-16 20:11 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 beijk 于 2023-6-16 20:24 编辑

硬件:        单片机: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));
        }
        ...
}

图Edit.bmp (715.21 KB )

app程序,仅做了如图修改

app程序,仅做了如图修改

使用特权

评论回复
沙发
CoolSilicon| | 2023-6-26 14:09 | 只看该作者
问题可能是在unsigned char isBootloader __at(0x00AA);这个变量上..
你在BOOT里面使用绝对地址的方法定义 isBootloader , 但是在app里面, 它却不知道0x00AA这个地址被你boot里面用到了, 所有, 当app跑起来的时候, 如果有变量也被用到了, 那么就异常修改了这个 isBootloader 变量, 这就会导致你的终端异常跑到lowPriorityISR()里面去了, 而不是你app要求的(APP_LOW_VECTOR), 看起来就像是没响应了....

使用特权

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

本版积分规则

7

主题

18

帖子

1

粉丝