2:S32DS编译获取固件项目版本号和哈希值

项目需要获取项目代码的版本号和哈希值,在嵌入式中常使用S32 Design Studio编译C/C++ 代码。本文介绍使用.bat(Windows文件处理脚本)和python脚本,实现S32DS编译工程获取版本号和哈希值并且存储在项目工程中。

目录

一、前期准备

二、S32DS项目代码导入

1.pre_build.py

2.pre_build.bat

三、S32DS项目配置

四、使用

总结


一、前期准备

        1.安装python(3.0以上)

        2.安装Gitpython

  1. 打开Power Shell,执行:pip install GitPython
  2. 如遇网络问题,可通过-i切换源:pip install GitPython -i https://pypi.mirrors.ustc.edu.cn/simple/

二、S32DS项目代码导入

        在项目中代码目录创建build_scripts文件夹,存放功能代码 pre_build.py、pre_build.bat。同时创建以上俩个文件。文件代码如下:

1.pre_build.py

#!/usr/bin/python
import os
import sys
from datetime import datetime

wdir = str(sys.argv[1])
try:
    import git
    def get_commit_hash(wdir):
        repo = git.Repo(wdir)
        if repo.is_dirty():
            print("Warning: repo is dirty %s" % wdir)
        commit = bytes.fromhex(str(repo.head.commit))
        return commit
    repo = git.Repo(wdir)
    tag = repo.git.describe('--tags')
    print("project Tag:", tag)
    project_tag_num = tag.lstrip('v').split('-')[0].split('.')
    project_tag_num.append('1' if 'beta' in tag.lower() else '0')
    print("project Tag Number:", project_tag_num)
    projectSha = get_commit_hash(wdir)
    print("project SHA:", projectSha)
except:
    print("Warning: failed to get tag and commit sha!")
    project_tag_num = [0,0,0,0]
    projectSha = [0xFF, 0xFF, 0xFF, 0xFF]


now = datetime.now()
with open(os.path.join(wdir, 'source', 'Version', 'Version.c'), 'w+') as f:
      print("#include \"Version.h\"", file=f)
      print("", file=f)
      print("const VersionInfo_t Version_xInfo = {", file=f)
      print("    .u8Build = {%s,%s,%s,%s}," % \
            (now.year // 100, now.year % 100, now.month, now.day), file=f)
      print("    .u8SwTag = {%s,%s,%s,%s}," % \
            (project_tag_num[0], project_tag_num[1], project_tag_num[2], project_tag_num[3]), file=f)
      print("    .u8SwSha = {0x%02X, 0x%02X, 0x%02X, 0x%02X}," % \
            (projectSha[0], projectSha[1], projectSha[2], projectSha[3]), file=f)
      print("};", file=f)
      #Get version information
      print("", file=f)
      print("VersionInfo_t get_VersionInfo() {", file=f)
      print("    return  Version_xInfo;", file=f)
      print("};", file=f)

2.pre_build.bat

git submodule update --init --recursive

python %1/build_scripts/pre_build.py %1

三、S32DS项目配置

        在S32DS选中项目右键 properties -> C/C++ Build -> Setting -> Build Steps 下面选择:

其中${projDirPath}项目根目录,创建 Version.h 文件并且添加头文件路径如图:

        完成以上点击项目编译。就会生成Version.c文件,Version.h可以我们自己创建也可以生成。我是自己创建,方便项目调用。

四、使用

        通过 get_VersionInfo() 调用存储结构体 VersionInfo_t 在需要的地方打印或输出。


总结

        以上就是今天要讲的内容,本文简单介绍python和C/C++代码在S32DS的混合编译的使用。

bat传参语法

python学习

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bug空间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值