MDK自动生成带校验带SVN版本号的升级文件

MDK自动生成带校验带SVN版本号的升级文件

获取SVN版本信息

  • 确保SVN安装了命令行工具,默认安装时不会安装命令行工具
    在这里插入图片描述
  • 编写一个模板头文件 svn_version.temp.h, 版本号格式为 1_0_0_SVN版本号
#ifndef __SVN_VERSION_H
#define __SVN_VERSION_H#define SVN_REVISION_NUM  100$WCREV$    
#define SVN_REVISION_STR  "$WCREV$" 
#define SVN_COMMIT_TIME   "$WCDATE$"
#define SVN_NOW_TIME      "$WCNOW$"#endif

在这里插入图片描述

  • 编写get_svn_version.bat 脚本,利用模板头文件生成带版本号的头文件
::获取本地版本
::for /f "tokens=5" %%i in ('SubWCRev  ../^|find "Last committed at revision"') do set version=%%i
::set SVN_CUR_VER=%version%::获取服务器版本
::set svnURL="SVN服务器URL"
::for /f "delims=" %%i in ('svn info %svnURL% ^| findstr "Rev:"') do set rev=%%i
::set SVN_MAX_VER=%rev:~18%::echo version:%SVN_CUR_VER%    version:%SVN_MAX_VER%  subwcrev.exe ../ "svn_version.temp.h" "svn_version.h"
  • MDK 编译器执行该脚本
    在这里插入图片描述
  • 将版本号添加到app的中断向量表中(或者自己添加到固定位置),方便boot查找版本号
#include "svn_version.h"
/* SVN版本号 */
const uint32_t g_ulSVNVersion = SVN_REVISION_NUM;extern int Image$$ER_IROM1$$Base;
#define SVN_VERSION_ADDR     (&Image$$ER_IROM1$$Base + 7)
uint32_t GetVersion(void)
{return *((uint32_t*)*((uint32_t*)SVN_VERSION_ADDR));
}

在这里插入图片描述
注意填入中断向量表的是存放版本号的地址,需要用指针来转化成版本号。

在bin文件末尾添加CRC校验

  • 编写脚本文件,生成带版本号名字的app。
@rem 显示RAM FLASH使用情况
Keil5_disp_size_bar_v0.4.exe  @rem 将hex从obj文件夹复制到当前文件夹
copy Objects\projectName.hex .\projectName.hex@rem 转换为bin文件
hex2bin projectName.hex       @rem 获取bin文件大小
for /f %%i in ('dir /b projectName.bin') do (   
set indexdx=%%~zi
goto :Version
)
:Version
ECHO %indexdx%@rem 获取版本号 
set "file=svn_version.h"    for /f "tokens=2,3 delims= " %%a in ('type "%file%"') do (    if /i "%%a"=="SVN_REVISION_NUM" (    set "revision=%%b"    )
)    if defined revision (    echo SVN_REVISION_NUM:%revision%    
) else (    echo SVN_REVISION_NUM not found in file.    
)    @rem 将版本号拆分成 V1_0_0_xx 的形式
set "result=%revision:~0,1%_%revision:~1,1%_%revision:~2,1%_%revision:~3%" 
echo Result: %result% 
set "revision=%result%"    @rem 生成带版本号带校验信息的升级文件 校验使用STM32硬件校验格式
srec_cat.exe projectName.bin -Binary -crop 0 %indexdx% -STM32_Little_Endian %indexdx% -o app_v%revision%.bin -Binary@rem 获取hex 起始地址 
for  /f  "delims="  %%a  in  (projectName.hex)  do  (
set  txt=%%~a
goto :StartAddr
)
:StartAddr
echo  %txt%set  addr=%txt:~-6,4%
echo  %addr%@rem 生成带CRC校验的hex文件 替换在MDK中下载的hex
srec_cat.exe app_v%revision%.bin -Binary -offset 0x%addr%0000 -o projectName1.hex -Intel -Output_Block_Size=16
copy .\projectName1.hex  Objects\projectName_V%revision%.hex 
del Objects\projectName.hex
copy .\projectName1.hex  Objects\projectName.hex
del projectName.hex 
del projectName.bin
del projectName1.hex 

在这里插入图片描述

在boot中获取版本信息和校验升级文件

uint32_t CheckApp(void)
{uint32_t* addr = (uint32_t *)APP_END_ADDR;/* 从flash尾部向前扫描,找到CRC位置 */while(*addr == 0xffffffff){addr--;if((uint32_t)addr <= APP_START_ADDR){return 0;}}/* 校验固件 */MX_CRC_Init();uint32_t crc = HAL_CRC_Calculate(&hcrc, (uint32_t*)APP_START_ADDR, ((uint32_t)addr - APP_START_ADDR)/4);if(*addr == crc){return 1;}return 0;
}

用到的小软件 https://download.csdn.net/download/weixin_42378319/88414367

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序服务通知(订阅消息)定时推送消息功能

首先先说项目需求&#xff1a;向预约参观的用户提前一天晚上8点推送消息。小程序端主要用到的API是我是小程序用到的API。以及服务端用到的API&#xff1a;我是服务端用到的API。 1. 开通订阅消息功能 (1)、 首先需要在小程序管理后台开通订阅消息功能。没开通前如下图所示: …

《机器学习》第5章 神经网络

文章目录 5.1 神经元模型5.2 感知机与多层网络5.3 误差逆传播算法5.4 全局最小与局部最小5.5 其他常见神经网络RBF网络ART网络SOM网络级联相关网络Elman网络Boltzmann机 5.6 深度学习 5.1 神经元模型 神经网络是由具有适应性的简单单元组成的广泛并行互连的网络&#xff0c;它…

网络安全概述——常见网络攻击与网络病毒、密码体制、安全协议等

目录 1、信息安全五大要素 2、常见的网络攻击类型 2-1&#xff09;网络攻击的分类&#xff1a; 2-2&#xff09;常见网络攻击&#xff1a; DOS 攻击的分类&#xff1a; 2-3&#xff09;常见网络攻击的防范措施 3、计算机病毒 3-1&#xff09;常见病毒的前缀及其简要描述…

13.2 外部DirectX绘制实现

在前一节中我们简单介绍了D3D绘制窗体所具备的基本要素&#xff0c;本节将继续探索外部绘制技术的实现细节&#xff0c;并以此实现一些简单的图形绘制功能&#xff0c;首先外部绘制的核心原理是通过动态创建一个新的窗口并设置该窗口属性为透明无边框状态&#xff0c;通过消息循…

MySQL案例详解 三:MMM高可用架构及其故障切换

1. MMM高可用概述 1.1 简介 MMM&#xff08;Master-Master replication manager for MvSQL&#xff0c;MySQL主主复制管理器&#xff09;是一套支持双主故障切换和双主日常管理的脚本程序。 MMM提供了自动和手动两种方式移除一组服务器中复制延迟较高的服务器的虚拟ip&#xf…

Node.js 正在逐渐被淘汰!Bun 1.0 正在改变 JavaScript 的游戏规则

在深入讨论之前&#xff0c;我们需要解释什么是 JavaScript 运行时以及为什么我们应该关心其速度。 想象一下&#xff0c;你用 JavaScript 写了一个故事&#xff0c;需要有人大声读出来。JavaScript 运行时就像是那个友好的叙述者&#xff0c;为你的故事赋予生命&#xff01;它…

nSoftware IPWorks IoT 2022 Java 22.0.8 Crack

物联网库&#xff0c;使用这个轻量级组件库&#xff0c;可以在任何平台上的应用程序中轻松实现物联网 (IoT) 通信协议。 nSoftware IPWorks IoT 最新的 IPWorks IoT 现已推出&#xff01;最新版本的 IPWorks IoT 具有现代化和简化的体验&#xff0c;包括 .NET 中的异步和跨平台…

Android+Appium自动化测试环境搭建及实操

1、Appium简介1.1 Appium概念1.2 Appium工作原理 2、Appium Server环境搭建2.1 Java JDK2.1.1 下载JDK2.1.2 运行exe安装JDK&#xff0c;设置安装路径2.1.3 设置环境变量2.1.4 验证安装结果 2.2 Android SDK2.2.1 下载安装Android SDK安装包2.2.2 下载platform-tools&#xff0…

Android Studio展示Activty生命周期

前言 本文章以及之后文章的程序版本使用Android Studio 2022.3.1 Patch 1 版本编辑&#xff0c;使用语言为java&#xff0c;最低支持API 27 Android 8.1&#xff0c;构建工具版本如下&#xff1a; 本文章主要是介绍Activty跳转和删除&#xff0c;以备后续使用&#xff0c;所以就…

微信页面公众号页面 安全键盘收起后页面空白

微信浏览器打开H5页面和公众号页面&#xff0c;输入密码时调起安全键盘&#xff0c;键盘收起后 键盘下方页面留白 解决办法&#xff1a; 1、&#xff08;简单&#xff09;只有在调起安全键盘&#xff08;输入密码&#xff09;的时候会出现这种情况&#xff0c;将input属性改为n…

Vuex的基础使用存值及异步

目录 一、概述 ( 1 ) 讲述 ( 2 ) 概念 ( 3 ) 作用 二、取值 1. 安装 2. 菜单栏 3. 模块 4. 引用 三、改值 四、异步&后台请求 带来的获取 一、概述 ( 1 ) 讲述 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的…

【将文本编码为图像灰度级别】以 ASCII 编码并与灰度级别位混合将文本字符串隐藏到图像像素的最低位中,使其不明显研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…