本文主要用作记录开发过程中使用的不同工具。主要也是课程导向的,所以可能并不会使用实际上更好的方法。设备是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。