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

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

3天内不再提示

如何在单片机中保存版本信息?

strongerHuang 来源:strongerHuang 作者:strongerHuang 2021-04-15 11:48 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

平时我们写程序,通常都会备注软件版本,那么,怎么在单片机中保存版本信息呢?

方法其实有很多,但基本原理都是在指定存储区域(Flash)中写入软件版本信息。

1

实现方法

下面就分享一个最常用,也是最基础的小技巧:在Keil MDK环境下,通过软件代码,直接映射到并存储到Flash指定地址。

包含:软件版本、编译日期、编译时间,代码如下:

#define VERINFO_ADDR_BASE (0x0800FF00) //存放FLASH的地址

const char Software_Ver[] __attribute__((at(VERINFO_ADDR_BASE + 0x00))) = “Software: 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__;

这个代码大家能看懂么? 原理很简单,也有类似其他写入Flash地址的方法(这里暂不讲述)。

这里面包含几个重要知识点,下面给大家描述一下。

2

__attribute__ 语法

attribute,翻译为“属性”,在C语言中,是一个关键字,语法格式为:

__attribute__ ((attribute-list))

__attribute__ 可以设置函数属性(Function Attribute )、变量属性(Variable Attribute )和类型属性(Type Attribute )。

这部分内容,大家可以不用深入理解,知道这么用即可。要深入理解,网上也有很多学习资源。

3

C语言标准定义

在代码中:

const char Compiler_Date[] __attribute__((at(VERINFO_ADDR_BASE + 0x40))) = “Date: ”__DATE__;const char Compiler_Time[] __attribute__((at(VERINFO_ADDR_BASE + 0x60))) = “Time: ”__TIME__;

你会看到__DATE__ 和 __TIME__表示的日期和时间。

其实,这两个是C语言特殊的标准定义。

__DATE__:编译时刻的日期字符串 如“Apr 13 2021”__TIME__:编译时刻的时间字符串 如”2000“

除了这两个,其实还有很多类似的标准定义,比如:

__FILE__ :正在编译文件的文件名__LINE__ :正在编译文件的行号

__STDC__:判断该文件是不是标准C程序

这部分内容,可以参看我的文章:C语言几种特殊标准定义和用法

4

总是编译版本文件

在Keil MDK中,默认情况下,源文件不修改,只编译一次。

因此,为了编译版本、日期和时间正确,需要进行设置:总是编译。

如下设置:

ef8c72e0-9d14-11eb-8b86-12bb97331649.png

5

固件大小

生成的Hex文件会对没有使用的Falsh用0x00进行填充,比如:

ef9854c0-9d14-11eb-8b86-12bb97331649.png

填充0x00之后,这个hex就相对很大,因此,有两种方法减少hex固件大小。

1.存放FLASH的地址,要设置在合适的位置,如果代码量只有1K,你这只在偏移50K地址,这样偏移太多。

#define VERINFO_ADDR_BASE (0x0800FF00) //存放FLASH的地址

2.网上还有一个方法,修改“ROM大小”:

efa77e78-9d14-11eb-8b86-12bb97331649.png

该小之后,发现真的把0x00去掉了:

efeb8474-9d14-11eb-8b86-12bb97331649.png

这两种方法,其实有一定风险的,如果代码量不断增加,可能会出现问题。所以,大家要主要设置Flash地址。

这里其实也有一个关于Hex文件格式的内容,推荐阅读文章:轻松理解bin、hex、axf和elf文件格式

原文标题:SMT32固件中引入版本信息的方法

文章出处:【微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

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

    关注

    6074

    文章

    45340

    浏览量

    663473
  • STM32
    +关注

    关注

    2305

    文章

    11120

    浏览量

    371134

原文标题:SMT32固件中引入版本信息的方法

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    第1章 如何学习单片机

      在错误的道路上日夜兼程,最终也无法成功,方法和思路绝对是最重要的。本章节讲到的学习单片机的方法,都是作者学习单片机的无数经验和教训总结出来的瑰宝。通过作者前面的披荆斩棘,开辟了道路,可以告诉读者
    的头像 发表于 10-10 10:32 233次阅读

    单片机用什么封装

    单片机封装是将芯片内部电路与外部引脚连接并包裹保护的结构,不仅影响单片机的安装方式、适用场景,还与电路设计的紧凑性、散热性能密切相关。不同封装类型各有特点,适配从简单电路到复杂系统的多样化需求
    的头像 发表于 08-01 13:47 894次阅读

    什么单片机比较耐用

            在工业控制、户外设备、医疗仪器等场景中,单片机的耐用性直接决定了设备的稳定运行与维护成本。耐用的单片机通常具备宽温工作范围、强抗干扰能力、稳定的电源适应性和长寿命的硬件设计。深圳市安
    的头像 发表于 07-31 13:48 548次阅读

    怎么测单片机系统频率

    单片机系统频率是指单片机工作时的时钟频率,它直接影响单片机的运行速度和处理能力,准确测量系统频率对单片机应用开发、程序调试和性能优化具有重要意义。测量
    的头像 发表于 07-25 11:39 474次阅读

    单片机怎么驱动电机?

    在各类自动化设备和智能装置中,电机是重要的执行部件,而单片机作为控制核心,需要通过特定的方式驱动电机运转。单片机驱动电机并非直接连接即可,而是要根据电机类型和功率,搭配合适的驱动电路,才能实现稳定
    的头像 发表于 07-25 09:31 438次阅读

    单片机是怎么控制的

    单片机作为电子系统的控制核心,通过接收外部信号、执行预设程序、驱动外部设备的方式实现控制功能,其控制过程涉及信号输入、数据处理和指令输出三个关键环节,每个环节的协同配合决定了整体控制效果。 信号输入
    的头像 发表于 07-23 13:59 478次阅读

    单片机怎么烧程序

    单片机烧程序是将编写好的程序代码写入单片机内部存储单元,让单片机按照预设逻辑工作的过程,是单片机应用开发中不可或缺的环节。无论是简单的灯光控制程序,还是复杂的工业控制算法,都需要通过烧
    的头像 发表于 07-23 11:47 650次阅读

    低功耗单片机各型号的对比及选型参考

    不同品牌、不同系列的低功耗单片机在功耗控制、性能表现、外设配置等方面各有特点,通过低功耗单片机各型号的对比,能帮助开发者更精准地匹配应用需求。本文将围绕主流低功耗单片机型号展开对比,并介绍在
    的头像 发表于 07-22 18:25 918次阅读

    给予单片机的温度控制系统设计

    、执行机构、显示模块和电源模块组成。单片机是系统的核心,负责处理温度信息并发出控制指令;温度传感器用于实时采集环境或物体的温度数据,将物理量转化为电信号传输给单片机;执行机构如加热片、制冷器等,根据
    的头像 发表于 07-16 10:57 452次阅读

    KF32A136系列单片机产品介绍

    F32A136 系列单片机是基于 KF32 内核架构开发的单片机
    的头像 发表于 06-27 11:42 1664次阅读
    KF32A136系列<b class='flag-5'>单片机</b>产品介绍

    KF32A156系列单片机产品介绍

    KF32A156 系列单片机是基于 KF32 内核架构开发的单片机。KF
    的头像 发表于 06-26 14:43 1365次阅读
    KF32A156系列<b class='flag-5'>单片机</b>产品介绍

    单片机科普总结,建议收藏!

    单片机(MicrocontrollerUnit,MCU)作为嵌入式系统的核心之一,在现代电子产品中无处不在。从智能家居、汽车电子,到工业控制、医疗设备,单片机支撑着无数智能化应用的发展。对于初学者
    的头像 发表于 04-07 11:58 4463次阅读
    <b class='flag-5'>单片机</b>科普总结,建议收藏!

    什么是单片机的ADC接口

    在嵌入式系统和工业自动化领域,单片机(Microcontroller)作为核心控制单元,承担着数据采集、处理和控制的重要任务。其中,模数转换器(Analog-to-Digital Converter
    的头像 发表于 02-03 11:27 3724次阅读

    51单片机pwm和spwm

    51单片机pwm
    发表于 01-08 15:54 3次下载

    单片机Debug工具性能对比 单片机调试常用命令

    单片机(Microcontroller Unit, MCU)调试是嵌入式开发中的一个重要环节,它帮助开发者发现和修复代码中的错误,优化程序性能。不同的单片机和开发环境可能使用不同的调试工具和命令
    的头像 发表于 12-19 09:56 2162次阅读