企业级操作之STM32项目版本管理方法

4d5d5fab3d05b8f43d8678143371d213.png

在MCU开发过程中,有时候需要软件的迭代,比如从V1.9升级到V1.10,或者从V23.09.23升级到V23.09.24,我们常常通过手动改动字符串或者数组来实现这个功能,从现在开始,我们会使用Keil的内置宏__DATE__和__TIME__,通过这2个宏,每次程序编译完成,烧录到MCU之后,MCU都能够准确打印出该固件的编译时间。

printf("(版本/编译时间: %s,%s)\r\n", __DATE__,__TIME__);

1b4b830426ef39c711378c8e6434f629.png

上图中编译时间是18:21:14,但是串口打印的时间却是18:21:23。但是我们发现电脑的时间何编译的时间还是有一点点区别的,原因是,编译之后,代码还要下载,还要运行,这个也是需要时间的,所以产生了误差。

但如果你发现打印的时间不准确,是较早前的时间,比如很明显相差1分钟以上,或者你认为这个时间不是真正编译的时间,那么需要注意:

按照Keil的编译逻辑,默认是不编译未修改过的源文件,只链接。说详细一点点就是:例如这两条打印语句的位置,是在int main(void)函数中,且main函数在main.c文件中,假如本次修改代码,未修改main.c文件,那么Keil是不会重新编译main.c文件的,也就不会将编译时的__DATE__和__TIME__编译进去。

也可以通过以下设置,使得main.c文件,无论是否修改,每次编译时都会重新编译它:

8ca0e6f97605baffc7c957a3e6140b6d.png

ac9e78d1bf1fe84a0579d8606f2806d9.png

当然每次都编译main.c,并非是最好的代码风格,可以把版本号打印提炼成一个函数,并单独使用一个.c文件进行实现,并将这个.c文件按照以上方法设置。

==========

往期回顾:

单片机程序无法下载?

STM32外部中断大问题

单片机卡死的八大原因和解决方法

MATLAB如何实现PID?

==========

95bed81fb96968200183888ba85a0405.png

188bec9e3c1824fd9f0af134d18189b0.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/130980.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

wav格式如何转mp3?

wav格式如何转mp3?WAV格式是一种高品质的音频文件格式,其采用无损压缩技术存储音频数据。通常,WAV文件使用PCM编码方式将声音信号转换为数字信号,并按照一定规则存储到文件中。这种编码方式可以确保音频数据的完整性和准确性&…

python注释(快捷键)

首先介绍以下三种注释方式: # 123(单行注释) """123"""(多行注释) 123(多行注释) 下面介绍一下快捷键: Ctrl/ 注释单行:指针只要在这行代…

关于近期360自动屏保导致的问题

本身是一个好产品 但是对于某些应用就有点画蛇添足了 1、导致K3无法使用 K3中间层需要用户持续登入系统 2、导致系统停止工作 3、停止网络 4、占用系统资源 5、占用网络资源 6、占用硬件资源 。。。。。。 对于24小时开机的用户影响巨大 对于局域网信息点多的网络影响巨…

c语言:用指针解决有关字符串等问题

题目1&#xff1a;将一个字符串str的内容颠倒过来&#xff0c;并输出。 数据范围&#xff1a;1≤len(str)≤10000 代码和思路&#xff1a; #include <stdio.h> #include<string.h> int main() {char str1[10000];gets(str1);//读取字符串内容char* p&str1[…

无需标注海量数据,目标检测新范式OVD

当前大火的多模态GPT-4在视觉能力上只具备目标识别的能力&#xff0c;还无法完成更高难度的目标检测任务。而识别出图像或视频中物体的类别、位置和大小信息&#xff0c;是现实生产中众多人工智能应用的关键&#xff0c;例如自动驾驶中的行人车辆识别、安防监控应用中的人脸锁定…

Hbase 迁移小结:从实践中总结出的最佳迁移策略

在数据存储和处理领域&#xff0c;HBase作为一种分布式、可扩展的NoSQL数据库&#xff0c;被广泛应用于大规模数据的存储和分析。然而&#xff0c;随着业务需求的变化和技术发展的进步&#xff0c;有时候我们需要将现有的HBase数据迁移到其他环境或存储系统。HBase数据迁移是一…

Im即时通讯软件开发流程

一、需求分析 在进行软件开发之前&#xff0c;首先需要对需求进行分析&#xff0c;明确软件的功能和用户群体。即时通讯软件作为一款通讯工具&#xff0c;需要具备基本的通讯功能&#xff0c;例如聊天、文件传输、群聊等。除此之外&#xff0c;还需具备更多的特色功能以满足不…

​做好研发管理的三个条件​

1.制造鼓励创新的环境 要做好研发管理&#xff0c;首先要制造一个鼓励创新、适合研发的环境&#xff0c;必须采取弹性而目标化的管理&#xff0c;不以死板的制度限制员工的创意&#xff0c;必须要求实质的成果。 2.融入行销观念 将行销的观念融入研发中&#xff1a;为使有限的…

Linux系统编程——文件的光标移动

光标移动(lseek) 主要用于不断对文件写入数据或读取数据的的用法&#xff0c;每次写入数据后光标在数据尾&#xff0c;若要进行读取则只会没法读取到光标前的数据&#xff0c;这个时候就不需要重启文件&#xff0c;只需对光标位置做出调整就可以读取数据 使用lseek函数需要包…

十个使用Spring Cloud和Java创建微服务的实践案例

在使用Java构建微服务时&#xff0c;许多人认为只要学习一些微服务设计模式就足够了&#xff0c;比如CQRS、SAGA或每个微服务一个数据库。虽然这是正确的&#xff0c;但同时学习一些通用的最佳实践也是很有意义的。本文分享一些最佳实践。 1 设计模块化的微服务 微服务应该专…

仙侠类型游戏开发2D3D仙侠古风游戏

仙侠类游戏是一种以仙侠文化为背景的角色扮演游戏&#xff0c;玩家在游戏中扮演修仙者或武侠&#xff0c;通过修炼技能、完成任务和与其他玩家互动&#xff0c;逐步提升角色的实力和境界。这类游戏通常融合了仙侠小说中的幻想元素、武侠的武技和修仙的奇遇&#xff0c;创造了一…

数字化工厂管理系统的三个关键技术是什么

随着科技的飞速发展&#xff0c;数字化工厂管理系统已经成为了现代制造业的重要发展方向。数字化工厂管理系统通过充分运用建模技术、仿真技术和单一数据源技术&#xff0c;实现了产品设计和生产的虚拟化&#xff0c;为制造业带来了前所未有的效率和创新能力。本文将深入探讨这…

Ubuntu 20.04编译Chrome浏览器

本文记录chrome浏览器编译过程&#xff0c;帮助大家避坑qaq 官网文档&#xff1a;https://chromium.googlesource.com/chromium/src//main/docs/linux/build_instructions.md 一.系统要求 一台64位的英特尔机器&#xff0c;至少需要8GB的RAM。强烈推荐超过16GB。至少需要100…

嵌入式系统中,输入网址之后,发生了什么?

让我们一步一步地来看这个过程。 步骤1&#xff1a; 用户在浏览器中输入一个URL&#xff08;比如www.bytebytego.com&#xff09;&#xff0c;然后按下回车键。首先&#xff0c;我们需要将这个URL转换成一个IP地址。通常&#xff0c;这个映射关系会被存储在缓存中&#xff0c…

Jmeter —— jmeter参数化实现

jmeter参数化 在实际的测试工作中&#xff0c;我们经常需要对多组不同的输入数据&#xff0c;进行同样的测试操作步骤&#xff0c;以验证我们的软件的功能。这种测试方式在业界称为数据驱动测试&#xff0c; 而在实际测试工作中&#xff0c;测试工具中实现不同数据输入的过程称…

Leetcode刷题详解——全排列 II

1. 题目链接&#xff1a;47. 全排列 II 2. 题目描述&#xff1a; 给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,2] 输出&#xff1a; [[1,1,2],[1,2,1],[2,1,1]]示例 2&#xff1a; 输…

ros1 基础学习04- 自定义Publisher消息编程实现示例

整理步骤 cd进入工作空间下的代码空间, 创建功能包&#xff0c;并配置依赖 在功能包里面的代码空间里编写C代码文件 在cmakelist文件里面配置编译规则 cd到工作空间&#xff0c;编译工作空间&#xff0c;source设置环境变量 打开roscore, 运行海龟仿真节点&#xff0c;运行功能…

Django——orm模块创建表关系

django orm中如何创建表关系 1. 表关系分析 表与表之间的关系: 一对多 多对多 一对一 没有关系 判断表关系的方法: 换位思考用4张表举例: 图书表 出版社表 作者表 作者详情表图书和出版社是一对多的关系 外键字段建在多的那一方图书和作者是多对多的关系 需要创建第三张表来…

一致性算法介绍(二)

1.4. NWR N &#xff1a;在分布式存储系统中&#xff0c;有 多少份备份数据 W &#xff1a;代表一次成功的更新操作要求至少有 w 份数据写入成功 R &#xff1a; 代表一次成功的读数据操作要求至少有 R 份数据成功读取 NWR值的不同组合会产生不同的一致性效果&#xff0c;当WR…

leetcode:141. 环形链表

一、题目 函数原型&#xff1a; bool hasCycle(struct ListNode *head) 二、算法 判断不是环形链表&#xff0c;只需遍历链表找到空结点即可。 判断是环形链表&#xff0c;由于链表是环形的&#xff0c;遍历不会永远不会结束。所以要设置快慢指针&#xff0c;慢指针一次走一步&…