目前碰到一个问题,我的IAP程序从0X0800000-0X08007000,APP程序从0x08008000-0x08011000.如果我的APP程序先用仿真器烧写进去,然后用IAP直接跳转可以跳转成功。然后我在APP程序中新的APP程序使用HTTP下载程序到0x08012000开始的地址内,然后复位重新从IAP开始运行,此时就跳过去后有时候直接进入hardfault中断中,可以确定没有进入到主程序,因为刚进入主程序的时候我通过串口输出一个字符'S'。程序大小30K,可以确定的是通过KEIL生成的BIN文件跟我下到0x08012000开始的数据是完全一致的,我通过IAP搬移过去的也是对的,但就是不能像仿真器烧写进去的代码一样直接执行,不知道是不是KEIL生成的BIN文件跟直接仿真器烧进去的不一样?我的KEIL版本是V4.72.
这个问题纠结了一个多礼拜了,有时候烧进去的程序是对的,但是如果程序中修改了一点小问题,比方说串口输出的's'变成'h',有时候都会跳不过去。
堆栈我已经设置到0x00001400,APP的最大堆栈式2172,BOOT端的最大堆栈是200字节,我在.s文件中把两个程序的栈全部设置为难0x00001400了。
|