build - 使用 PlatformIO 自动增加内部版本号

标签 build arduino microcontroller platformio

我有几个用于家庭自动化的微 Controller 项目。我的每个节点都有一个在代码中手动设置的版本号。这个版本号是在节点启动的时候上报的,通知我运行的是哪个代码。

有时在对代码进行一些更改后会忘记更改版本号。所以必须找到一个自动解决方案。

我对解决方案有一些想法:

  • 创建文件(version.h):#define BUILDNO xxx
  • 将其包含在相关的 c 代码中
  • 每次构建前自动增加 xxx

  • 可以实现吗?或者有没有其他类似结果的解决方案?

    最佳答案

    我根据我的问题的答案做了一些研究。 PlatformIO 可以在编译之前运行自定义脚本。以下是生成内部版本号并将其包含到您的项目代码中的过程:

  • 在项目文件夹中创建一个 Python 脚本:buildscript_versioning.py
  • FILENAME_BUILDNO = 'versioning'
    FILENAME_VERSION_H = 'include/version.h'
    version = 'v0.1.'
    
    import datetime
    
    build_no = 0
    try:
        with open(FILENAME_BUILDNO) as f:
            build_no = int(f.readline()) + 1
    except:
        print('Starting build number from 1..')
        build_no = 1
    with open(FILENAME_BUILDNO, 'w+') as f:
        f.write(str(build_no))
        print('Build number: {}'.format(build_no))
    
    hf = """
    #ifndef BUILD_NUMBER
      #define BUILD_NUMBER "{}"
    #endif
    #ifndef VERSION
      #define VERSION "{} - {}"
    #endif
    #ifndef VERSION_SHORT
      #define VERSION_SHORT "{}"
    #endif
    """.format(build_no, version+str(build_no), datetime.datetime.now(), version+str(build_no))
    with open(FILENAME_VERSION_H, 'w+') as f:
        f.write(hf)
    
  • 添加一行到 platformio.ini :
  •     extra_scripts = 
            pre:buildscript_versioning.py
    

    构建您的项目将运行脚本。将创建 2 个文件:
  • 版本控制 : 一个简单的文本文件,用于存储最后一个版本号
  • 包含/version.h : 要包含的头文件

  • 现在您可以将此行添加到您的 C 代码中:
    #include <version.h>
    

    我在这里创建了一个带有一些文档的 gitlab 存储库:https://gitlab.com/pvojnisek/buildnumber-for-platformio/tree/master
    欢迎进一步的想法!

    关于build - 使用 PlatformIO 自动增加内部版本号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56923895/

    相关文章:

    c - Arduino 从服务器问题中得到响应

    c - 找到两个最差的值并删除总和

    c - Eclipse:构建后没有这样的文件或目录

    python - CPython 安装失败

    java - 如何在 build.gradle 文件中添加 OJDBC6.jar?

    localization - 如何在微 Controller 上支持多种语言?

    c - 微 Controller 计数器溢出和计数

    linux - 在构建期间生成 ramdisk 并填充内容

    arrays - Arduino 用 AnalogRead 中的值填充数组

    c - Arduino C - 审查变量数据