wangqy_ic 发表于 2025-7-30 23:13

把 Keil 工程转换为 CMake 工程

#申请原创# #技术资源#@21小跑堂
国产 IC 厂家太给力,用上了最新的 Cortex-M52 内核。

由于用力太猛 Keil 的支持都还不完善,这个就是厂商就是极海微,这颗 IC 就是G32R501!

关于 G32R501

极海微最新推出的基于 Cortex-M52 的实时控制MCU,下面是引用自官网对这个 MCU 的介绍:
G32R5系列实时控制MCU搭载Armv8.1-M架构的Arm®Cortex®-M52内核及自研紫电数学指令扩展单元,支持基于矢量扩充方案(MVE)的ArmHeliumTM技术,集成高性能感知,控制外设和灵活的外设互联系统,支持-40°C~105°/125°C的宽环境工作温度,适用于新能源逆变器、商业电源、工业自动化、新能源汽车等广泛领域。



问题描述

因为内核过于“新鲜”,keil的支持尚未跟上,具体的表现可以看下图:




[*]不能找到函数/变量的定义;
[*]编辑器自动补全功能不能使用,主窗口状态栏显示“Module error! text completion deactivated."


尝试解决

容易想到的两个解决方法:


[*]换个开发工具。
[*]换个内核。


第一个方法是最容易想到的,除了keil,极海官方的资料显示最新的 IAR 对 G32R501 的支持是完善的。在极海的应用笔记《AN1126_G32R501 IDE与工具链使用说明》中也提到了 Eclispe 的使用方法。

第二个方法是取巧了,可以在项目 Device 下改选其他同一个指令集的内核:Cortex-M55,如下图所示:



之后清理一下项目,再重新编译,就可以支持符号定义跳转和自动补全功能。

除了上面两个方法,我自己还想到了 vs code 这个流行的工具。ARM官方还提供了 vs code 的扩展工具: Keil Studio Pack,点这里直达官网~这个扩展非常依赖网络,表现是构建工程时会从外网拉取资料,网络不好或者不能使用网络的工作环境,这个扩展就是失去了功能。

为此,我的思路回到了传统 C/C++ 开发的方法中,经过了解 vs code 对于 CMake 的支持非常完善,所以我决定选用这个方法,把 keil 工程改为 CMake 项目。

最开始的就是手写 CMakeLists.txt ,可以参考这个帖子:《 使用 cmake+vscode 环境移植 ThreadX 到 G32R501》:https://bbs.21ic.com/icview-3460432-1-1.html 。这里吐槽一下,为什么帖子里不能增加链接???@21小跑堂

我的方案
每个项目都要手工改写的话肯定不是我的风格,于是我写了个小工具:uvprojx2CMake 把 Keil 工程转换为 CMake 工程。这个工具是用 Python 编写,功能就是解析 keil 工程文件( .uvprojx 文件)并按 CMake 的要求生成 CMakeLists.txt 。

工程在 Gitee 上开源了:https://gitee.com/quincyzh/uvprojx2cmake,希望大家前往 star~当前版本提供了命令行方式和一个不太完善的 GUI 界面。

这个工具,可以于 keil 结合能更加便捷的使用,下面介绍集成方法:

第一步,下载这个工程。请前往 Gitee 页面,可以选择 git 克隆,也可以直接下载 zip 文件。
第二步,如果你的电脑没有 Python 的话需要安装。
第三步,添加 keil 菜单项。打开keil,点击菜单【Tools】→【Custom Tools Menu...】项目:


第四步,添加菜单项,参照下图:


击红色箭头指向虚线框按钮,增加一个菜单项;
在蓝色箭头处输入菜单项名称,我这里是uvproj2CMake;
在绿色框的两个输入框填入内:第一行是 python 可执行程序的名称,有无 .exe 都可以,第二行是 keil_uvprojx_to_cmake.py 这个文件的绝对路径和程序参数-v -e #P,可以复制粘贴。

运行效果

上述步骤完成后 keil 的 Tools 菜单会变成下图红色箭头所指的样子,点击后就会出现蓝色框的输出内容:


显示CMake文件已生成:,VS Code 设置已创建/更新的提示语表明运行成功~

使用 vs code 打开这个文件夹就可以在 vs code 里构建/编译项目了

配置项目,点击绿色箭头,成功的话输出类似绿色框的内容:


编译,点击绿色箭头的“生成”,编译的日志类似绿色框内容:


这样一番操作,我们就可以享受 vs code 这个现代化工具带给我们的便利~~~


涡流远见者 发表于 2025-7-31 17:10

VS Code现在可扩展性太强大了。
我现在是Keil编译,VSCode编写代码。
我觉得VSCode的调试功能还不及Keil

wangqy_ic 发表于 2025-7-31 18:41

是的,在 MCU 调试方面,Keil 确实是优于 vs code ,很多!
页: [1]
查看完整版本: 把 Keil 工程转换为 CMake 工程