点击蓝字
关注我们
因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享
来源于网络,侵删
1、需要两份程序
BootLoader和App程序,两份程序均可以通过jlink下载,只需要将下载地址修改一下即可:
2、在BootLoader中的跳转函数
#define APP_FLASH_ADDR 0x8008000 iap_load_app(APP_FLASH_ADDR);
//#include "include.h"#include "iap.h"#include "main.h"typedef void (*iapfun)(void);//?¨ò?ò???oˉêyààDíμ?2?êy.iapfun jump2app; __asm void MSR_MSP(u32 addr) {MSR MSP, r0 //set Main Stack valueBX r14}/******************************************************************************* Function name £o iap_load_app* Function describe £o ì?×aμ?app3ìDò?£* Input £o appxaddr£oapp3ìDòμ?μ??·?£ * Output £o No* Illustration £o * Revise £o* Existing problems : No*****************************************************************************/
void iap_load_app(u32 appxaddr)
{if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000){ jump2app=(iapfun)*(vu32*)(appxaddr+4);MSR_MSP(*(vu32*)appxaddr);jump2app(); //ì?×aμ?APP.}}
3、在app中修改中断向量表的偏移地址
4、程序自动选择向量表的偏移地址
适用场景,一颗芯片里面有3个程序:
BootLoader程序,起始地址:0x08000000
APP1程序,起始地址:0x08008000
APP2程序,起始地址:0x08013000
这种情况就需要BootLoader程序自动选择往哪个地址跳转,这个地址再升级完以后会变,比如当前的跳转地址是app1,那么升级后跳转的地址就变为app1。
针对这种场景,做如下修改:
5、keil编译器中设置的程序起始地址会别写进bin文件
上图中的地址会被写入到bin文件中,所有在编译APP1程序和APP2程序的时候,要记着修改这里的起始地址。
如果你年满18周岁以上,又觉得学【C语言】太难?想尝试其他编程语言,那么我推荐你学Python,现有价值499元Python零基础课程限时免费领取,限10个名额!
▲扫描二维码-免费领取
戳“阅读原文”我们一起进步