我用了“第四十八章的串口IAP实验”的程序烧录了开发板,然后把一个APP放在FLASH的首地址#define FLASH_APP1_ADDR 0x08010000 里
烧写串口的程序可以成功跳转到这个APP里面
IAP程序放在0x08000000~0x0800FFFF
我把IAP程序改到我自己应用里面去
我在mian()还是沿用这个语句
if(((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000)//判断是否为0X08XXXXXX.
{
iap_load_app(FLASH_APP1_ADDR);//执行FLASH APP代码
}
其中
void iap_load_app(u32 appxaddr)
{
if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000) //检查栈顶地址是否合法.
{
jump2app=(iapfun)*(vu32*)(appxaddr+4); //用户代码区第二个字为程序开始地址(复位地址)
MSR_MSP(*(vu32*)appxaddr); //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
jump2app(); //跳转到APP.
}
}
我用JTAG烧录串口的IAP程序进去按按键可以直接跳转到APP(RTC实验)里去,液晶屏会显示程序内容
我再用JTAG烧录自己修改的IAP程序进去,同样按按键结果液晶屏就变成一片空白
然后再少串口的那个IAP,又能进入APP了
RTC的APP那部分程序没有动,烧录IAP程序的时候没有对其进行更新
不知道为什么我直接调用这个函数就跳转不成功,希望高手能给予指点,我错在什么地方?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
可否说下经验?
一周热门 更多>