Keil编译自动生成定制的HEX文件 您所在的位置:网站首页 Keil生成可执行的Hex文件一般步骤包括哪些 Keil编译自动生成定制的HEX文件

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

2024-07-04 07:43| 来源: 网络整理| 查看: 265

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

功能特点:

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

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

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

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

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

特点:

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

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

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

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

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

使用注意事项:

        ①该程序需要放在与 “ *****.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

        



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有