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

这篇具有很好参考价值的文章主要介绍了MDK自动生成带校验带SVN版本号的升级文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

获取SVN版本信息

  • 确保SVN安装了命令行工具,默认安装时不会安装命令行工具
    MDK自动生成带校验带SVN版本号的升级文件,嵌入式,MDK,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

MDK自动生成带校验带SVN版本号的升级文件,嵌入式,MDK,svn

  • 编写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 编译器执行该脚本
    MDK自动生成带校验带SVN版本号的升级文件,嵌入式,MDK,svn
  • 将版本号添加到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));
}

MDK自动生成带校验带SVN版本号的升级文件,嵌入式,MDK,svn
注意填入中断向量表的是存放版本号的地址,需要用指针来转化成版本号。

在bin文件末尾添加CRC校验

  • 编写脚本文件,生成带版本号名字的app。
@rem 显示RAM FLASH使用情况
Keil5_disp_size_bar_v0.4.exe  


echo off
@rem 原始bin文件路径
set file_path=Objects

@rem 原始bin文件名
set file_name=name.hex

@rem 转换为bin文件的前缀
set file_prefix=app

copy %file_path%\%file_name% .\app.hex

@rem 转换为bin文件

for /f "tokens=1,2 delims=:" %%a in ('hex2bin app.hex') do (
	if /i "%%a"=="Lowest address" (    
        set "StartAddrs=%%b"    
    )
	if /i "%%a"=="Max Length" (    
        set "Length=%%b"    
    )
)

@rem 获取bin文件大小 和起始地址 
set "addr=0x%StartAddrs: =%"
set "indexdx=%Length: =%"

ECHO app length is: %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"    
    )
)     

@rem 将版本号拆分成 V1_0_0_xx 的形式
set "result=%revision:~0,1%_%revision:~1,1%_%revision:~2,1%_%revision:~3%" 
echo version is: %result% 
set "revision=%result%"    


@rem 获取设备型号
set "file=svn_version.h"    
    
for /f "tokens=2,3 delims= " %%a in ('type "%file%"') do (    
    if /i "%%a"=="PRODUCT_MODEL" (    
        set "product=%%b"    
    )
)    
    


@rem 生成带版本号的升级文件 
srec_cat.exe app.bin -Binary -crop 0 %indexdx% -STM32_Little_Endian %indexdx% -o %file_prefix%_%product%_v%revision%.bin -Binary
echo create %file_prefix%_%product%_v%revision%.bin

echo app startAddr is: %addr%

@rem 生成带CRC校验的hex文件 替换在MDK中下载的hex
srec_cat.exe %file_prefix%_%product%_v%revision%.bin -Binary -offset %addr% -o app_crc.hex -Intel -Output_Block_Size=16
copy .\app_crc.hex  %file_path%\%file_prefix%_%product%_V%revision%.hex 
echo create %file_path%\%file_prefix%_%product%_V%revision%.hex 

del %file_path%\%file_name%
copy .\app_crc.hex  %file_path%\%file_name%

del app.hex 
del app.bin
del app_crc.hex 

echo create app is ok

MDK自动生成带校验带SVN版本号的升级文件,嵌入式,MDK,svn

在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文章来源地址https://www.toymoban.com/news/detail-726551.html

到了这里,关于MDK自动生成带校验带SVN版本号的升级文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot 集成MyBatis-Plus-Generator(最新版3.5.2版本)自动生成代码(附带集成MyBatis-Plus)

    快速入门 代码生成器配置(新) spring boot 2.3.12.RELEASE mybatis 3.5.2 mybatis plus 3.5.2 mybatis plus generator 3.5.2 mysql 8.0.17 velocity 2.3 hutool 5.8.15 druid 1.2.8 lombok 自带 示例程序选择的技术目前各项技术的稳定版本。 相信大家厌烦重复的造轮子过程,编写与数据库表对应的实体类,接着再进

    2024年02月21日
    浏览(53)
  • 自动生成测试用例_接口测试用例自动生成工具

    写用例之前,我们应该熟悉API的详细信息。建议使用抓包工具Charles或AnyProxy进行抓包。 我们先来了解一下另一个项目har2case 他的工作原理就是将当前主流的抓包工具和浏览器都支持将抓取得到的数据包导出为标准通用的 HAR 格式(HTTP Archive),然后 HttpRunner 将 HAR 格式的数据

    2024年02月05日
    浏览(61)
  • 抖音自动生成视频、字幕、自动上传发布

    点击进入https://github.com/Richard0403/dy-auto https://github.com/Richard0403/dy-auto/assets/14147304/21400a42-9296-4956-9517-ced8d8bf4737 名称 功能 ffmpeg 处理视频的生成,语音添加,字幕的添加等 微软SpeechStudio 文字合成语音 whisper 语音生成字幕 jieba3k 用于文案的提取 playwright 用于自动化操作 环

    2024年02月08日
    浏览(55)
  • python自动生成SQL语句自动化

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在数据处理和管理中,SQL(Structured Query Language)是一种非常重要的语言。它用于在关系型数据库中执行各种操作,如查询、插入、更新和删

    2024年04月28日
    浏览(66)
  • 源生成器:根据需要自动生成机械重复代码

    本文概述了利用.NET Compiler Platform(“Roslyn”)SDK 附带的 源生成器 (Source Generator)自动生成机械重复的代码。关于这部分的基础入门知识可以在MSDN [1] 学到。 本文 默认 已经有一个解决方案,包含两个项目。一个是普通C#项目,依赖于另一个源生成器项目。 此处以 Dependenc

    2024年02月01日
    浏览(73)
  • AIGC for code(AIGC/AI生成代码/生成式AI之代码生成/AI编程工具/自动编程/自动生成代码/智能编程工具/智能编程系统)

    AIGC,Artificial Intelligence Generated Content,人工智能生成内容 AIGC for code,AI生成代码 Copilot是由微软的子公司Github与openAI共同开发的人工智能(AI)驱动的编程助手。它能够直接在你的编辑器中,为你提供代码片段或者整个函数的建议,以帮助你更快地编写和完成代码。这个工具

    2024年02月17日
    浏览(75)
  • 7. 实现 API 自动生成

    目录 1. pom.xml中引用依赖 2. 引入相关的依赖 3. 编写配置类 4. application.yml 中添加配置 5. API 常用注解  6. 访问 API 列表 7. API 导入 Postman 使用 Springfox Swagger生成 API,并导入 Postman,完成API单元测试。 Swagger 简介 :Swagger 是⼀套 API 定义的规范 ,按照这套规范的要求去定义接口

    2024年02月12日
    浏览(35)
  • vitepress(三):自动生成目录

    上一节我们将自己的网站发布到了git pages上,但是现在我们需要每次更新一篇文章就重写一次目录,操作上十分的繁琐和不方便,所以我们需要一个方法去自动生成我们的侧边栏结构,方便我们每次只需要更新我们的项目即可。这里我们要知道一个点: 因为 VitePress 应用在生

    2024年02月09日
    浏览(64)
  • Apifox自动生成接口文档

    官方文档:Apifox - API 文档、调试、Mock、测试一体化协作平台 - 接口文档工具,接口自动化测试工具,接口Mock工具,API文档工具,API Mock工具,API自动化测试工具         打开 IDEA Preferences(Settings) Plugins ,搜索 Apifox Helper 官方地址:Apifox IDEA 插件快速上手 | Apifox 帮助文档

    2024年02月12日
    浏览(42)
  • AI自动生成代码工具

    AI自动生成代码工具是一种利用人工智能技术来辅助或自动化软件开发过程中的编码任务的工具。这些工具使用机器学习和自然语言处理等技术,根据开发者的需求生成相应的源代码。以下是一些常见的AI自动生成代码工具,希望对大家有所帮助。北京木奇移动技术有限公司,

    2024年02月04日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包