Bootloader是学习嵌入式时的一个概念
先说下为什么单片机不用写bootloader,嵌入式却需要
单片机是前后台程序,直接下载到内置的RAM中了
嵌入式一般程序都放在片外ROM中,需要在系统启动后把程序移动到片内RAM中
由此可见,bootloader用处主要是搬移程序到面内RAM。
bootloader一般放在地址0h处,这样系统刚刚启动后就会运行
bootloader具体做两步
1、配置看门狗,中断,定时器,系统时钟,初始化硬件,内存映射等
(内存映射:物理地址用虚拟地址表示,以后直接在程序里写虚拟地址代表物理地址)
2、跳转到c语言main函数出执行程序
除了做以上两种常见功能外,还可以有自检更新升级功能
比如可以刚启动时,检查是否需要更新程序,然后可以联网下载或者U盘更新系统等方式
引导进新的程序,一般可以用串口,iic等方式
下面说下程序怎么写
(1)先准备几个功能函数,比如擦除块,写字节,写块,写段之类的,总结其实就是,写一个可以传入地址和数据两个参数的函数,然后设置一个起始地址全局变量,然后每调用一次该函数第一个参数传入数据,第二个参数(起始地址)自加,按顺序写入各种数据。
(2)首先设置系统时钟PLL:因为无论是用串口还是什么通信搬移程序都需要时钟频率同步信号。
(3)设置通信方式,串口,iic,等
(4)不断调用(1)中的函数传写数据,写寄存器,配置各种东西
(5)最后一段也是调用(1)中的函数把程序代码搬移到RAM中(程序代码一般是hex,dat之类的编译完之后的16进制文件)
如果你要更新程序直接改程序然后重新编译.hex、.dat之类的文件,最后在每次启动系统后通过bootlaoder自动搬移到RAM中运行。