嵌入式处理器中Bootloader程序是什么以及IAP设备固件更新原理

版权声明:本文为博主原创文章,未经博主允许不得转载。欢迎联系我qq2488890051 https://blog.csdn.net/kangkanglhb88008/article/details/89578061

Bootloader程序也是一个单片机程序,编译后也是一个hex文件,然后下载到内部flash的前面区域

1.选择启动处在内部flash后面区域1的app1还是区域2的app2,然后把cpu运行指针加载到对应app的第一行代码那儿

2.假如用户选择了读app2,但是cpu不断从flash(这里的flash应该是指外部flash,读取速度比较慢,就比如电脑的硬盘)那儿读取指令然后译码执行可能速度不够快,那么就会先把指令拷贝到单片机内部的一个指令缓冲区(也是一块存储区,读取和写入速度很快),然后cpu直接在这个缓冲区进行指令读取译码执行。那么这个复制指令是由谁来完成的呢,就是由这个Bootloader程序完成的,因为我们这样想啊,app2一句代码都还没执行,所以自己肯定不可能把自己的代码指令复制到指令缓冲区,此时能操控cpu的就是这个Bootloader程序罢了,直到cpu运行指针加载到对应app2的第一行代码那儿,app2才能操控cpu执行

3.那这两个app1和app2是如何被放置到指定的flash后面区域的呢,这个有两种方式,一是通过keil软件直接烧录到那儿(需要在keil软件中设置一下,比如,此app程序地址空间应该是多少到多少,然后烧录进去,keil就只擦除这个对应的flash区域和把程序放在那儿,所以前面已经存在的Bootloader程序并不会被擦除掉,同理app2程序也是这样烧录进去,只要在keil中指定的程序起始地址和终止地址跟前一个app不重叠就行了)。第二种方式就是Bootloader程序里面使用了单片机串口功能,从电脑串口助手那儿接收到编译好的app程序(也得在指定了此app在单片机flash中的起始地址终止地址)bin文件,

然后Bootloader程序就会通过flash_write(app,address)的方式(自己往自己的flash里写数据,也叫做自编程,很多单片机都支持这个功能,那么也就是支持了IAP功能,即在应用编程,我们好好想想,电脑可以自己给自己编程序然后运行,不就是这样的功能嘛,可以这样理解,windows操作系统是app1,它编写了app2而且放在硬盘其它位置,然后调用app2(运行app2一个时间片后,被app1内部的中断程序中断了,把cpu指针抢回去了,然后app1又调用app3,如此的不断任务切换,这个就是操作系统实现的功能))把这个app写入本单片机的flash后面目标区域(其实就跟keil下载是一样作用,只是用串口的方式可以实现app在线升级,比如事先得到了编译好的app程序文件,这时候只需要具有串口功能的软件或者设备就可以给这个单片机更新内部app程序(即更新固件),比如电脑的串口助手,板载串口蓝牙,其它具有串口的单片机等等都可以给他更新app,使得批量更新啥的变得方便(因为不是任何时候每个人都有keil这个软件来给单片机下载这个app))

猜你喜欢

转载自blog.csdn.net/kangkanglhb88008/article/details/89578061