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.htypedef void (*iapfun)(void);//?¨ò?ò?oˉêyààdíμ?2?êy.iapfun jump2app; __asm void msr_msp(u32 addr) { msr msp, r0 //set main stack value bx 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程序的时候,要记着修改这里的起始地址。
人工智能芯片让手机更聪明 AI Engine被普遍采用
微电网是什么意思 微电网的作用
安森美半导体将在上海AMTS展示 用于未来汽车的电源和感知方案
MLCC为什么会啸叫?所有MLCC都会啸叫吗?哪些场合MLCC啸叫明显?
奥拓电子XR虚拟拍摄解决方案为影视广播产业打开更广阔的市场空间
图文详解STM32单片机远程升级
又一家国内面板厂商将在印度投资布局
合众思壮一体化全面监测感知网助力生物多样性保护
与晶振并联的1M电阻是什么用?应该怎么选?
Cloudam云端如何助力企业实现计算效率数百倍的提升
小米10手机芯片全是使用的美国芯片
无线传感器网络的发展趋势
三星S8新品发布会抢先看:三星S8外观、配置、性能、价格、功能360度大揭秘!惊喜or惊吓?
魅族Pro7最新渲染图:颠覆了以前的设计!
PLC编程案例之控制机械手实现简单搬运流程
Vitis加速库:广泛且性能优化的开源库
Synaptics宣布凭借30年人机交互的领先经验进军汽车市场
傅盛:人工智能业务占比虽小 但增长很快创造可观的利润和现金流
STM32串口接收不定长数据原理与源程序
ADGM1001 SPDT MEMS开关如何助力通过单插入测试