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

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

    关注

    6030

    文章

    44505

    浏览量

    632358
  • STM32
    +关注

    关注

    2265

    文章

    10859

    浏览量

    354532

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

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

收藏 人收藏

    评论

    相关推荐

    单片机怎么写入程序

    单片机(Microcontroller Unit,MCU)是一种集成电路芯片,它将计算机的CPU、存储器、输入/输出接口等功能集成在一个芯片上。单片机广泛应用于嵌入式系统和物联网设备中。编写单片机
    的头像 发表于 10-21 11:21 235次阅读

    采集电源信息单片机还是dsp

    在现代电子系统中,电源管理是一个至关重要的环节。随着技术的发展,对电源信息的采集和处理需求也在不断提高。在设计电源信息采集系统时,工程师们常常面临一个选择:是使用单片机(MCU)还是数字信号处理器
    的头像 发表于 10-18 09:33 197次阅读

    单片机的中断机制

    单片机的中断机制是一种重要的处理方式,它允许单片机在执行主程序的过程中,能够暂停当前任务,转而处理外部或内部紧急事件。这种机制极大地提高了系统的响应速度和处理能力,使得单片机在各种应用领域中得到广泛应用。以下是对
    的头像 发表于 10-17 18:03 305次阅读

    单片机烧录程序的基本步骤是什么

    单片机烧录程序是单片机开发过程中非常重要的一步,它涉及到将编写好的程序代码通过一定的方式传输到单片机内部的存储器中,使单片机能够按照预定的逻辑执行任务。 一、硬件准备
    的头像 发表于 09-02 09:47 719次阅读

    UCGUI单片机源码

    UCGUI单片机源码
    发表于 07-04 17:11 0次下载

    一个暑假如何学习单片机

    一个暑假是学习和掌握单片机基础知识的良好时机。以下是一个关于如何在暑假期间学习单片机的建议计划
    的头像 发表于 07-03 09:19 471次阅读
    一个暑假如何学习<b class='flag-5'>单片机</b>

    如何系统、科学地自学单片机

    很多初学者都会面临这个问题,我想学习单片机、我也想学好单片机、我也想系统地学习单片机,但是单片机涉及到的学科多且杂根本不是三天两天就能学完的,很多人都逃脱不了从入门到放弃的怪圈?那么我
    的头像 发表于 03-28 08:03 980次阅读
    如何系统、科学地自学<b class='flag-5'>单片机</b>?

    单片机的最小系统由什么组成 单片机的最小系统包括哪些

    单片机(Microcontroller Unit,MCU)的最小系统包括以下几个主要组成部分: 单片机芯片:单片机是整个最小系统的核心部分,它集成了中央处理器(Central Processing
    的头像 发表于 02-02 11:27 9749次阅读

    基于单片机控制的交通灯设计

    本课程设计是在学完单片机原理及课程之后综合利用所学单片机知识完成一个单片机应用系统设计并在实验室实现。
    的头像 发表于 01-22 15:31 1829次阅读
    基于<b class='flag-5'>单片机</b>控制的交通灯设计

    8051单片机和STM32单片机的编程环境对比

    比较流行的单片机环境有keil和IAR,这两种环境可以覆盖市面上90%的单片机型号,而且都提供了函数库。根据单片机位数不同,这两个编程环境也有不同的版本
    发表于 12-25 10:01 1319次阅读
    8051<b class='flag-5'>单片机</b>和STM32<b class='flag-5'>单片机</b>的编程环境对比

    单片机boot脚干嘛的

    单片机boot脚是单片机的引导脚,用于控制单片机的启动和引导过程。在单片机系统中,boot脚的作用十分重要,它影响着整个单片机的工作状态和功
    的头像 发表于 12-19 09:47 9326次阅读

    单片机按键切换模式怎么设置

    单片机作为一种微处理器,在各种嵌入式系统中扮演着核心控制器的角色。其中,按键输入作为单片机控制中常见的交互方式,实现模式切换是常见的需求。本文将详细介绍如何在单片机中实现按键切换模式。
    的头像 发表于 12-13 11:07 3709次阅读

    单片机如何检测电流?

    单片机如何检测电流? 随着科技的发展,单片机技术在电子设备中得到了广泛应用。其中,电流检测是单片机的一个重要功能之一。本文将详细介绍单片机电流检测技术的原理与应用,并着重探讨了A/D转
    的头像 发表于 12-07 15:37 3614次阅读

    单片机复位电路工作原理

    单片机复位电路工作原理  单片机是一种集成电路,通常用于嵌入式系统中。单片机复位电路是单片机可靠工作的保证,它负责在出现故障或者异常情况时将单片机
    的头像 发表于 12-07 15:17 4052次阅读

    单片机的烧写次数是不是无限的呢?单片机能烧录多少次?

    单片机的烧写次数是不是无限的呢?单片机能烧录多少次? 单片机的烧写次数是有限的,每款单片机都有一个特定的擦写次数限制。当烧写次数达到限制时,单片机
    的头像 发表于 12-07 13:46 3822次阅读