本文主要用作记录开发过程中使用的不同工具。主要也是课程导向的,所以可能并不会使用实际上更好的方法。设备是 STC15F2P60S2。
添加设备库
先安装 Arm Keil uVision 5。由于课程需要,使用 Keil 的开发工具链,主要是懒得去学 SDCC 的语法差异,也懒得移植学校给的 BSP 库。
使用十分复古的 STC-ISP 来添加设备库。直接点击 “添加型号和头文件……” 即可。
创建项目
需要首先新建项目目录、一个 C 文件(空不空都行),以及所需的头文件和库文件(.lib),文件都放在项目文件夹中。这里我将 C 文件和库文件放到 source/
目录,将 头文件放到 inc/
目录。
在 uVision 主界面顶部点击 Project - New uVision Project 来创建一个项目文件。由于 Keil 松散的文件管理,这个文件并不必须与源代码同目录同名,但为了遵循其他 IDE 的惯例,最好还是保持相同。
选择设备时可以在下拉栏里找到 STC MCU database,然后选择你的 STC 芯片。
之后询问的 STARTUP.A51 没必要复制进来。
然后找到左边项目浏览器中的 Target,如果没有下属 Group 就先创建一个,有了之后直接双击它,打开添加文件界面。将你的库文件和 C 代码添加进来。如果在这里添加头文件,要指定好目录,但如果是某种库的话可以留到后面添加,所以这里只添加了两个文件。
正常情况下 C 文件包含的头文件是会自动显示在 C 源代码下属的,就像上图这样。但是刚添加进文件的时候是没有的。
之后找到顶部 Project 菜单,选择 Options for Target xxx,点击 C51,找到 Include Paths,在这里添加额外的包含目录。我的库文件在项目文件夹 inc/
目录,故添加完成如图。
编写与构建项目
Keil 本身是一个完善的 IDE,那么对于写代码,我们自然是…… 用 VS Code!
只是为了自动识别 Keil 的项目,需要再装一个插件。该插件的信息如下。
|
|
在插件设置中指定 Keil 工具链 UV4.exe 的路径,就可以用 VS Code 打开工作区的同时自动识别 Keil 项目了。
VS Code 自带的 C language server 能够完美地契合我们的需求,体验比 Keil 高到不知哪里去了。将鼠标移至特定 Target 上,甚至可以直接构建项目。
如果没有 hex 文件输出,可以修改 uvproj 文件中的一行,在 tag 之间加一个 1,如下。或者在前面 Target Options 页面里找到 Output,选上 Create HEX file。
|
|
区分多种编译选项
有时由于方便调试的原因,我们需要添加调试输出,如 RS485 难以调试,则在开发时也输出到 USB 串口;同时我们也不希望最终使用时带有这种调试信息,那么在 C 语言中常用 #define
语句来区分:
|
|
可以使用多 build target 的方式,对每个 target 设定不同的 define 选项。从刚刚找到的 Options for Target 右边,点击 File Extensions, … 按钮,然后新建一个 target,并选择其为当前 target。然后打开之前 P3 提到过的 C51 选项,在 define 里设置想提前声明的内容即可。
刷写项目
这里仍然不使用 STC-ISP,而使用开源的 stcgal。
命令很简单,一般来说只需要一把梭:
|
|
由于程序似乎是为 Linux 设计的,在 Windows 下必须指定 COM 号。一般这个号和特定 USB 接口有对应关系,用 STC-ISP 看一下就行了。
这样我们可以将工作流与 vscode 深度融合,直接在其终端中操作,编辑、构建、刷写一体化,此时基本不需要 Keil。