目前通讯,收发都正常,就是程序不跳转。
我说下我程序的思路,恳请指正,谢谢. 我boot地址区间0-0x1000 App地址区间 0x1000-0x1E000之间。
1、设置KEIL
因为App在后面所以,需要重新定义中断向量,设置Keil在C51 -> Interrupt vector at address 为0x1000,因为我的app是1000H开始存储的,中断偏移量+1000
2、更改STARTUP.A51启动文件加入 在第105行开始
ORG 00003H
LJMP 01003H
ORG 0000BH
LJMP 0100BH
ORG 00013H
LJMP 01013H
ORG 0001BH
LJMP 0101BH
ORG 00023H
LJMP 01023H
ORG 0002BH
LJMP 0102BH
ORG 00033H
LJMP 01033H
ORG 0003BH
LJMP 0103BH
ORG 00043H
LJMP 01043H
ORG 0004BH
LJMP 0104BH
ORG 00053H
LJMP 01053H
ORG 0005BH
LJMP 0105BH
ORG 00063H
LJMP 01063H
ORG 0006BH
LJMP 0106BH
ORG 00073H
LJMP 01073H
ORG 0007BH
LJMP 0107BH
ORG 00083H
LJMP 01083H
ORG 0008BH
LJMP 0108BH
ORG 00093H
LJMP 01093H
ORG 000A3H
LJMP 010A3H
3、设置BL51Loacate -> code Range 设置 0x1000-0x1E000,是让app程序存储在 0x1000-0x1E000
4、主程序处理如下
#define boot 0x1000
//判断是否需要程序更新
ms=40000;
while(ms--)
{
if(serial_get_char() == 0x31)//上位机发31请求
{
serial_put_char(0x31);//回复表示可以
Erase_Flash();//擦除
AppFlashUpdata();//更新
goto boot_out;//跳转
}
}
boot_out:
((void(code *)(void))boot)(); //跳转执行
程序目前就是下载后不执行,估计没跳转好,请问我是不是设置有问题,或者地址范围有问题,请给予指导。感谢