chyb2002 发表于 2011-6-5 11:33:35

如何实现从bootloader到APP的跳转

我想在8000000地址放一个boot程序,在8003000地址中放APP程序
boot程序在初始化后运行了一个led闪烁5s的示例,然后通过“(*(void(*)(void))0x0003004)(); ” 来跳转到APP。

APP程序按照ST的demo中给出的方法,MCU初始化后调用“NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x3000); ”来设置中断relocation,然后在keil的设置窗口“target”标签中,设置IROM的起始地址为0x08003000,在“link”标签,设置R/O base address为0x0800300。APP程序编译链接后从map文件中看到reset的确是从8003000开始。


最后通过jlink先下载APP程序,再下载boot程序,运行boot程序,发现执行跳转之后就进入了HardFault中断了,不知道咋回事,麻烦有高手帮忙看看,谢谢。

chyb2002 发表于 2011-6-5 14:34:58

RE:如何实现从bootloader到APP的跳转

呵呵,还是自己搞明白了,是跳转代码写错了,不是要跳转到8003000地址,而是要跳转到8003000地址所存储的地址去,reset向量嘛^_^
(*(void(*)(void))(*(uint32*) 0x08003004))();

lishengyong 发表于 2013-5-29 21:15:01

回复:如何实现从bootloader到APP的跳转

 楼主能把代码发我看看吗,我按你写的内容也下载到了我的板子里面,结果运行不了啊,什么反应都没啊

Tension-419367 发表于 2014-11-7 14:15:34

谢谢楼主分享,说得很清楚。

huanancjz 发表于 2017-6-20 16:51:59

多谢,一语惊醒梦中人啊:lol
页: [1]
查看完整版本: 如何实现从bootloader到APP的跳转