Bootloadr for MCU
文章平均质量分 86
欲盖弥彰1314
如有一味绝境,非历十方生死。
展开
-
从0写bootloader — Bootloader重定位APP
一般情况下,不会采用APP重定位自己。假如APP程序存放在外接的SPIFlash或者SD卡上,SPIFlash和SD卡是不支持XIP的,APP代码无法执行,重定位代码也是APP代码的一部分,何谈重定位自己。此时就需要要采用Bootloader重定位APP的策略了。Bootloader重定位APP程序需要知道APP的加载地址和链接地址,但是Bootloader程序和APP一般在是不同Project的程序,无法直接得到加载地址和链接地址。...原创 2022-07-18 23:48:17 · 434 阅读 · 0 评论 -
从0写bootloader —— APP自重定位
使用的IDE为MDK。散列文件:Bootloader程序:APP程序:,打印数据为乱码,因为buf是全局变量,属于数据段,它的加载地址则是FLASH上,散列文件定义的数据段链接地址是 ,数据段的加载地址和链接不一致,所以需要重定位,而bootloader和APP都没有做重定位,所以打印出来是乱码。修改APP实现重定位数据段和清除BSS段: 在调用xmain之前重定位数据段 在调用xmain之前清除BSS段APP自我复制所有段实现重定位修改散列文件如下:加载地址是0x800原创 2022-07-13 20:35:47 · 371 阅读 · 0 评论 -
从0写bootloader — 最简单的bootloader和App
对于空间划分是人为定义的。启动文件start.s:最简单的启动,暂时不使用中断向量。如果是通过MDK设置链接地址,不勾选(不使用Target对话框的内存布局)遇到的问题:必须到导出中断向量全局可见,不然程序无法启动:链接地址通过散列文件指定: 这是创建工程默认创建的散列文件usart.c: 只使用串口打印简单的信息main.c:烧录程序上电运行,打印信息:bootloader正常运行。从自定义划分的地址看,APP开始的地址是这里为什么跳转使用的是呢?原因是STM32是Cortex-M原创 2022-07-09 20:12:51 · 1762 阅读 · 0 评论 -
从0写bootloader — bootoader功能知识
启动其他程序:对于单片机程序,一般不需要用Bootloader,直接就能运行APP。为什么还需要bootloader?当RAM、Flash比较小时,一般APP就在Flash烧写的地方执行,这种叫做,。APP程序去更新自己程序,那就把升级程序给覆盖,APP都执行不了了,升级失败,这种方式无法实现。当RAM比较大,可以将APP全部拷贝到RAM中执行,此时更新程序就会覆写Flash上的程序员,APP依然可以运行,但是一旦系统断电或者其他原因导致升级失败,系统复位重新上电后Flash中就没有程序可以拷贝到RAM原创 2022-07-09 20:11:25 · 992 阅读 · 0 评论