Keil编译自动生成定制的HEX文件

        实现了一个自动化功能,主要用于keil编译时对项目生成的 .hex 文件进行管理,并基于特定的版本号和当前编译时间对hex文件进行重命名。以下是它的功能及特点介绍:

功能特点:

  1. 版本号提取:代码能够从指定的C源文件(这里main.c)中自动提取版本号。这通常对于嵌入式软件开发中的版本控制非常有用。

  2. 日期获取:脚本可以获取当前编译时间,并按照指定格式进行hex的重命名。对于生成的hex能知道最新编译的时间。

  3. 文件搜索:它会在当前目录下搜索 .uvprojx 文件,这些文件通常与嵌入式项目的开发环境(如uVision)相关联。然后,从文件名中提取出相应的hex名称。

  4. 文件复制与重命名:脚本会在当前目录中获取子目录检索查找对应的 .hex 文件。如果找到该文件,脚本会将其复制到当前目录,并在文件名中添加版本号、下划线和日期,以便轻松区分不同版本和编译日期的文件。

  5. 错误处理:如果在指定的路径下找不到 “ 版本 ” 、 “ .hex ” 文件,脚本会打印出错误信息,以便用户了解问题所在。

特点:

  1. 自动化:整个过程完全自动化,无需用户手动干预,大大提高了工作效率。

  2. 灵活性:通过修改配置文件或函数参数,用户可以轻松适应不同的项目结构和命名约定。

  3. 可扩展性:代码结构清晰,易于维护和扩展。例如,可以添加更多功能来支持其他类型的文件或更复杂的版本控制策略。

  4. 版本控制:通过添加版本号和日期到文件名中,用户可以轻松跟踪和管理项目的不同版本和编译记录,这对于长期开发和维护项目至关重要。

  5. 错误提示:当发生错误(如找不到文件)时,脚本会提供明确的错误提示,帮助用户快速定位问题。

使用注意事项:

        ①该程序需要放在与 “ *****.uvprojx ” 相同目录进行运行。

        ②可以把该 “ *.py ” 程序编译成 “ *.exe ” 文件,在keil中设置编译自动运行 “ *.exe ” 文件,这样就自动生成了定制的HEX文件。步骤如下:

部分python代码:

def get_Date():
      
    # 获取当前本地时间和日期  
    now = datetime.now()  
    # 提取年、月、日、小时、分钟  
    year = now.year  
    month = str(now.month).zfill(2)  # 使用 zfill 方法确保月份是两位数  
    day = str(now.day).zfill(2)      # 使用 zfill 方法确保日期是两位数  
    # 打印这些变量
    print("编译时间:", now)
    
    return str(year)+str(month)+str(day)
  
def project_name_file():  
    # 使用glob模块查找所有.ioc文件  
    ioc_files = glob.glob(os.path.join(path, '*.uvprojx'))  
  
    # 提取文件名(不包括路径和后缀)  
    file_names = [os.path.splitext(os.path.basename(file_path))[0] for file_path in ioc_files]  
  
    return file_names  # 直接返回列表,而不是字符串  
  
def copy_hex_file_to_current_dir(version,Date):  
  
    # 获取文件名列表  
    file_names = project_name_file()  
  
    for file_name in file_names:  
        # 构建目标文件的绝对路径
        target_file_path = os.path.join(current_dir, file_name, file_name + ".hex")  
        
        # 检查文件是否存在  
        if os.path.exists(target_file_path):  
            # 构建复制到当前目录的新文件的路径  
            new_file_path = os.path.join(current_dir, file_name + version +'_' + Date + ".hex")
  
            # 复制文件  
            shutil.copy2(target_file_path, new_file_path)
            
            print('生成的最新HEX文件目录:',new_file_path)
        else:  
            print(f"File {target_file_path} does not exist.")  
  
# 提取版本号
def extract_version_from_file():
    
    # 构建目标文件的绝对路径
    target_file_path = os.path.join(parent_dir, "Core", "Src", "main.c")

    with open(target_file_path, 'r') as file:  
        content = file.read()  
        match = re.search(r'Ver_([0-9][.][0-9]+)', content)  # 注意这里添加了+来匹配多个数字  
        if match:
            print('获取到程序版本号: ',match.group())
            return match.group()  
        else:
            
            return None  

# 提取版本号
version = extract_version_from_file()
  
if version:
    
    Date = get_Date()
    
    copy_hex_file_to_current_dir(version,Date)
    
else:  
    print("Version not found in main.c file.")  



完整python代码及生成的exe程序:

https://mp.csdn.net/mp_download/manage/download/UpDetailed

        

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qq_755682240

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

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

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

打赏作者

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

抵扣说明:

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

余额充值