OTA编程01-Bootloader写入
1-Bootloader程序载入
BootLoader程序相对比较简单,主要工作就是将程序的运行的指针改变,将指针指向将要执行的目标程序。如下图所示,BootLoader中程序就1行代码,将指针指向应用程序(Application_Addr1)。
在程序对应的.map文件中查找,可以看出程序不大于7K。
BootLoader程序编译完毕后程序大概在6K左右,分配BootLoader程序占用空间20K应该够用了。
如下是烧录BootLoader的地址配置。
程序从0x8000000开始执行BootLoader程序,紧接着运行到跳转程序处,开始运行目标程序。见下文。
可以下载进入运行一下。看看BootLoader运行情况。程序中将打印出**“> Start up…”**字样。
2-跳转程序编写及引用
跳转程序代码,在需要跳转的地方进行引用。其中Jump_Fun地址是程序目标地址。其定义如以下代码区所示。
如: IAP_ExecuteApp(Application_Addr);
其中Application_Addr为目标程序地址
/* 程序跳转函数 */
typedef void (*Jump_Fun)(void);
void IAP_ExecuteApp (unsigned int App_Addr)
{
Jump_Fun JumpToApp;
if ( ( ( * ( __IO unsigned int * ) App_Addr ) & 0x2FFE0000 ) == 0x20000000 ) //检查栈顶地址是否合法.
{
JumpToApp = (Jump_Fun) * ( __IO unsigned int *)(App_Addr + 4); //用户代码区第二个字为程序开始地址(复位地址)
MSR_MSP( * ( __IO unsigned int * ) App_Addr ); //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
JumpToApp(); //跳转到APP.
}
}