VS Code用于单片机开发及其AI编程
1引言和背景
单片机开发IDE环境如KeilMDK/IAR等,虽然操作简单,方便调试,但代码编辑风格很老套,关键Lince是收费昂贵。如今流行的vscode编辑器免费且相当轻量级,用来代码开发体验很不错,看着都舒服。Clion IDE体验也很好,但它也不免费且体积较大,如今免费的可以使用的软件:
(1) cubeIDE:
Stm32cubeIDE是ST公司自带的免费软件,生成工程模板和配置方便,不需要搭建复杂的环境,但自动补全等功能和界面不友好,不方便代码编辑,效率较低。
(2) VSCode:
. Visual Studio Code(简称VSCode)是由微软开发的一款免费且开源的源代码编辑器,支持跨平台运行,包括Windows、Linux和macOS。VSCode以其轻量级、高性能和丰富的扩展生态系统而受到开发者的喜爱。
. VSCode的主要功能包括语法高亮、代码自动补全(也称为IntelliSense)、代码重构和查看代码定义。它还内置命令行工具和Git版本控制系统,允许用户个性化设置,更改主题和键盘快捷方式。通过内置的扩展程序商店,用户可以安装各种插件来扩展软件功能,支持多种编程语言,包括JavaScript、TypeScript、CSS和HTML,还可以通过安装特定插件支持其他语言,如C/C++、Java和Go。
2 软件安装
2.1 安装VS code
下载网站:https://code.visualstudio.com/download
User Installer版:会安装在当前计算机帐户目录,意味着如果使用另一个帐号登陆计算机将无法使用别人安装的vscode。
System Installer版:安装在非用户目录,例如C盘根目录,任何帐户都可以使用。(建议使用此版本)
2.2 安装VS code插件
(1)语言:安装语言在左边的工具栏点击扩展(Ctrl + Shift + X),搜索框中搜索“Chinese”,选择第一个“中文(简体)”,点击“安装”,出现需要重启软件界面,重启软件后即为中文。
(2)C/C++扩展,支持该语言的开发,代码编辑,规则检查等。
(3)可能VS code会有一些提示,安装下c/c++ extensinon pack插件
(4)Contex-debug 调试功能,起到单步调试,查看变量等功能。
3 VS code单片机项目创建、编译、调试
3.1 使用EIDE老项目Keil工程 如何导入,编译,调试
(1)输入EIDE安装Embedded IDE:一款适用于8051/STM8/Cortex-M/RSCv的单片机开发环境,在 vscode上提供8051,Cortex-M系列,RISC-V-项目的开发编译烧录等功能。
(2)安装实用工具链:Cppcheck,GNU开源的编译,Jlink.
(3)选择 操作->导入项目->选择(MDK arm):
(4)选择自己项目的keil工程(Doc.uvprojx需要解密,否则无法导入)
(5)出现如下界面选择NO(让keil项目和vscode工程共存一个目录,代码在资源管理里面才方便查看).
(6)选择VS Code工程的存放路径(keil工程的上级目录如下图)
(7)项目导入完毕,点继续立即切换项目。
(8)项目已经导入见如下的工作区
(9)构建配置选择gcc (GNU ARM embedded Toolchain)
(10)选择链接脚本路径:STM32F407VETx_FLASH.ld(STM32CUBEMX生成,放到vscode工程的根目录); 选择芯片名称:自己目标板的芯片
上面STM32cubeMX生成的xxxxx.s启动文件,替换掉MDK-ARM下面的.s文件。
(11)项目有带FreeRTos用keil生成源码文件(GCC),项目属性里面增加源码和头文件:
User\bd_work_middle\FreeRTOS\Source\include
\User\bd_work_middle\FreeRTOS\Source\portable\GCC\ARM_CM4F
使用STM32cubeMX生成的替换掉keil工程的FreeRTos目录。
(12)编译源码:
(13)烧录软件:
(14)在线调试:
(15)VSCode提供了“inline values”设置,自动增加灰色显示的变量值,但为了速度,默认并没有开启,我们只需修改配置即可开启这个功能。
(16)发现烧录的hex文件比较大,如下方式可以优化空间大小。
(18)构建配置”硬件浮点”选项选择”single”,构建器选项的全局选项中float ABI选项.
–soft"选项:表明不使用FPU硬件,而是使用GCC的整数算术运算来模拟浮点运算。
–"softfp"选项:表明要使用FPU硬件来做浮点运算,只是,函数的参数传递到整数寄存器(r0-r3)中,然后再传递到FPU中。
–"hard"选项:表明要使用FPU硬件来做浮点运算,并且,函数的参数直接传递到FPU的寄存器(s0、d0)中。
(软浮点是通过浮点库去实现浮点运算的,效率低;硬浮点是通过浮点运算单元(FPU)来完成的,效率高).
(17)如果项目中含有UBOOT启动,APP的启动放在了其他FLASH空间,RAM空间,堆栈大小修改文件如下:
(18)例超声bootloaer的代码对_estack的指针地址有如下的限制,由于卖出去的机器不能更改uboot,只能升级APP. (17)楼的配置_estack = ORIGIN(RAM) + LENGTH(RAM),_estack这个指传下来后会0x20020000&0x2FFE0000并不等于0x20000000,以下条件不满足,不能跳转,导致APP不能跑起来。可以降低LENGTH为127K,满足条件,能够正常的jump跑APP.
3.2 使用EIDE新的项目 如何搭建环境,编译,调试
(1) VScode新建项目(先需要装edide插件,安装实用工具链,参考3.1节安装)
EIDE插件—> 新建项目—> 空项目----> Cortex-M项目—> 输入工程名—> 选择保存位置
选择VScode项目文件夹:
(2)用STM32MUX配置工程的CLK,GPIO,I2C, UART,SPI等总线,如下生成makefile工程代码:
(3)加载项目资源。
EIDE插件—> 项目资源—>普通文件夹—>选中STM32cubeMX生成代码文件夹
(4)makefile工程的startup_stm32f407xx.s移动到Core目录下
(4)打开stm32cubemx 生成的makefile,在EIDE如下的界面配置项目属性. 包含的目录头文件,预处理定义,去掉-D -I前缀。
(5)自定义的代码.c文件和.h头文件按照(3)(4)步骤操作即可。
(6)安装实用工具链:Cppcheck,GNU开源的编译,Jlink.
(7)选择链接脚本路径:STM32F407VETx_FLASH.ld(STM32CUBEMX生); 选择芯片名称:自己目标板的芯片
(8) 编译下载,调试参考(3.1节)相关章节,方法一样。
3.3 使用GCC mk 编译/烧录/调试MCU工程(不需要插件EIDE)
(1)需要安装的软件(这些软件以压缩包提供)和环境变量,如下示范设置环境变量:
. 安装Arm交叉开发编译器gcc-arm-none-eabi,只需要解压文件,并设置环境变量。
. 安装OpenOCD(open onchip debugger)下载和调试依赖于它,只需要解压文件设置环境变量。
. 安装make,因为使用makefile.并设置环境变量
. 安装STM32CubeMX用来生成makefile和相关代码。
(2)打开终端,查看是否安装成功
(3)Stm32MUX生成代码,工具链IDE选择Makefile.
(3)上面Stm32MUX创建的工程文件目录工程文件右键,选择使用VS CODE打开软件代码:
出现对话框(点信任附件的的所有文件的作者,点是,我信任此作者)
(4)左侧就是我们的工程文件列表了,随便打开一个.c文件
(5)把压缩包build_down_script.tar提供的tasks.json,launch.json(分别为编译/下载和Debug调试的脚本)放到MCU的工程目录文件夹.vscode下面,如下的步骤脚本、下载,调试工具基与openocd来实现的,也可以基与jlink的实现方式。
1)编译代码:选择 终端->运行任务->编译代码
编译成功提示
2)烧录固件:终端->运行任务->烧录固件
–OpenOcd的连接方式脚本如下(压缩包build_down_script.tar/tasks.json)
–Jlink连接方式:(压缩包build_down_script.tar/tasks.json脚本和jlink_commands.jlink)
3)点击烧录的时候发现不能识别到Jlink:(如果不使用OpenOcd的方式,使用传统的jlink驱动连接调试,忽悠此节)
Warn : Failed to open device: LIBUSB_ERROR_NOT_SUPPORTED.
Info : No device selected, using first device.
Error: No J-Link device found.
因为Keil和JFlash的驱动程序与openOCD冲突,openOCD识别不了JLink,因此重装一下。这里用Zadig去重新安装JLink的驱动。
–安装zadig(提供的压缩包里有该软件)选择option-> List All Devices
–然后选择J-LINK,重新安装USB驱动程序,安装后通用串行总线设备显示:J-Link
–我们手头上的MCU Jlink是swd接口,需要将openOCD的jlink.cfg修改,指定接口类型为swd。这里直接复制一份,然后修改jlink-swd.cfg(内容如下).tasks.json已经指定为该cfg:
adapter driver jlink
transport select swd //增加内容,修改为 swd.
–再次 终端->运行任务->烧录固件,烧录成功提示
- Debug在线调试
点击运行->启动调试;或者左侧的绿色箭头按钮或者F5,稍等片刻寄了进入调试,如下是调试运行的脚本
–OpenOcd的连接方式脚本如下(压缩包build_down_script.tar/launch.json)):
–Jlink的连接方式脚本如下:(脚本见压缩包build_down_script.tar/launch.json)
(5)调试界面窗口:左侧窗口中可以查看寄存器、本地变更、调用栈,可在左侧栏WATCH中增加全局变量查看。窗口上方有调试按钮方便调试操作,按钮包含运行、单步、跳入、跳出、复位、停止。也可从菜单Run中点击相应菜单项或者用快捷键F5、F10、F11、shift+F11、ctrl+shift+F5、shift+F5。在源代码窗口左侧行号上点击可直接增加断点,也可在左侧栏BREAKPOINTS栏中修改。
(5)上面讲解的只是一个STM32MUX生成的代码。编译和调试的过程。如果自定义代码需要在makefile里面增加代码.c和头文件.h包含进来。
4 VS code添加插件实现AI编程功能,提高工作效率(用好一款)
4.1 插件Tabnine
Tabnine主要是根据使用者本地已有的代码内容,和云上的一些智能策略,预测和推断,在编码时候进行一些提示,智能补全。用户可以根据实际情况选择推荐的编码,按Tab键就是快捷采用第一个推荐条目,也可以选择其他条目,或者ESC不采用推荐的编码。
4.2 插件CodeGeeX
CodeGeeX它能够帮助你编写代码、调试问题、创建文档,生成单元测试等
(1)在代码编辑窗口写一段英文,中文敲击回车后插件得到的函数。
(2)敲击命令/comment为选中的代码添加注释。
(3)敲击命令/explain 解释选择代码,不选中内容则默认解释当前整个文件代码。
(3)敲击命令/fixbug 修复选中代码的bug.
4.3 插件 Fitten Code
4.4 插件GitHub Copilot(付费,功能更丰富)
Copilot 是一款由 GitHub 和 OpenAI 共同开发的编程工具,它基于人工智能技术,旨在帮助开发人员提高编码效率。Copilot 结合了 GitHub 的代码存储库和开源社区的力量,以及 OpenAI 的自然语言处理和机器学习能力,为开发人员提供智能化的代码建议和生成功能。
Copilot 使用了一种被称为 GPT(生成式预训练)的技术,该技术是由 OpenAI 开发的一种语言模型。GPT可以根据输入的上下文和提示来生成连贯的文本。在 Copilot 中,这一技术被用于生成代码片段,它可以自动完成代码、提供函数和类的建议、生成注释和文档等。
.如下在VS Code 左侧栏出现聊天图标,点击进入对话框,可进行对话功能编写代码,优化代码,语法纠错和风格建议,提供文档和资源链接等。
4.5 AI编程更多精彩的内容后续期待大家补充…