云途车规MCU VSCode IDE工程使用教程

电子说

1.2w人已加入

描述

作者按:随着越来越多云途车规MCU芯片型号的量产,越来越多的客户开始使用云途的车规MCU应用软件开发工具链,其中基于CMake + ninja + GNU gcc toolchain的VSCode IDE尤为受到大家的欢迎,但是对于很多习惯了传统IDE工程师来说,使用VSCode IDE难免会遇到问题,因此,我希望写一系列相关的使用指南,通过自己实际使用中遇到的问题的解决方案为例进行介绍,希望能够帮助大家快速上手。

如何使用Segger Ozone调试GCC/Keil/IAR编译工程?

在电脑本地将云途车规MCU的应用工程通过VSCode IDE(GCC/KEIL/IAR + CMake + Ninja)或者Keil IDE及IAR IDE进行编译,生成二进制可执行文件:

VSCode IDE(GCC + CMake + Ninja)应用工程:<project_name>.elf

VSCode IDE(KEIL + CMake + Ninja)或者Keil IDE应用工程:<project_name>.axf

VSCode IDE(/IAR + CMake + Ninja)或者IAR IDE应用工程:<project_name>.out

YCT中配置生成VSCode IDE应用工程方法如下:

IDE

IDE

IDE

IDE

①下载安装SEGGER Ozone调试软件

 

https://www.segger.com/products/development-tools/ozone-j-link-debugger/

 

选择一个匹配自己电脑操作系统的稳定的版本进行下载即可:

 

https://www.segger.com/downloads/jlink/#Ozone

 

IDE

下载到本地后,直接双击可执行exe进行傻瓜式安装即可,此处不赘述。

Tips:如果在Ozone安装之前JLINK的驱动已经安装好,则需要使用JLINK的DLL updater更新一下JLINK驱动:

IDE

IDE

② 打开Ozone,选择“Create New Project”打开新建工程向导

IDE

选择目标MCU型号(Device)、内核寄存器集(Register Set)和外设寄存器映射文件(Peripherals(Optional)), -> "Next":

IDE

选择目标器件时,通过在“Device”列输入“YTM”可进行过滤筛选快速查找到云途车规MCU型号,但是其他是必须提前安装好云途车规MCU的JLINK补丁:

IDE

选择工程目录下“.vscode”的“chip.svd”文件(注意:仅在选择VSCode作为IDE时YCT才会在“.vscode”目录下生成该文件)作为调试时MCU外设寄存器映射文件:

IDE

选择JLINK调试器连接方式为使用“SWD”接口,“4MHz”通信速率,“USB”接口 ->"Next":

IDE

选择要调试工程的可选elf文件,IAR为后缀.out的文件 -> "Next":

IDE

保持默认配置 -> "Finish"即可完成Ozone调试工程创建:

IDE

选择右上角的“Download & Reset Program”进行程序下载连接:

IDE

Ozone调试概览如下,更多细节请参考其用户手册或者帮助文档:

IDE

如何在添加用户自己的代码到CMake编译目录?

Case 1:用户自己添加的应用代码文件较少,直接添加到“app”目录即可

这些情况,直接将添加的.c和.h文件添加到YCT生成VSCode IDE应用工程默认生成的“app”文件夹目录即可:

IDE

Case 2:用户自己添加的应用代码文件比较多,需要添加多个文件夹,则需要修改CMakelist.txt

在YCT创建VSCode IDE应用工程根目录下有一个CMakeLists.txt,其中存放了CMake编译的规则,找到保留关键词“# USER CODE BEGIN add_executable”和“# USER CODE END add_executable”,将默认添加app目录的CMake脚本拷贝粘贴到其间,以防止重新生成工程时被覆盖。然后修改添加编译目录,比如下图中的应用工程,添加了“General_CryptoAlgo”,“MIRACL”和“SMx”3个用户代码目录及其子目录到CMake的elf编译目录中:

IDE

在target_include_directories(${project_elf} )行添加用户目录,可添加多个,以空格隔开即可;

在file(GLOB dir_sources "/*.c" "/*.c")行添加想要编译源代码文件,其中*.c为任意C源代码,*.cpp为任意C++源代码, *.S/*.s为任意汇编源代码(注意CMake区分文件名后缀的大小写,必须与实际源代码文件名匹配)

接下的的if语句判断源文件“dir_sources ”是否为空,不为空,即存在源代码需要编译,则调用后续foreach语句遍历所有源文件进行编译。

如何编译生成静态库?

以如下工程为例,将其中的MIRACL目录下的所有C源代码(将其添加到YCT生成的SDK/MCAL VSCode IDE应用工程中)编译成一个静态库(比如libYTM32B1M_MIRACL.a)供其他应用工程调用:

IDE

具体步骤如下:

在应用工程根目录下的CMakelist.txt中,使用set()函数创建一个CMake的编译目标miracl_lib,并使用add_library()函数添加为静态库:

 

set(miracl_lib YTM32B1M_MIRACL)
add_library(${miracl_lib})

 

Tips:推荐将其放在“# USER CODE BEGIN include”和“# USER CODE END include”之间,以防止YCT重新生成SDK/MCAL驱动配置时被覆盖:

IDE

将要链接到静态库中的C源文件和头文件包含目录添加到上面创建的编译目标miracl_lib,具体脚本如下:

 

#add "MIRACL/src as include path  for static library
target_include_directories(${miracl_lib} PRIVATE MIRACL/src MIRACL/inc)
#add all source files in SMx folder 
file(GLOB dir_sources "MIRACL/src/*.c")
if(dir_sources)
    foreach(src ${dir_sources})
        target_sources(${miracl_lib} PRIVATE ${src})
    endforeach()
endif()

 

Tips:推荐将其放在“USER CODE BEGIN add_executable”和“# USER CODE END add_executable”之间,以防止YCT重新生成SDK/MCAL驱动配置时被覆盖:

IDE

保存以上修改后的CMakelist.txt,然后打开VSCode的CMake Tools扩展插件,就能够发现上面创建的静态库编译目标了,最终生成的静态库为libYTM32B1M_MIRACL.a,自动添加了前缀“lib”和后缀“.a”:

IDE

Tips:如果没有安装CMake Tools扩展插件,大家可以通过VSCode的Extension(Ctrl + Shift + X), 搜索“CMake Tools”在线安装:

IDE

在CMake Tool中选中静态库编译目标,点击右侧的编译(Build)图标,即可开始静态库的编译,

IDE

VSCode IDE的“OUTPUT”窗口输出静态库编译链接过程log信息如下:

IDE

最终生成的静态库位于工程目录下的“build”文件夹下:

IDE

Tips:若静态库源代码有修改,需要重新编译,则需要收到删除“build”目录,否则ninja将输出“ no work to do”:

IDE

如何使用静态库?

接下来,介绍如何在YCT生成的SDK/MCAL VSCode IDE应用工程中调用以上生成的静态库,具体步骤如下:

使用YCT配置创建一个与上面静态库编译目标MCU相同内核(比如YTM32B1Mx系列使用的CM33内核,则编译的静态库可以通用)的云途车规MCU SDK/MCAL VSCode IDE应用工程;

将需要使用的静态库文件和相应的头文件添加到VSCode IDE应用工程:

IDE

在工程CMakelist.txt文件中,使用target_include_directories() 函数将静态库文件使用的头文件路径添加到应用工程elf编译目标包含路径:

 

target_include_directories(${project_elf} PRIVATE MIRACL/inc  MIRACL)

 

Tips:推荐将其放在“USER CODE BEGIN add_executable”和“# USER CODE END add_executable”之间,以防止YCT重新生成SDK/MCAL驱动配置时被覆盖:

IDE

在工程CMakelist.txt文件中,使用target_link_libraries() 函数将用户静态库添加到应用工程elf链接库:

 

target_link_libraries(${project_elf} libYTM32B1M_MIRACL.a -L${CMAKE_SOURCE_DIR}/MIRACL)

 

Tips:以上函数中,需要使用完整的静态库文件名“libYTM32B1M_MIRACL.a”,并通过“-L${CMAKE_SOURCE_DIR}/MIRACL”指定正确的搜索路径,否则链接生成工程elf时会报找不到添加的静态库文件的错误;

Tips:推荐将其放在“USER CODE BEGIN target_link_libraries”和“# USER CODE END target_link_libraries”之间,以防止YCT重新生成SDK/MCAL驱动配置时被覆盖:

IDE

在应用工程中,包含所需静态库接口函数的头文件,然后调用库函数即可。

以上就是今天先跟大家分享的内容,希望对大家有啥帮助和启发。

若大家在实际工作中遇到了云途车规MCU VSCode IDE工程使用和配置相关的问题,也欢迎留言指出,我将在这一系列文章的下篇文章中为大家解答。

审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分