Bat脚本-编译及烧录keil-MDK工程

2023-05-16

目录

  • 概述
  • 背景
  • 需求
  • 需求分析
  • 需求实现
  • 实现功能
  • 使用示例
    • 1、修改脚本中的编译软件路径
    • 2、将脚本的文件路径加入系统的环境变量
    • 3、通过Vscode 进行调用
  • 可进一步优化的方向
  • 总结

概述

本文主要讲述的是一个关于调用keil-MDK的软件编译对应单片机工程的脚本函数。

背景

在开发单片机的过程中会使用到keil-mdk,但是个人感觉这个工具的编写代码界面不是很好看,所以使用了VScode 进行编写代码,然后在用keil-mdk进行编译,来回切换,使用的久了以后感觉这样也不是很舒服,于是想着写一个脚本,在VScode 中调用该脚本进行代码编译,这样就可以实现在Vscode 中编写代码,然后在Vscode 调用脚本进行代码编译。

需求

1、bat 脚本;
2、可以在vscode 中调用自动识别当前工程;
3、可以编译当前路径下的keil-mdk工程;

需求分析

第一个需求很简单,就是写一个bat脚本就可以;
第二个需求可以用文件查找的方式,在当前路径或子路径中找到工程文件即可;
第三个需要可以使用脚本调用keil-mdk 的编译软件,输入对应的工程参数即可完成工程编译;

需求实现

通过夜以继日的查找资料和代码编写,同时参考了以下大神的资料:
使用脚本(命令行)编译KEIL工程
完成了如下脚本:

@echo off
setlocal enabledelayedexpansion
REM ------------------------------------------------------------------
REM 脚本:keil-mdk 的编译脚本
REM 日期:2022/6/16
REM 输入参数:-r: 全局编译; -b: 编译; -f: 烧录; 无参数:编译
REM 使用方法:
REM 1、将脚本放置任意文件夹,并对此文件夹添加环境变量
REM 2、在相关工程路径下进行脚本调用此脚本,根据需求输入参数
REM 参考资料:
REM ARM开发网站:https://developer.arm.com/documentation/101407/latest/Command-Line
REM ------------------------------------------------------------------

REM 这里把UV设置成Keil安装地址
set UV=D:\keilMdk\loading\UV4\UV4.exe
REM 查找工程文件并把UV_PRO_PATH设置成工程路径
for /f "delims=" %%i in ('dir /s/b/a-d ^| findstr .uvprojx') do (
	set UV_PRO_PATH=%%i
	set /a n=n+1)
echo %UV_PRO_PATH%
REM 判断是否只有一个工程文件
if not %n%==1 (
	goto NO_ONLY
)

REM 开始编译或烧录
echo .>build_log.txt

if "%UV_PRO_PATH%" == "" goto NOP
if "%1" == "-b" (
REM 编译
    echo Init building ... 
    %UV% -j0 -sg -b %UV_PRO_PATH% -o %cd%\build_log.txt 
    type build_log.txt
) else if "%1" == "-f" (
REM 烧录
    echo Init flashing ...  
    %UV% -j0 -sg -f %UV_PRO_PATH% -o %cd%\build_log.txt 
    type build_log.txt
) else if "%1" == "-r" (
REM 全局编译
    echo Init building ...  
    %UV% -j0 -sg -r %UV_PRO_PATH% -o %cd%\build_log.txt 
    type build_log.txt
) else (
REM 仅编译
    echo Init building ... 
	%UV% -j0 -sg -b %UV_PRO_PATH% -o %cd%\build_log.txt
    type build_log.txt
REM    echo Init flashing ... 
REM    %UV% -j0 -sg -f %UV_PRO_PATH% -o %cd%\build_log.txt 
REM    type build_log.txt
)
if "%2" == "-f" (
REM 烧录
    echo Init flashing ... 
    %UV% -j0 -sg -f %UV_PRO_PATH% -o %cd%\build_log.txt 
    type build_log.txt
)
echo Done.
del %cd%\build_log.txt
goto end

:NOP
echo No ProjectName
goto end

:NO_ONLY
echo Not the only Project,Please check project number
goto end

:end
REM 打开下面这个注释可能导致控制台窗口在编译完成后关闭
::exit

实现功能

1、可以识别当前路径下的keil-mdk 工程文件进行编译;
2、同时可以把编译的过程输出到vscode 控制台窗口中;

使用示例

1、修改脚本中的编译软件路径

将脚本中UV4.exe的路径修改成自己电脑中安装UV4.exe的路径

REM 这里把UV设置成Keil安装地址
set UV=D:\keilMdk\loading\UV4\UV4.exe

2、将脚本的文件路径加入系统的环境变量

目前我把该脚本命名为“mdkbuild.bat”,存放在“D:\work\workdata\Lin\Information\BatTool”路径中,并将该路径设置为环境变量,这样就可以在电脑的任意路径下通过控制台机进行调用。
在这里插入图片描述

3、通过Vscode 进行调用

可以看到在工程的路径下,通过VScode 的控制台调用该脚本,完成了代码的编译,同时输出了编译的结果。如果出现编译错误,还可以通过ctrl + 鼠标左键点击显示编译错误的地方,直接跳转过去。
在这里插入图片描述

可进一步优化的方向

1、该脚本还不能支持在线debug 的功能,所以需要debug 的时候还是得使用keil-mdk进行debug;
2、该脚本编译代码的结果是在编译完成后才会显示出来,所以会出现调用脚本后,要等一会才会出现编译的结果,而不能实时打印显示编译了那个文件;

总结

这次脚本的编写对我来说还是发现了
ARM开发网站
这个网站有很多值得学习的资料。
总的来说,还算是满足了需求,不过还有很多需要加强的地方,后续有方案了在改进吧。

免责声明:本文内容含网络参考、作者编写等,内容版权归原作者所有,未经允许,禁止转载。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bat脚本-编译及烧录keil-MDK工程 的相关文章

  • python3-操作SQLite、创建表、添加数据、查询数据

    SQLlte数据类型 SQLite能保存什么样的数据类型 可以保存空值 整数 浮点数 字符串和blob 什么是blob xff1f xff1f 是二进制大对象 例如图片 音乐 zip文件 什么是游标 游标是在数据库中用来移动和执行查询的对象
  • 初学者都能看懂的95%置信区间

    项目github地址 xff1a bitcarmanlee easy algorithm interview and practice 经常有同学私信或留言询问相关问题 xff0c V号bitcarmanlee github上star的同学
  • c# WindowForm练习项目主窗体设计

    窗体分割器 SpliContainer分割器 在项目主窗体分割成左右俩部分 设置边框线属性 MonthCalendar月历控件 添加程序所需要的按钮 退出 修改密码 添加会员 按钮 固定好左边的容器 组件 ImageList 按钮太多添加图
  • C#-WinForm班级下拉框数据绑定

    前台展示 后台方法 span class hljs keyword using span System span class hljs keyword using span System Collections Generic span c
  • C#--WinForm项目主窗体设计

    主窗体基本设置 大小 颜色 去边框 出现的位置 Panel控件 背景图 颜色 布局 xff1a Label标签 文本 字体 背景颜色 布局 按钮 布局 文本 字体颜色 背景色 底部panel 绑定控件边框 颜色 用label标签导入图标 S
  • C# -- 实现WinForm程序的密码修改

    修改窗体程序密码的示例 实现分析 前台弹出修改窗体 编写后台方法 xff0c 调用通用数据访问类Update方法 数据验证 xff0c 判断原密码是否与旧密码符合 xff0c 俩次输入的新密码是否一致 更新程序全局变量 前台弹出修改窗体 编
  • C#--WinForm--表格数据控件DataGridView--绑定模式

    官方文档 DataGridView控件提供了一种强大而灵活的以表格形式显示数据的方式 用户可以使用DataGridView控件来显示少量数据的只读视图 xff0c 也可以对其进行缩放以显示特大数据集的可编辑视图 扩展DataGridView
  • ASP.NET--网站配置、发布与部署

    网站发布前的配置信息 配置文件下载 网站发布的基本步骤 写好的项目 在本机上发布 打开目录查看 xff1a 部署网站 安装IIs 打开控制面板 程序和功能 启用或关闭Windows功能 安装后 返回控制面板 管理工具 双击打开 xff1a
  • c/c++ hash表 (哈希表、字典表)

    表 1 表 存储数据 key gt value 2 表存储数据结构的困难 怎么查找 一个一个key去比较去查找 xff1f 61 61 效率不高 3 Hash算法加快查找 将字符串的key 转成整数 使用整数找到对应的value Hash算
  • c/c++ UDP通讯

    UDP通讯 1 无连接的 不需要反复的确认和握手等待 根本不关心对方是否存在 2 不可靠 可能有丢包 和先发后到 3 UDP通讯快速 占用系统资源少 4 UDP提供作为传输层协议的最基本功能 将其他的交给用户自己来管理 UDP服务端 1 创
  • c#程序流程控制与调试技术

    If选择结构 为什么要使用关系运算符 简单If 选择结构1 逻辑运算符
  • 特征融合之基于贝叶斯理论的特征融合算法

    参考文献 xff1a 1 刘渭滨 邹智元 邢薇薇 模式分类中的特征融合方法 J 北京邮电大学学报 2017 04 5 12 2 Ma A J Yuen P C Lai J H Linear Dependency Modeling for C
  • 初学者都能看懂的蒙特卡洛方法以及python实现

    项目github地址 xff1a bitcarmanlee easy algorithm interview and practice 经常有同学私信或留言询问相关问题 xff0c V号bitcarmanlee github上star的同学
  • postman安装包

    postman34位和64位安装包 xff0c 访问API 下载地址 xff1a 链接 xff1a https pan baidu com s 1p 830DPPKumXiwMPVtKYsw 提取码 xff1a 8p6k
  • STM32入门:STM32F401CDU6库函数工程文件搭建

    STM32F401CDU6库函数工程文件搭建 根据下图的结构进行复制粘贴操作 xff0c 代码部分在本文末有贴出来 xff0c STM32F4xx DSP StdPeriph Lib V1 8 0文件下载 xff08 使用part1即可 x
  • 减小vscode-cpptools的内存占用

    在VScode菜单栏文件 gt 首选项 gt 设置 搜索C Cpp intelliSenseCacheSize 修改默认的5120为512
  • Ubuntu20.04 安装tcp调试工具mNetAssist步骤

    概述 在Ubuntu20 04上安装一个比较好用的网络调试助手mNetAssist 下载链接 mNetAssist链接 提取码 vrsm 安装 进入文件 mNetAssist release amd64 deb的所在文件夹 xff0c 然后
  • 页面加载时,添加进度条,提高用户体验

    这几个月做了个项目 xff0c 在此对一些问题做一个记录 项目是前后端分离的 xff0c 前端用的 npm 43 webpack 问题 xff1a 由于系统某页面数据量过大或网络较差等原因 xff0c 导致页面还未完全加载出来 xff0c
  • matlab绘制三维图像,用ga工具箱求解有约束的优化问题(接力遗传算法)

    绘制目标函数图像 目标函数的图像绘制为 xff08 未考虑约束条件 xff09 画法1代码 有约束的三维函数图像绘制 x1 61 10 1 10 x2 61 6 1 6 x1 x2 61 meshgrid x1 x2 f 61 exp x1
  • 多元线性回归 stata

    文章目录 回归的思想 xff0c 任务 xff0c 使命 xff0c 分类线性回归一定只能用于有线性关系的变量吗数据的分类数据的标准化处理最小二乘法拟合一元线性回归方程的几个结论回归系数的解释遗漏变量会造成内生性 xff08 扰动项和变量相

随机推荐

  • C++编译报错:||error: ld returned 1 exit status|

    这个问题我遇到过三次了 xff0c 每次好像原因都不一样 xff0c 在网上看到很多博客都记录了这个问题 xff0c 每人原因也都不同 xff0c 所以可以有多种原因都引发这个错误 但我不懂ld returned 1 exit status
  • C++ day34 异常(三)异常规范,未捕获异常,意外异常,异常导致内存泄漏

    文章目录 异常规范 xff08 C 43 43 98添加 xff0c C 43 43 11已摒弃 xff0c 不建议使用 xff09 异常规范的作用 xff08 正是这俩作用的鸡肋和难办使它失去了粉丝 xff09 C 43 43 11支持的
  • C++ day37 标准模板库STL初识

    文章目录 简介是什么 xff1a 容器类模板 xff0c 迭代器类模板 xff0c 函数对象模板 xff0c 算法模板的集合STL不是面向对象编程 xff0c 而是泛型编程 xff01 历史 xff1a 1994年发布 模板类vector示
  • STM32烧录 Error:Flash Download Failed-“Cortex-M3“ 解决方案—ST-Link调试

    STM32烧录 Error Flash Download Failed 34 Cortex M3 34 解决方案 ST Link调试 开发环境介绍设置步骤1 于Device中选择与你的开发板相匹配的芯片 xff0c 一般主芯片上都有标注2
  • SQL (十四)插入数据(insert语句,把数据插入表中)

    文章目录 插入完整的行 xff1a values子句不安全写法安全写法 xff1a 在表名后的括号明确给出列名小结 插入行的一部分 xff1a 简单插入某些查询的结果 xff08 即检索出的数据 xff09 xff1a insert sel
  • 模2除法(CRC冗余码计算)和二进制/十进制除法

    文章目录 CRC循环冗余检验 xff1a 余数为0就没出错 xff1b 不能确定哪几个比特出错了二进制除法 xff08 和十进制除法其实一样 xff01 xff09 模2除法 xff08 不同于二进制除法 xff01 本质就是异或而已 xf
  • latex超链接Argument of \Hy@setref@link has an extra }.错误解决

    用了 usepackage url 来在文章中写了超链接 xff0c 如 url https www baidu com 但是直接编译后没有颜色 xff0c 就是黑色的 xff0c 参考文献也是黑色的 加入下面两句代码可以让超链接显示出颜色
  • 希捷移动硬盘更换文件系统(exfat vs NTFS)

    毕业资料多 xff0c 专门买了个移动硬盘 xff0c 希捷的 2T 第一次买移动硬盘 xff0c 以为和常规U盘一样 xff0c 买来没仔细看说明书就直接用上了 xff0c 但是使用过程中老出问题 xff0c 比如从featurize平台
  • LPWAN——Sigfox实战经验介绍

    0 序 最近半年的时间一直在从事这方面的开发工作 xff0c 到目前为止对于Sigfox有一定想法和经验 xff0c 同时目前国内对于该技术的使用和应用还处在刚刚起步的阶段 xff0c 很多博客对Sigfox的讲解是一个浅尝辄止的介绍 xf
  • 拉格朗日乘子法详解(Lagrange multiplier)

    最近在视频的变换编码里推导最优变换 xff08 KL变换 xff09 时需要用拉格朗日乘子法 xff0c 之前在机器学习的各种优化问题里也要用到这个方法 xff0c 特此仔细钻研一番 xff0c 总结如下 xff1a 注 xff1a 这篇博
  • MATLAB求解规划问题(线性规划, 整数规划, 非线性规划)

    文章目录 基础知识规划问题的数学模型的三个要素解 线性规划Linear Programing理论示例 整数规划理论示例 非线性规划理论示例 生产实践中 xff0c 经常会遇到很多资源分配的问题 xff0c 如何分配各种资源以获得最大经济效益
  • matlab画三维图像(plot3,mesh,surf)

    二维函数的图像必须用三维坐标系画 xff0c 很多函数的图像长得很好看 xff0c 很有意思 会可视化也会有利于我们理解更深刻 xff08 1 xff09 plot3 三维曲线图 在网上看到这图觉得挺好看 xff1a t 61 0 pi 3
  • 智能小车学习笔记

    教程 视频教程 xff1b 资源网站 xff1b 可以获取模块的基础资料 xff1b 有刷电机有损耗 电机选型考虑 xff1a 转速和额定电压 xff1b 电机的力矩 xff0c 减速电机减速箱的作用 xff1a 减速 增大力矩 xff08
  • C++ 容器详解

    顺序容器vectorlistdequestackqueuepriority queue 关联容器mapmultimapsetmultiset 无序容器容器的互相比较迭代器 顺序容器 顺序容器类型特点vector可变大小数组支持快速随机访问
  • Cmake入门&运行保存C/C++文件

    Cmake入门 amp 运行保存C C 43 43 文件 在ubuntu创建 保存 运行c 43 43 文件CMake入门创建文件编译 参考 最近在学习Intel realsense T265双目视觉 xff0c 其中一步需要创建源文件ma
  • NVIDIA Jetson TX2 上手指南

    文章目录 一个性能强大的边缘设备我和 NVIDIA Jetson TX2 的初体验Fresh Your TX2为什么在第一步取消Host Machine可能遇到的问题 用上最好的性能 xff0c 小风扇跳舞吧 xff5e xff5e 运行一
  • extern "C"的作用以及为什么要使用extern "C"

    实现c 43 43 代码能够调用其他c语言代码 xff0c 加上extern 34 C 34 后 xff0c 这部分代码编译器以c语言的方式进行编译和链接 xff0c 而不是按c 43 43 方式原因 xff1a c和c 43 43 对同一
  • 什么是链表?(图解)

    一 xff1a 链表是什么 1 链表是物理存储单元上非连续的 非顺序的存储结构 xff0c 数据元素的逻辑顺序是通过链表的指针地址实现 xff0c 有一系列结点 xff08 地址 xff09 组成 xff0c 结点可动态的生成 2 结点包括
  • C++ STL各个容器的区别

    1 STL容器分类 xff1a STL的容器可以分为以下几个大类 一 顺序 xff08 序列 xff09 容器 xff0c 有vector list deque string stack 适配器类 queue 适配器类 priority q
  • Bat脚本-编译及烧录keil-MDK工程

    目录 概述背景需求需求分析需求实现实现功能使用示例1 修改脚本中的编译软件路径2 将脚本的文件路径加入系统的环境变量3 通过Vscode 进行调用 可进一步优化的方向总结 概述 本文主要讲述的是一个关于调用keil MDK的软件编译对应单片