[NXP]使用VSCode编译调试S32K144

1 引言

在最近一段时间的开发中我使用了Visual Studio Code来作为代码编辑器,其优异的工程管理,超快的启动速度,各种各样功能强大的插件(帅气的主题),使我立刻爱上了这个文本编辑器。加之网上有许多将stm32的工程搬迁到VSCode上来编译调试,所以我尝试使用插件来完整的在vscode上搭建了一个S32K144的开发环境。下面我就来详细讲述一下这个环境的搭建和基本使用方式。

2 软件准备

  1. Visual Studio Code
  2. S32 Design Studio2018.R1 (里面包含了mingw32、arm-none-eabi-gcc等工具

 

3 正文内容

3.1 编译

3.1.1 插件安装

在软件左侧选项中选择扩展选项,在插件市场中搜索安装 VS Code 插件如下:

  1. ARM

提供 ARM 汇编代码的语法识别加亮

     2. C/C++

提供 C/C++ 的语法智能感知、加亮及调试功能。

下图是我安装的关于C/C++相关的插件,仅供参考。

3.1.2 setting.json配置

点击 文件 -> 首选项 -> 设置,来打开 VS Code 的配置文件( VS Code 采用 json 格式的文件进行配置,没有图形界面),在文件中加入如下配置(窗口左侧为系统壳配置选项及默认参数是只读的,右侧窗口为配置设置界面,可写),尤其注意最后两项执行程序的路径要设到自己的路径下:


这时你的VSCode终端为git指令界面:

3.1.3 c_cpp_properties.json配置:

由于vscode不会自动识别makefile中的配置参数,所以如果想要使其代码索引,智能感知运行正确的话,就需要我们单独设置其中的c_cpp_properties.json文件。

c_cpp_properties.json 用于设定工程的 Include 路径,宏定义及搜索浏览路径,其中需要设定两个参数:

includePath 提供.h的搜索目录


需要注意的是一些工程路径之外的库函数的添加:

defines 编译时在指令中加入的宏定义,这里是在S32DS中的编译配置中找到的宏定义:

3.1.4 环境变量:

将以下路径添加到环境变量中:

  1. make.exe    C:\NXP\S32DS_ARM_v2018.R1\utils\msys32\usr\bin\make.exe
  2. arm-none-eabi-gdb    C:\NXP\S32DS_ARM_v2018.R1\Cross_Tools\gcc-6.3-arm32-eabi\bin\arm-none-eabi-gdb.exe

 

3.1.5 编译


在VSCode的终端内,进入到Debug目录下,直接执行make –j4

 

至此,使用VSCode对S32K144的编译就告一段落了,下面开始调试。

3.2 调试

3.2.1 准备:

https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWFnZXMyMDE3LmNuYmxvZ3MuY29tL2Jsb2cvNDAxNjU1LzIwMTgwMS80MDE2NTUtMjAxODAxMjkxOTE3NTQ0MzctMjEyNjE3MzAzNC5wbmc?x-oss-process=image/format,png
调试的整体流程图如下:

我们可以先进行一个简单的测试,来确定我们的环境是否正确。


打开我们的Jlink官方提供的 GDB server


按照上图的配置,点击OK

注意此时,已经在等待GDB client连接,以及端口号为2331

 

接着,我们可以在命令行中输入arm-none-eabi-gdb,应该可以看到如下界面,否则是没有添加
到环境变量中。


继续输入下面的指令:

此时,我的车机已经在正常运行了。

简单解释一下这几个指令:

target remote :2331 :连接到GDB server。

file : 载入目标文件到gdb。

load : 下载文件到目标板。

c: 运行到下一个断点,如果没有断点,会一直运行

monitor reset : 传递命令reset给JLink GDB server。

注意:monitor 后面的参数不是gdb的指令,而是gdb server的(这里就是JLink Server的),这里参考JLink的文档(在安装目录下有),可以接受如下指令

https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWFnZXMyMDE3LmNuYmxvZ3MuY29tL2Jsb2cvNDAxNjU1LzIwMTgwMS80MDE2NTUtMjAxODAxMjkxOTQzMDU4MjgtMTc0OTIyNTc5Ni5wbmc?x-oss-process=image/format,png
       可以了解一下。

3.2.2 配置launch.json:

这个文件的参数很多,我们对于简单的使用,只需要将其中的路径改为自己的工程路径和名称即可,有关于其具体意义和使用方式的说明可以查看c/c++插件的官方github userguid来学习使用。其中需要注意的是,由于我们的调试是在windows环境下使用mingw64来实现的,所以在调试的启动过程中指令会在windows cmd和mingw64跳转几次,具体指令是在哪个终端内调用的要根据指令的类型来决定,所以我们必须很小心的来设置路径参数,分清“ / ” 和 “ \ ”路径的表示方法,如果执行起来有错误,就多看看启动时,在调试窗口打印的记录来调整修改正确。


最终我们的配置如下,主要注意下红色框框内的参数:


接下来的配置就是我们在终端测试时输入过的指令:

 

3.2.3、配置task.json:

在launch.json中"preLaunchTask": "Jlink GDB Server",


中的Jlink GDB Server语句就是我们在task中设置的,具体如下:


其中的MakeAndStartJlink.cmd如下:

进行编译和启动JlinkGDBServerCL.exe

其中JlinkGDBServerCL.exe是cmd界面,而不是图形界面。


其中task中注意下下面的配置:

这里是一个终端窗口的配置,如果是share会出现终端重用的错误。

3.2.4、开始调试:

我们可以先在某个地方打个断点。


再点击 运行->开始调试

可以单步调试一下


我们可以简单地看到局部变量,全局变量,堆栈,断点,以及其他的一些调试信息

 

以上就是文档的全部内容,参考的文档有:

使用VSCode和VS2017编译调试STM32程序

https://www.cnblogs.com/WeyneChen/p/8379214.html

STM32高级开发(18)-使用VS Code搭建STM32开发环境

http://www.javashuo.com/article/p-pnkjxrfn-eq.html