当前位置: 首页 > news >正文

OpenBLT移植教程

要实现Bootloader远程升级的功能,需要明白该功能的实现分为三个部分:

1.上位机:用于将要烧写的程序传输给mcu;

2.mcu的bootloader分区:用于接收上位机发送的程序数据;

3.mcu的application分区:判断接收到的数据是否为程序升级相关,并跳转到bootloader;

OpenBLT作为一款开源的MCU Bootloader,其开源的代码和工具也包含这三个内容。将其理解就能够正确使用了。

1. 文件结构

下载开源文件后打开,可以看到其文件夹内容如下:

Doc:使用手册等参考文件。

Host:上位机相关工具和源代码。

Target:mcu代码,包含了boot分区和app分区的代码。

Host的上位机可以直接使用,我们不过多讲解。我们主要讲解Target的MCU相关内容。

1.1. Target的文件夹解构如下:

Demo:是针对各个mcu的工程模板,均已经完成编译,可以直接使用。

Source:为主要实现软件功能的源码,也根据不同的mcu进行了分类。

2. 代码工程结构

其代码设计为了考虑移植性和低耦合采用了以下的结构(即Target中针对MCU的代码)。

分为了四个部分:

层级功能描述移植关注点
Application Specific应用配置层修改配置以适应特定OTA需求
Target Independent业务逻辑层实现核心Bootloader逻辑,不依赖具体MCU
Target Dependent硬件抽象层对接MCU底层硬件,需要针对平台适配
Compiler Specific编译器适配层处理不同编译器的差异

根据这个四个部分完成移植。

3. 移植教程

3.1. Boot移植教程

我们以stm32f1系列的mcu型号,以及Keil的开发背景,打开Demo中的一个Boot工程(Demo中的工程模板分为Prog和Boot,Prog为App程序)。查看其文件夹包含设置。如图:

其中lib下的文件为CMSIS和HAL库相关的代码,与OpenBLT不相关,忽略。剩下Boot下的文件和Source下的四个文件包含,也对应了章节2的四个部分。我们接下去就根据章节2的四个部分进行移植。

3.1.1. Application Specific层
  • 位置:Target/Demo/ARMCM3_STM32F1_Nucleo_F103RB_Keil/Boot
  • 内容:配置文件和应用特定实现

移植文件中的c/h文件即可

3.1.2. Target Independent层:
  • 位置:Target/Source
  • 内容:核心业务逻辑实现

该部分对应的是文件夹下的C和H文件,其子文件夹是为Target Dependent和Compiler Specific相关的代码。

3.1.3. Target Dependent层:
  • 位置:Target/Source/ARMCM3_STM32F1
  • 内容:STM32F1系列硬件抽象实现

3.1.4. Compiler Specific层:
  • 位置:Target/Source/ARMCM3_STM32F1/Keil
  • 内容:Keil编译器特定适配

以上,我们的文件就添加完毕了。 

3.1.5. 软件编译

完成3.1.的操作后,还不能通过keil的程序编译。编译后会报错,报错分为3个部分。

1.error:  #20: identifier "tFlashSector" is undefined,我参考了官方的文件工程,发现报错的文件flash_layout.c在工程中是被屏蔽的,不进行工程的编译。

同样将该文件在我们的工程中屏蔽即可。

2.error:  #20: identifier "CAN_HandleTypeDef" is undefined,等关于一些通讯的变量未声明。

因为openblt的demo中已经完成了串口和CAN进行的bootloader升级,故移植之前需要在cubemax勾选CAN以及串口的功能。

3.error:  #20: identifier "LL_RCC_ClocksTypeDef" is undefined,LL库等变量未声明。

demo中的中间层主要是以LL库来进行对接编写的,在cubemax勾选功能后还要设置该功能使用LL库,方可在后续工程中应用。

可以在cubemax的Project management 的advanced settings中可以选择底层库使用HAL还是LL。

其实关于2和3的报错警告是关于底层的链接的,demo中以及按他的方式以LL库的方式实现好了,若是有自己的需求可以根据自己的需求变更target dependent层来重新编写底层的与mcu的对接实现。

解决报错后,就能够正常通过编译了。

3.2. App移植教程

同样打开一个Demo的Prog工程,查看其文件包含,结构如下:

同样的,lib文件下的是CMSIS和HAL库相关的代码,不必理会。即剩下了Prog下面的代码了。

其中boot.c和boot.h文件为核心实现,用于实现从App跳转到Boot的逻辑。根据需要修改和移植到自己的工程软件即可。

http://www.dtcms.com/a/470364.html

相关文章:

  • 怎样做站长建网站荥阳市建设局网站
  • 虚拟仿真实训:打破时空界限,重塑未来技能,引领教育新变革
  • MySQL字符集配置全攻略:告别乱码
  • 「机器学习笔记10」贝叶斯学习——从逆向思维到简化现实的强大武器
  • 01-Python简介与环境搭建-教程
  • 高端设计网站都有哪些微信公众号推广赚钱
  • 数字化转型:概念性名词浅谈(第七十二讲)
  • 济南网站建设泉诺上海手机网站哪家最好
  • 鸿蒙Next文件上传下载:全场景高效数据传输方案
  • STM32G474单片机开发入门(九)低功耗模式实战
  • 怎么样给一个网站做横向导航栏搜索引擎优化的概念是什么
  • 网站开发近期市场做一个网站的预算
  • mac使用国内源安装brew并且配置使用国内源安装软件
  • 基因组组装:3. juicer 比对 HiC 数据至参考基因组
  • 工信部网站原来是wordpress发送自定义邮件
  • 怎么再贴吧给自己的网站做宣传网站建设的维护工作有哪些
  • Thinkphp通过supervisor 执行 queue 队列不间断报错Unable to write output 解决
  • Wireshark常用过滤规则
  • 24小时自助建站网站运营与管理的内容包括
  • 巴塘网站建设建设投资基金管理有限公司网站
  • 配置Python环境之Conda
  • 山东网站建设开发建设部网上办事大厅
  • 十四,数据结构-堆
  • 网站建设v5star房屋装修效果图大全
  • Dlib机器学习算法C++实现示例
  • 在rk3576搞出来了虚拟摄像头,能打抖音伴侣
  • 计算机组成原理 刘宏伟 第一章 计算机系统概论
  • 基于模型的系统工程(MBSE)实践指南:破解研发不确定性的利器
  • 宠物用品技术支持 东莞网站建设顺企网企业查询
  • 网站建设 总结手机 wordpress