目录
- 概述
- 背景
- 需求
- 需求分析
- 需求实现
- 实现功能
- 使用示例
- 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(使用前将#替换为@)