Flash 全片自检过程中巧用 Linker 自定义变量详细文档:点击下载> 一、核心背景Flash 自检是功能安全应用 ClassB/SIL 的必备测试项,分为启动时和运行时自检,其中启动时自检需对 Flash 全片 ROM 校验,配置的 ROM 实际占用大小参数必须精准 ,否则自检会失败。本文重点讲解 STM32 功能安全 Flash 自检原理,以及 KEIL 编译环境下通过 Linker(链接器)自定义变量自动获取实际 ROM 大小的方法,解决手动配置参数随代码修改需反复调整的问题。 二、功能安全 Flash 自检原理(以 ClassB 4.0 自检库为例)采用CRC 算法 对 ROM 区校验,分为CRC 预计算 和CRC 比较 两个核心步骤,二者配合完成 Flash 全片自检。 1. CRC 预计算对编译生成的可执行文件生成 CRC 并写入 Flash,需遵循 Flash 空间划分和校验规则,核心步骤:
2. CRC 比较程序运行时调用自检库 API 完成校验,核心要求:
三、Linker 自定义符号变量计算实际 ROM 大小(KEIL 环境)1. 手动配置 ROM 大小的弊端手动编译后查看 ROM 大小再填入配置参数,每次修改代码会导致 ROM 大小变化,需重新手动调整,否则自检出错,效率低且易出错。 2. 解决方案:复用 KEIL 编译器内置 Linker 变量KEIL 编译过程中会自动定义包含各段长度信息的 Linker 变量,可直接在用户代码中引用,无需手动计算 ,变量名需匹配 Linker 脚本 Scatter 文件中定义的段名。 3. 实操示例
c 运行
四、工具与参考资料
五、核心小结本文阐述了 STM32 功能安全应用中 Flash CRC 自检的完整原理,同时解决了 Flash 全片自检中 ROM 大小精准配置的问题 —— 通过复用 KEIL Linker 的自定义符号变量 ,自动计算编译后实际的 ROM 占用大小,替代手动配置,避免了代码修改后参数反复调整的问题,保证了 Flash 自检参数的精准性和开发效率。 |
STM32 LSE 不起振排查指南:五大核心原因与快速解决方案
OpenBLT移植到STM32F103战舰开发板上适用于所有STM32F103系列的Bootloader
学习STM32单片机,绕不开的串口
STM32串口通信基本原理
【STM32U3评测】实现双通道串口通信系统
OpenBLT移植到STM32F405开发板
【NUCLEO-WB09KE评测】STM32WB09KE的内部BootLoader使用
11111111111111111111111111111111111
STM32芯片ISP串口程序一键下载—FlyMcu
如何使用CubeMX实现STM32的串口通信以及对printf等函数的重定向
微信公众号
手机版