单片机固件中加入版本信息的方法

发布时间:2023-03-27  

前言

开发完MCU软件后,通常都会生成hex文件或者bin文件,用来做固件烧录或者升级,如果用来做产品开发,就涉及到固件版本的问题,初学者通常采用固件文件重命名来区分版本。


如果需要每次上电开机通过串口或者OLED等显示版本信息,那么这种方式就无法实现

下面介绍如何在程序中加入版本信息,以MDK为例介绍。


实现方式

1.定义一个结构体,里面定义一些软件版本相关的信息


typedef struct

{

    char szVersion[32];    // 软件版本

    char szBuildDate[32];  // 程序编译日期

    char szBuildTime[32];  // 程序编译时间

}AppInfo_t;

2.定义一个只读结构体变量(只读的目的:防止程序改变、节约RAM),赋初值(其中__DATE_ 和__TIME__是C语言中的内置宏,分别是当前的编译日期和编译时间)。


const AppInfo_t sg_tAppInfo =

{

    "STM32_V0.1.5",

    __DATE__,

    __TIME__,

};

3.在主函数添加打印,将版本信息输出到终端上。


int main(void)

{

    SystemInit();


    printf("Version  : %srn", sg_tAppInfo.szVersion);

    printf("buildTime: %srn", sg_tAppInfo.szBuildDate);

    printf("buildTime: %srn", sg_tAppInfo.szBuildTime);


    while (1)

    {


    }

}

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

如果定于sg_tAppInfo变量的源文件没有修改而其它文件修改时,编译日期和编译时间还是之前的

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


动图封面


5.下载程序后,通过串口工具在MCU上电就能收到版本信息的打印。



扩展

从上述的实现方式可知,sg_tAppInfo只读变量在程序中的位置不固定,有一定的局限性。

如果结构体有其他的信息,无法在编译时初始化,而是需要在程序编译后的hex文件中添加或者修改信息,但由于只读变量在程序中的位置不固定,不能保证每次编译后在固定的位置添加或者修改信息。

下一篇介绍通过__attribute__机制固定sg_tAppInfo只读变量在程序中的地址,同时采用映像文件工具对hex固件文件进行操作,自动将固件中的版本信息和固件文件名称关联起来。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    制作一个STM32下载器的过程;本文介绍制作一个STM32下载器的过程。 原理图 STLINK-V2下载器电路原理图如下。 上图中,H5接口是固件下载口。H4接口是STLINK-V2下载口(实现下载......
    ,需先将下方固件下载到本地电脑端,若使用在线工具Web BDT(https://debug.telink-semi.cn/web_bdt/index.html),则可在线下载固件。(两个bin......
    部分是需要进行替换的。默认的SBSFU 用户固件只是一个示例,不符合用户的场景。同时例子固件仅支持从UART 传输固件。实际中的固件则是需要支持从网络接受固件。这一点在改动时,可以修改固件下载部分。STM32......
    合用户的场景。同时例子固件仅支持从UART传输固件。实际中的固件则是需要支持从网络接受固件。这一点在改动时,可以修改固件下载部分。STM32 SBSFU的固件下载部分和固件解密部分是分开的。固件下载可以在用户固件......
    数单片机都支持两种升级模式:ISP模式和IAP模式。ISP模式是通过串口将固件下载到芯片内部进行升级,而IAP模式则是将固件下载到芯片外部的存储器中,然后通过程序控制将固件写入到芯片内部进行升级。 4. 连接......
    格式的原始数据文件,下载到开发板中,进行验证, 从而判断固件部分 功能是否正常,如果固件和模型正确,输出结果应当和标记的内容一样。 图8. 文件验证 图9. Log 信息 图 8:在......
    更新的自身的功能设计也可能带来新的安全弱点。黑客可以有多中手段对固件更新进行攻击 。 ① 攻击固件本身 黑客可以在更新的起点替换固件。如果固件来源不可靠,则固件轻则不能运行,重则运行起来破坏这个设备。同样如果这个固件是不完整的 ,被破......
    低功耗、手机应用软件“ST BLE Sensor” 实验1:STM32固件下载和演示测试 连接B-L475-IOT01A 用Micro USB线连接到B-L475-IOT01A 连接之后,驱动......
    X12 芯片速度可达每秒 600mb,英特尔的 XMM 3360 芯片却只有每秒 450mb。苹果固然希望有第二供应商,不过倘若得让半数机种降速才能办到,这种做法不会持续太久。要是......
    NBRSD设置为1时,SRAM2b是非安全的。 FUS固件下载Firmware Update Service(FUS)是一种用于在STM32WB微控制器上更新固件的功能。FUS下载是指通过FUS服务进行固件......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>