0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用MDK编译器让STM32程序HEX文件中加入固件版本信息

STM32嵌入式开发 来源:阿莫论坛 作者:阿莫icode 2021-06-23 15:14 次阅读

本文介绍一个小技巧:

使用MDK编译器,让STM32程序HEX文件中加入固件版本信息

代码

代码如下:

//------------------------------------------------------------------------------#include 《absacc.h》

//------------------------------------------------------------------------------#define VERINFO_ADDR_BASE (0x8009F00) // 版本信息在FLASH中的存放地址const char Hardware_Ver[] __attribute__((at(VERINFO_ADDR_BASE + 0x00))) = “Hardware: 1.0.0”;const char Firmware_Ver[] __attribute__((at(VERINFO_ADDR_BASE + 0x20))) = “Firmware: 1.0.0”;const char Compiler_Date[] __attribute__((at(VERINFO_ADDR_BASE + 0x40))) = “Date: ”__DATE__;const char Compiler_Time[] __attribute__((at(VERINFO_ADDR_BASE + 0x60))) = “Time: ”__TIME__;

//------------------------------------------------------------------------------

写入到程序中:

3e69fdb6-d3dd-11eb-9e57-12bb97331649.png

选项配置中:Flash地址与大小不用做任何修改!

HEX文件:

3e83c7d2-d3dd-11eb-9e57-12bb97331649.png

串口打印输出:

3e993680-d3dd-11eb-9e57-12bb97331649.png

上述方法的缺点

上述操作可行, 但是有一个缺点:就是生成的bin文件都是满flash大小的, 造成每次烧录都是整个flash读写。

其实这个可以把存放地址放到前面,比如偏移1K的地方,都不用改指定地址。

按照上述操作,程序末尾到VERINFO_ADDR_BASE地址这一段会被填充成0x00。根据需要可以修改VERINFO_ADDR_BASE减小地址,或者说不强制指定地址,由编译器自动分配,但这样就要去找相应的版本标识字符串了。

优化方法

不想前面这一段被大量填充0x00,让HEX文件体积小一点的话, 可以把选项配置中Flash的Size改小一点,把VERINFO_ADDR_BASE设置成从FlashSize后面的空间开始,这样生成的HEX文件就小了,且未用空间就不会被大量填充0x00了。

编辑:JQ

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FlaSh
    +关注

    关注

    10

    文章

    1647

    浏览量

    149162
  • STM32
    +关注

    关注

    2275

    文章

    10934

    浏览量

    358643
  • 编译器
    +关注

    关注

    1

    文章

    1645

    浏览量

    49403
  • MDK
    MDK
    +关注

    关注

    4

    文章

    209

    浏览量

    32229

原文标题:在SMT32的HEX文件里加入固件版本信息

文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    相关推荐

    Triton编译器与GPU编程的结合应用

    Triton编译器简介 Triton编译器是一种针对并行计算优化的编译器,它能够自动将高级语言代码转换为针对特定硬件优化的低级代码。Triton编译器的核心优势在于其能够识别并行模式,
    的头像 发表于 12-25 09:13 421次阅读

    Triton编译器如何提升编程效率

    在现代软件开发中,编译器扮演着至关重要的角色。它们不仅将高级语言代码转换为机器可执行的代码,还通过各种优化技术提升程序的性能。Triton 编译器作为一种先进的编译器,通过多种方式提升
    的头像 发表于 12-25 09:12 408次阅读

    Triton编译器的优化技巧

    在现代计算环境中,编译器的性能对于软件的运行效率至关重要。Triton 编译器作为一个先进的编译器框架,提供了一系列的优化技术,以确保生成的代码既高效又适应不同的硬件架构。 1. 指令选择
    的头像 发表于 12-25 09:09 406次阅读

    Triton编译器在机器学习中的应用

    实现模型的优化和加速: 模型解析 :Triton编译器首先解析输入的模型文件,理解模型的结构和操作。 图优化 :对模型图进行优化,包括
    的头像 发表于 12-24 18:13 589次阅读

    Triton编译器的常见问题解决方案

    Triton编译器作为一款专注于深度学习的高性能GPU编程工具,在使用过程中可能会遇到一些常见问题。以下是一些常见问题的解决方案: 一、安装与依赖问题 检查Python版本 Triton编译器通常
    的头像 发表于 12-24 18:04 1222次阅读

    Triton编译器与其他编译器的比较

    Triton编译器与其他编译器的比较主要体现在以下几个方面: 一、定位与目标 Triton编译器 : 定位:专注于深度学习中最核心、最耗时的张量运算的优化。 目标:提供一个高度抽象、灵活、高效
    的头像 发表于 12-24 17:25 581次阅读

    Triton编译器功能介绍 Triton编译器使用教程

    Triton 是一个开源的编译器前端,它支持多种编程语言,包括 C、C++、Fortran 和 Ada。Triton 旨在提供一个可扩展和可定制的编译器框架,允许开发者添加新的编程语言特性和优化技术
    的头像 发表于 12-24 17:23 903次阅读

    分享一个keil MDK编译信息增强工具

    今天给大家分享一个 keil MDK 编译信息增强工具:keil-build-viewer. 1 keil-build-viewer介绍 这是一个 keil 的编译
    的头像 发表于 11-14 11:01 857次阅读

    单片机hex文件编译成C语言的过程

    使用C语言编写,然后编译成机器码并烧录到单片机的存储中。 Hex文件是一种用于存储单片机程序文件
    的头像 发表于 09-02 10:49 4238次阅读

    hex文件如何查看原c语言代码

    是处理可以直接执行的指令,而 C 语言代码则是人类可读的高级编程语言代码。 然而,如果你想要从 .hex 文件中获取一些有用的信息或者对程序
    的头像 发表于 09-02 10:37 3112次阅读

    AI编译器技术剖析

    随着人工智能技术的飞速发展,AI编译器作为一种新兴的编译技术逐渐进入人们的视野。AI编译器不仅具备传统编译器的功能,如将高级语言编写的源代码转换为机器可执行的代码,还融入了人工智能技术
    的头像 发表于 07-17 18:28 1913次阅读

    人工智能编译器与传统编译器的区别

    人工智能编译器(AI编译器)与传统编译器在多个方面存在显著的差异。这些差异主要体现在设计目标、功能特性、优化策略、适用范围以及技术复杂性等方面。以下是对两者区别的详细探讨,旨在全面解析其内在差异。
    的头像 发表于 07-17 18:19 2265次阅读

    TSMaster 中 Hex 文件编辑器使用详细教程

    TSMaster软件的Hex文件编辑提供了文件处理的功能,这一特性使用TSMaster软件的用户可以更便捷地对
    的头像 发表于 06-01 08:21 1007次阅读
    TSMaster 中 <b class='flag-5'>Hex</b> <b class='flag-5'>文件</b>编辑器使用详细教程

    Eclipse和MDK编译代码后Eclipse生成的HEX文件太大了怎么办?

    Eclipse 和 MDK 编译代码后 Eclipse生成的HEX文件太大 ,怎么破?
    发表于 04-29 08:09

    STM32CubeMX生成FreeRTOS的MDK工程不支持AC6编译器吗?

    使用STM32CubeMX生成FreeRTOS的MDK工程,选择AC5编译器可以编译成功,选择AC6编译器有很多错误,是
    发表于 03-06 08:24