首页 > 其他分享 >Keil辅助工具推荐及使用

Keil辅助工具推荐及使用

时间:2024-05-19 11:52:13浏览次数:19  
标签:辅助工具 Keil 推荐 编译 file path os dir

前言

再最近的学习当中无意间学到了一些关于Keil自动化运行脚本的方式,特此收集整理记录一下这里主要介绍三种收集而来的工具:

  1. Keil编译自动生成定制的Hex文件
  2. Keil自动化编译代码脚本
  3. Keil编译信息增强工具

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

参考链接:Keil编译自动生成定制的HEX文件_keil定制hex文件名-CSDN博客

工具优点

在日常使用Keil编译生成固件的过程中,总是有时管理不当,导致一个版本的固件无法准确定位,又或者每次需要在一顿生成的文件中找到Hex文件并将其按照规范重新命名并发布。而这一串工作可以利用脚本,在工程编译完成后自动执行并将生成的Hex都归入其中。

综上所述脚本需要拥有以下优点:

  1. 版本号自动提取,自动提取代码中版本宏定义,处理过程完全自动化。
  2. 可自行脚本适配不同项目结构。
  3. 获取当前编译时间增加编译时间信息
  4. exe运行不依赖任何环境

脚本参考代码

import os  
import shutil  
import re  
import glob
from datetime import datetime  
  
 
 
def get_Date():
      
    # 获取当前本地时间和日期  
    now = datetime.now()  
    # 提取年、月、日、小时、分钟  
    year = now.year  
    month = str(now.month).zfill(2)  # 使用 zfill 方法确保月份是两位数  
    day = str(now.day).zfill(2)      # 使用 zfill 方法确保日期是两位数  
    hour = str(now.hour).zfill(2)      # 使用 zfill 方法确保小时是两位数  
    minute = str(now.minute).zfill(2)      # 使用 zfill 方法确保分钟是两位数 
    # 打印这些变量
    print("编译时间:", now)
    
    return str(year)+str(month)+str(day)+str(hour)+str(minute)
 
  
def project_name_file():  
    # 假设你正在查找当前目录下的.uvprojx文件  
    path = '.'  # 当前目录  
  
    # 使用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):  
    # 获取当前目录的绝对路径  
    current_dir = os.path.abspath(os.getcwd())
    # print(current_dir)
  
    # 获取文件名列表  
    file_names = project_name_file()  
  
    for file_name in file_names:  
        # 构建目标文件的绝对路径(假设它在当前目录的Objects子目录中)  
        target_file_path = os.path.join(current_dir, "Objects" , file_name + ".hex")  
        
        # 检查文件是否存在  
        if os.path.exists(target_file_path):  
            # 检查是否有文件夹hex,如果没有则创建  
            if not os.path.exists(os.path.join(current_dir, "hex")):  
                os.makedirs(os.path.join(current_dir, "hex"))  

            # 构建复制到当前目录的新文件的路径  
            new_file_path = os.path.join(current_dir, "hex", 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():
    
    # 获取当前目录的绝对路径  
    current_dir = os.path.abspath('.')  
      
    # 获取父目录的绝对路径  
    parent_dir = os.path.abspath(os.path.join(current_dir, '..'))  
    
    # 构建目标文件的绝对路径(假设它在当前目录的MDK-ARM子目录中)  
    target_file_path = os.path.join(parent_dir, "os", "version.h")
 
    with open(target_file_path, 'r', encoding='utf-8') as file:  
        content = file.read()  
        match = re.search(r'VER_([0-9]+[.][0-9]+[.][0-9]+[.][0-9]+)', content)  # 注意这里添加了+来匹配多个数字  
        if match:
            print('获取到程序版本号: ',match.group())
            return match.group()  
        else:
            
            return None  
 
 
if __name__ == '__main__':  
    print('#'*10,'调用扩展程序_Start','#'*10)
    
    # 提取版本号(这部分保持不变)  
    version = extract_version_from_file()
    
    if version:
        Date = get_Date()
        copy_hex_file_to_current_dir(version,Date)
    else:  
        print("Version not found in version.c file.")  

    print('#'*10,'调用扩展程序_End','#'*10)
 
 

代码使用注意事项:

  1. 代码放在与 “ *.uvprojx ” 相同目录进行运行。
  2. 将Python编译生成为exe文件这样就可以利用命令行进行调用exe自动运行。

Keil工程上设置

  1. 首先代码中含有个版本号的宏定义,例如:#define SOFTWARE_VERSION "VER_0.1.0.1"
  2. 打开Options魔法棒,找到User栏,在Afrter Build/Rebuid 处写入./Output_HEX.exe即可运行生成

Keil命令行自动编译

参考链接:keil-autopiler: 一个基于 keil 的自动化编译代码的脚本 (gitee.com)

工具优点

可以不用打开Keil软件,直接使用命令行的方式即可进行Keil的编译,在部分有特别需要的工作环境下比较适用,这里只做介绍,不详细讲解,相关使用方法可以参考原链接说明。

Keil编译信息增加工具

参考链接:keil-build-viewer: keil MDK 编译信息增强工具 (gitee.com)

工具优点

  1. 增强编译Log的信息输出。
  2. 输出详细文件的资源占用情况。
  3. 对比之前资源情况反应资源增加(减少)情况。

使用情况

Keil执行多条脚本工具方式

由于Keil中,只能支持在After Build/Rebuild后执行两条语句,如当超过两条后,可以选择使用Win下bat脚本,批量运行多个脚本,并在Keil中设置执行bat脚本。

bat脚本如下:执行如下两条脚本

@echo off

REM 第二条命令行语句
cmd /c "Output_HEX.exe"

REM 第三条命令行语句
cmd /c "keil-build-viewer.exe"

标签:辅助工具,Keil,推荐,编译,file,path,os,dir
From: https://www.cnblogs.com/tangwc/p/18200185

相关文章

  • Windows Security Baselines(安全基线指南) 是由微软提供的一个安全配置集合,旨在帮助组
    安全基线指南-WindowsSecurity|MicrosoftLearnWindowsSecurityBaselines(安全基线)是由微软提供的一个安全配置集合,旨在帮助组织和管理员快速部署一套推荐的安全设置,以增强Windows操作系统及其组件的安全性。这些基线覆盖了操作系统本身、MicrosoftEdge浏览器、Inter......
  • 常用Maya动画渲染插件及云渲染插件推荐
    Maya是一款在影视动画行业备受推崇的建模和动画软件,以其卓越的性能和灵活的功能而闻名。为了提高工作效率,Maya提供了广泛的插件选择,这些插件可以大幅简化用户在建模和渲染过程中的操作。本文将介绍一些常用的Maya插件和高效的云渲染工具,助您更高效地完成动画制作,赶紧来了解一下吧......
  • 关于原型设计工具-墨刀的使用和推荐
    一.前言最近使用到了一款原型设计工具--墨刀,它是一款很优秀的软件,同时对于新手设计原型而言,是一款很容易上手的工具,下面我将介绍它的优势和魅力所在二.墨刀的优势与魅力(1).便于新人上手的功能指导新人刚接触此类型或者说单一原型设计工具时,墨刀会在内部首页设置一个《原型操......
  • 推荐一款微信公众平台Python开发神器!
    1、引言在当今数字化时代,微信公众平台成为了企业和个人连接用户的重要渠道。为了高效地管理和与用户互动,开发者需要一个强大而灵活的工具。Weixin-Python正是这样一个为微信公众平台量身打造的Python库,它以其简洁的API和丰富的功能赢得了众多开发者的青睐。本文将深入探讨......
  • 记录一下在KEIL中修改STM32的栈顶地址
    STM32的启动文件中定义的栈和堆的大小,由于栈是向下生长的。所以我们一般希望将栈顶设置为RAM的最高有效地址。这样就可以最大限度保护栈不会溢出。但是STM32的启动文件居然不是这样的思路。那STM32的启动文件的分配思路是怎么样的呢。它其实是先确定用户使用RAM的情况,然后在未使......
  • KEIL中使用的SCT段描述文件的一些语法说明
    ;FLASH起始址FLASH大小LR_IROM10x080000000x000F0000;这行描述的是编译后的执行代码存放在FLASH的哪地址,FLASH大小是多少。LR_IROM1是段名,随便写{ER_IROM10x080000000x000F0000;这行描述了一个ROM段,表示代码存储的位置和ROM的大......
  • uniapp开发h5游戏推荐框架
    在开发H5游戏时,推荐使用以下几个流行的游戏开发框架:   Phaser:Phaser是一个使用JavaScript制作的开源游戏框架,它支持WebGL渲染,并且有丰富的社区支持。   CreateJS:CreateJS是Adobe的一个开源库,主要用于创建交互式内容和动画。它支持WebGL和Canvas渲染。   PixiJS:P......
  • 消费电子产品数据安全芯片推荐-LCS4110R
    这些年来,我国消费电子的技术一直都在不断上升,很多知名品牌的消费电子都把生产基地建立在我国,成为了全球最大的消费电子的制造中心。同时我国消费电子的市场规模也在不断增大,这也让市场成熟度提高。我国不仅是最大的消费电子消费国,也是出口国。如何保障消费电子的版权及数据安全,可......
  • 推荐几款火爆的Python在线编辑器
    在当今数字化时代,编程已成为一项不可或缺的技能。Python作为一种简单易学且功能强大的编程语言,受到了广大编程爱好者和专业开发人员的青睐。为了方便大家随时随地编写和运行Python代码,市面上涌现了许多优秀的在线Python编辑器。本文将为您推荐几款目前非常火爆的Python在线编辑器......
  • 推荐一款Windows兼容的开源操作系统-ReactOS
    ReactOS介绍ReactOS™isanOpenSourceefforttodevelopaqualityoperatingsystemthatiscompatiblewithapplicationsanddriverswrittenfortheMicrosoft®Windows™NTfamilyofoperatingsystems(NT4,2000,XP,2003,Vista,7).TheReactOSproject,al......