https://www.cnblogs.com/god-of-death/p/7258957.html
bootloader的一个很重要的能力是能实现程序跳转,即从一个完整的程序跳转到另一个完整的程序进行运行;在嵌入式系统中,bootloader一个很重要的功能是更新程序,要求bootloader不仅能接收数据,还能把数据写入flash中
在STM32中,ST官方在单片机内部嵌入了一个bootloader,所以可以使用UART进行下载;如果ST官方的bootloader有哪一点我们不满意,也可以自己编写bootloader,当然也可以实现几乎和官方bootloader一样的功能,一般我们编写自己的bootloader用于在单片机不断电的情况下通过网络等方式远程更新单片机的程序(不是自己编写的bootloader),自己编写的bootloader也称为
IAP。
不同于bootloader的接收数据,数据写入FLASH(无法直接写入flash,因为数据的接收是用UART等方式)从而实现更新程序,ST-LINK仿真器更新程序的方式是直接操作flash,类似于操作EEPROM等存储器,ST-LINK从下载程序角度来看也是bootloader。
什么是启动代码?
启动代码是系统上电或者复位后运行的第一段代码,是进入C 语言的main 函数之前需要执行的那段汇编代码。
启动代码有何用?
它的作用是在用户程序运行之前对系统硬件及软件环境进行必要的初始化并在最后使程序跳转到用户程序。它直接面对ARM 处理器内核及硬件控制器进行编程,所执行的操作与具体的目标系统紧密相关。
C语言程序的运行需要具备一定的条件,如分配好外部数据空间,堆栈空间和中断入口等。另外,汇编代码可以更直接地对硬件进行操作,效率更高,这对启动中断等对时间要求更高的情况是非常必要的
什么是Bootloader?
Bootloader 不是一段代码,它是一个具有引导装载功能的完整的程序,如可以引导装载linux的vivi,uboot,以及通常PC机上的BOIS程序等。
启动代码和Bootloader关系?
Bootloader 也包含了相应的启动代码,也就是说,启动代码是Bootloader的一部分,是所有相应应用程序的一部分。