OTA编程01-Bootloader写入

本文介绍了Bootloader的基本功能,即改变程序指针以加载应用程序。它包括了Bootloader的简单实现,以及如何编写和引用跳转程序,确保程序在合法地址上正确执行。通过实例展示了地址配置和检查栈顶地址的过程。
摘要由CSDN通过智能技术生成

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.
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值