引言
在MCU的嵌入式軟件開(kāi)發(fā)領(lǐng)域,過(guò)去很長(zhǎng)一段時(shí)間都是以基于Eclipse框架開(kāi)發(fā)的IDE為主,典型此類IDE包括:NXP的CodeWarrior 10.x/11.xIDE, S32DS IDE, MCUXpresso IDE, TI的CCStudio IDE,瑞薩的e2 studio (Eclipse) IDE和ST的STM32CubeIDE,SPC5-StudioIDE等,但是近些年,微軟推出的開(kāi)源Visual Studio Code(V簡(jiǎn)稱SCode) IDE框架發(fā)展十分迅猛,根據(jù)權(quán)威數(shù)據(jù),VScode在今年已經(jīng)超過(guò)Eclipse成為全球第二大IDE。
VScode vs. Eclipse IDE
1.1 VSCode IDE架構(gòu)
VSCode是基于Electron框架構(gòu)建的,使用主進(jìn)程和渲染進(jìn)程來(lái)管理窗口和用戶界面,支持通過(guò)擴(kuò)展來(lái)增強(qiáng)功能,并使用Monaco編輯器提供強(qiáng)大的代碼編輯和調(diào)試功能。它的架構(gòu)主要包括以下幾個(gè)主要組件:
Electron:VSCode使用Electron作為框架,它是一個(gè)基于Web技術(shù)的桌面應(yīng)用程序開(kāi)發(fā)框架,可以將Web技術(shù)(HTML、CSS和JavaScript)打包成一個(gè)本地應(yīng)用程序。
主進(jìn)程(Main Process):主進(jìn)程是VSCode的核心組件,負(fù)責(zé)管理所有的窗口和應(yīng)用程序的生命周期。它使用Electron提供的API來(lái)創(chuàng)建和管理窗口,處理菜單、對(duì)話框等系統(tǒng)級(jí)別的操作。
渲染進(jìn)程(Renderer Process):渲染進(jìn)程是VSCode的界面組件,負(fù)責(zé)顯示和處理用戶界面。每個(gè)窗口都有一個(gè)獨(dú)立的渲染進(jìn)程,它使用Electron的BrowserWindow對(duì)象來(lái)創(chuàng)建和管理窗口。渲染進(jìn)程使用HTML、CSS和JavaScript來(lái)構(gòu)建用戶界面,并通過(guò)與主進(jìn)程通信來(lái)執(zhí)行各種操作。
擴(kuò)展(Extensions):VSCode支持通過(guò)擴(kuò)展來(lái)增強(qiáng)其功能。擴(kuò)展是使用JavaScript或TypeScript編寫的插件,可以添加新的編輯器功能、語(yǔ)言支持、調(diào)試器等。擴(kuò)展可以在VSCode的運(yùn)行時(shí)環(huán)境中與主進(jìn)程和渲染進(jìn)程進(jìn)行通信,以實(shí)現(xiàn)各種功能。
編輯器(Editor):編輯器是VSCode的核心功能之一,它提供了強(qiáng)大的代碼編輯和調(diào)試功能。編輯器使用Monaco編輯器作為其基礎(chǔ),它是一個(gè)開(kāi)源的Web代碼編輯器,具有語(yǔ)法高亮、智能代碼補(bǔ)全、代碼導(dǎo)航、代碼重構(gòu)等功能。
1.2 VSCode相對(duì)于Eclipse的優(yōu)勢(shì)
VSCode相對(duì)于Eclipse的優(yōu)勢(shì)包括:
輕量級(jí):VSCode是一個(gè)輕量級(jí)的編輯器,啟動(dòng)速度快,占用系統(tǒng)資源少,適合于低配置的電腦或者開(kāi)發(fā)環(huán)境。
擴(kuò)展性強(qiáng):VSCode具有豐富的插件生態(tài)系統(tǒng),可以通過(guò)安裝各種插件來(lái)擴(kuò)展其功能,滿足不同開(kāi)發(fā)需求。
跨平臺(tái)支持:VSCode支持Windows、macOS和Linux等多個(gè)操作系統(tǒng),開(kāi)發(fā)者可以在不同的平臺(tái)上使用相同的編輯器進(jìn)行開(kāi)發(fā)。
內(nèi)置終端:VSCode內(nèi)置了終端,可以在編輯器中直接執(zhí)行命令,無(wú)需額外打開(kāi)終端窗口,提高開(kāi)發(fā)效率。
強(qiáng)大的調(diào)試功能:VSCode提供了強(qiáng)大的調(diào)試功能,支持多種編程語(yǔ)言的調(diào)試,可以方便地設(shè)置斷點(diǎn)、查看變量值等。
Git集成:VSCode內(nèi)置了Git集成,可以方便地進(jìn)行版本控制操作,如提交、拉取、推送等。
用戶友好的界面:VSCode的界面簡(jiǎn)潔、直觀,易于上手和使用,同時(shí)也支持自定義布局和主題,可以根據(jù)個(gè)人喜好進(jìn)行配置。
快捷鍵和命令:VSCode提供了豐富的快捷鍵和命令,可以快速執(zhí)行各種操作,提高開(kāi)發(fā)效率。
總的來(lái)說(shuō),VSCode相對(duì)于Eclipse更加輕量、靈活、易用,并且具有更強(qiáng)大的擴(kuò)展性和調(diào)試功能,適合于各種類型的開(kāi)發(fā)。目前越來(lái)越多的MCU嵌入式軟件開(kāi)發(fā)都轉(zhuǎn)向支持VSCode IDE,包括傳統(tǒng)的8051內(nèi)核MCU,基于ARM的STM32等,此外IAR和Keil等傳統(tǒng)toolchain也提供了VSCode的擴(kuò)展支持。
1.3 VSCode IDE下載和安裝
大家可以通過(guò)以下鏈接,免費(fèi)下載安裝最新版本的VSCode: https://code.visualstudio.com/download Tips:VSCode提供了三大主流OS--Linux,Windows和macOS的支持,這里我們以Windows為例進(jìn)行介紹。推薦大家下載使用系統(tǒng)(System Installer)穩(wěn)定版本(stable)的VScode IDE。 VSCode的User Installer和System Installer是安裝VSCode時(shí)可選擇的兩種安裝方式,它們的主要差異如下:
安裝位置:User Installer將VSCode安裝在用戶的個(gè)人目錄下,而System Installer將VSCode安裝在系統(tǒng)的公共目錄下。User Installer的安裝位置通常是在用戶的主目錄下的一個(gè)隱藏文件夾中,而System Installer的安裝位置通常是在系統(tǒng)的應(yīng)用程序目錄中。
權(quán)限:由于安裝位置的不同,User Installer只需要用戶的權(quán)限來(lái)安裝和更新VSCode,而System Installer可能需要管理員權(quán)限來(lái)進(jìn)行安裝和更新。
更新:User Installer會(huì)自動(dòng)檢測(cè)和更新VSCode,而System Installer通常需要管理員權(quán)限來(lái)進(jìn)行更新。
多用戶支持:User Installer適用于單用戶環(huán)境,每個(gè)用戶可以有自己的VSCode安裝。而System Installer適用于多用戶環(huán)境,所有用戶共享同一個(gè)VSCode安裝。
簡(jiǎn)而言之,User Installer適用于個(gè)人開(kāi)發(fā)環(huán)境,安裝在用戶的個(gè)人目錄下,而System Installer適用于多用戶環(huán)境或者需要系統(tǒng)范圍內(nèi)共享的情況,安裝在系統(tǒng)的公共目錄下。選擇哪種安裝方式取決于具體的使用場(chǎng)景和需求。 安裝包下載到本地后,雙擊運(yùn)行即可開(kāi)始安裝。安裝步驟十分簡(jiǎn)單,此處不展開(kāi),大家可以參考官方文檔。
VSCode IDE及必要擴(kuò)展安裝
基于VSCode IDE搭建云途車規(guī)MCU的整體思路如下: 使用VScode作為IDE,調(diào)用Ninja和CMake構(gòu)建編譯環(huán)境,調(diào)用GNU工具鏈進(jìn)行工程代碼的編譯和鏈接生成可執(zhí)行文件elf和Flash下載編程文件-bin/hex/s19, 通過(guò)GNU的GDBSever或者第三方調(diào)試軟件(比如Segger的Ozone, 勞德巴赫和i-System等)完成應(yīng)用工程編譯結(jié)果的下載和調(diào)試。
VSCODE: https://code.visualstudio.com/
CMAKE: https://cmake.org/download/ (安裝目錄添加到系統(tǒng)PATH環(huán)境變量里)
Ninja: https://ninja-build.org/ (安裝目錄添加到系統(tǒng)PATH環(huán)境變量里)
GNU for ARM Cortex-M:https://developer.arm.com/downloads/-/gnu-rm(安裝目錄添加到系統(tǒng)PATH環(huán)境變量里)
在Windows命令行窗口/VSCode terminal中輸入查看輸出以確認(rèn)以上CMake和Ninja工具是否安裝正確:
cmake --version ninja --version arm-none-eabi-gcc --version若輸入以上命令后輸出如下,則安裝OK:
Tips:若無(wú)法提示的識(shí)別的命令,則有可能上面的環(huán)境變量設(shè)置對(duì)當(dāng)前Windows命令行窗口/VSCode terminal沒(méi)有起作用,將Windows命令行窗口/VSCode IDE 關(guān)閉重啟再試。
Tips:Ninja和CMake是與軟件構(gòu)建相關(guān)的工具,其功能如下:
Ninja:Ninja是一個(gè)快速、輕量級(jí)的構(gòu)建系統(tǒng)工具。它使用簡(jiǎn)單的配置文件來(lái)描述構(gòu)建過(guò)程,并且能夠高效地執(zhí)行并行構(gòu)建。Ninja的設(shè)計(jì)目標(biāo)是提供一種快速的構(gòu)建工具,尤其適用于大型項(xiàng)目和復(fù)雜的構(gòu)建過(guò)程。Ninja通常與其他構(gòu)建工具(如CMake)配合使用。
CMake:CMake是一個(gè)跨平臺(tái)的構(gòu)建工具,用于生成各種不同構(gòu)建系統(tǒng)(如Makefile、Ninja等)所需的構(gòu)建文件。CMake通過(guò)提供一個(gè)簡(jiǎn)單的跨平臺(tái)配置語(yǔ)言,使得開(kāi)發(fā)者可以輕松地定義項(xiàng)目的構(gòu)建規(guī)則。CMake可以自動(dòng)生成適用于不同操作系統(tǒng)和編譯器的構(gòu)建文件,簡(jiǎn)化了跨平臺(tái)項(xiàng)目的構(gòu)建過(guò)程。
CMake用于定義項(xiàng)目的構(gòu)建規(guī)則和依賴關(guān)系,并生成相應(yīng)的構(gòu)建文件(如Makefile或Ninja文件)。然后,使用Ninja等構(gòu)建工具來(lái)實(shí)際執(zhí)行構(gòu)建過(guò)程,編譯源代碼、鏈接庫(kù)文件等。CMake和Ninja的配合使用可以提供靈活、高效的項(xiàng)目構(gòu)建解決方案,并且支持跨平臺(tái)開(kāi)發(fā)。 在云途配置工具(YCT)的安裝包中已經(jīng)包含了Ninjia、CMake和GNU for ARM toolchain,大家參考之前的文章《云途配置工具(YCT)快速上手指南(QSG)》(點(diǎn)擊文章標(biāo)題即可直接跳轉(zhuǎn)閱讀)安裝YCT時(shí)選擇一起安裝,相應(yīng)的工具鏈的安裝路徑也會(huì)自動(dòng)設(shè)置到Windows的環(huán)境變量中,從而方便VSCode調(diào)用。 在完成YCT和VScode安裝之后,為了更好的開(kāi)發(fā)云途車規(guī)MCU的應(yīng)用軟件,還需要安裝以下VScode擴(kuò)展(extension):
2.1 C/C++語(yǔ)言支持?jǐn)U展插件--C/C++ Extension Pack
在VSCode的擴(kuò)展插件(extension,快捷鍵Ctrl + Shift + P打開(kāi)),搜索C/C++在線安裝C/C++ Extension Pack插件:
2.2 CMake及CMake Tools支持?jǐn)U展插件
在VSCode的擴(kuò)展插件(extension,快捷鍵Ctrl + Shift + P打開(kāi)),搜索CMake在線安裝CMake和CMake Tools插件:
2.3 ARM Cortex調(diào)試擴(kuò)展插件--Cortex-Debug
在VSCode的擴(kuò)展插件(extension,快捷鍵Ctrl + Shift + P打開(kāi)),搜索Cortex-Debug在線安裝調(diào)試插件:
YCT創(chuàng)建基于云途SDK/MCAL的車規(guī)MCU VSCode應(yīng)用工程
3.1 基于YCT創(chuàng)建云途車規(guī)MCU的SDK/MCAL的配置工程
3.1.1 通過(guò)MCU選擇界面創(chuàng)建一個(gè)新的SDK/MCAL配置YCT工程
通過(guò)New Project -> Start My project from MCU -> "ACCESS TOMCUSELECTOR"打開(kāi)MCU選擇界面,
可以查看所有支持的MCU芯片型號(hào)(part number)、封裝(Package)、存儲(chǔ)器大小、I/O及外設(shè)資源和工作主頻等信息,選擇使用的SDK/MCAL版本等。
Tips:由于YCT支持的MCU型號(hào)比較多,可以通過(guò)Family過(guò)濾來(lái)篩選,從而只顯示勾選的MCU family,快速找到所使用的的目標(biāo)MCU型號(hào)。
3.1.2 通過(guò)MCAL樣例工程選擇界面創(chuàng)建一個(gè)MCAL配置YCT工程
通過(guò)New Project -> Start McalFromExample,Easy to Start-> "Choose Mcal Example"打開(kāi)MCAL樣例工程選擇界面:
在MCAL樣例工程選擇界,選擇想要評(píng)估的MCU系列的MCAL版本,找到相應(yīng)的MCAL模塊樣例工程,選擇保存路徑,最后點(diǎn)擊“Create”,即可打開(kāi)該MCAL樣例工程:
Tips:通過(guò)這種方式打開(kāi)的MCAL樣例工程是將MCAL安裝目錄下的樣例工程拷貝到用戶指定目錄的,可以任意修改,不必影響原有樣例工程。
3.2 YCT配置工程的工程配置(Project Setting)
通過(guò)以上3.1.1小節(jié)介紹的方法和步驟新創(chuàng)建的云途SDK和MCAL 配置YCT工程,將在LOG的Porblem窗口提示項(xiàng)目管理(PM--Project Manager)錯(cuò)誤:
此時(shí)需要通過(guò)YCT主頁(yè)界面的“Settings”,打開(kāi)YCT工程的工程設(shè)置(Project Setting)界面進(jìn)行工程名、保存地址,使用工具鏈及調(diào)試等配置:
工程配置界面用于配置整個(gè)工程的基本屬性,目前有以下配置。
3.2.1 Project配置
Project用于配置工程的基本信息,包括:
A. 工程名(Project Name)和工程保存地址(Project Location)
Tips: 工程名一旦選擇好后,不能直接更改, 設(shè)置好以上配置后保存YCT工程將在選擇Project Location目錄下創(chuàng)建一個(gè)Project Name同名的文件夾保存相關(guān)工程信息。
B. 鏈接文件確認(rèn)(link file)
YCT工具會(huì)生成對(duì)應(yīng)的鏈接文件,當(dāng)然你也可以選擇自己鏈接文件的位置。建議直接用默認(rèn)的鏈接文件即可。 點(diǎn)擊最右邊的按鈕,會(huì)自動(dòng)填充默認(rèn)的鏈接文件。
C. IDE選擇(Toolchain/IDE)與Toolchain Path
YCT工程支持創(chuàng)建以下工具鏈的云途車規(guī)MCU SDK/MCAL應(yīng)用工程:
EWARM:IAR工程,工程屬性通過(guò)IAR IDE軟件界面配置;
KEIL:將創(chuàng)建ARM的Keil v5/MDK IDE工程,工程屬性通過(guò)Keil/MDK軟件界面配置;
CMake + VSCode(GCC): 使用CMake + GNU/GCC工具鏈的VSCode IDE工程,工程屬性通過(guò)YCT的CMake GCC界面或者CMake的CMakelist.txt配置;
CMake + VSCode(IAR): 使用CMake + GNU/GCC工具鏈的VSCode IDE工程,工程屬性通過(guò)CMake的CMakelist.txt配置;
CMake + VSCode(KEIL): 使用CMake + GNU/GCC工具鏈的VSCode IDE工程,工程屬性通過(guò)CMake的CMakelist.txt配置;
這些toolchain/IDE配置可以方便地通過(guò)Toolchain/IDE的下拉菜單選擇:
Tips: 默認(rèn)建議使用CMake+Vscode(GCC)的配置,更加高效和強(qiáng)大,本文介紹也以CMake+Vscode(GCC)為例進(jìn)行。 當(dāng)選擇CMake + Vscode(GCC/IAR/KEIL)的方式時(shí),用戶需要將相應(yīng)的工具鏈安裝路徑添加到操作系統(tǒng)的全局PATH變量或者手動(dòng)選擇 若已經(jīng)將工具鏈添加到PATH變量(通過(guò)YCT安裝包選擇默認(rèn)安裝),那么這里可以不用選擇。 ?
D. Debug in Vscode(VSCode Debug Settings)
若選擇CMake+Vscode(GCC)的作為Toolchain,用戶可以勾選“VSCodeDebugger”開(kāi)啟VSCODE 的Debug功能,目前只支持JLINK+VSCODE的方式,相關(guān)配置選項(xiàng)說(shuō)明如下:
Debugger: JLINK, 保持默認(rèn)即可;
Interface type:配置調(diào)試接口類型,推薦使用默認(rèn)單線調(diào)試“SWD”,當(dāng)然YTM32B1Mx系列車規(guī)MCU使用CM33內(nèi)核也是可以支持標(biāo)準(zhǔn)的邊界掃描JTAG接口的,只需要將此配置改為“JTAG”即可。
Tips:① YTM32B1LD/Ex系列車規(guī)MCU使用CM0+內(nèi)核,只支持SWD接口,此處不能設(shè)置為“JTAG”;② 云途MCAL中Port模塊默認(rèn)的調(diào)試接口功能復(fù)用也是使用SWD接口,若要使用JTAG接口,必須修改Port模塊配置,否則會(huì)出現(xiàn)調(diào)試連接問(wèn)題。
Entry point:進(jìn)入調(diào)試后默認(rèn)的斷點(diǎn),可以是任意有效的C/匯編函數(shù)名,比如應(yīng)用程序主函數(shù)main或者復(fù)位函數(shù)Reset_Handler,推薦使用默認(rèn)的main即可;
GDB Server path:設(shè)置JLINK GDB Server命令行(JlinkGDBServerCL.exe)的路徑,默認(rèn)為:C:Program Files (x86)SEGGERJLinkJLinkGDBServerCL.exe,若用戶自己電腦上JLINK的安裝目錄與此不同,則需要手動(dòng)設(shè)置一下。
Tips:可以通過(guò)全局搜索工具,比如everyting搜索“JLinkGDBServerCL.exe”確定:
SVD file path:設(shè)置調(diào)試時(shí)內(nèi)核和外設(shè)寄存器信息文件,保持默認(rèn)配置即可;
以上配置信息,將被生成保存到應(yīng)用工程的./vscode/launch.json配置文件中:
3.2.2 YCT代碼生成選項(xiàng)(Code Generate)配置
Code Generate用于控制YCT的代碼生成行為,主要配置選項(xiàng)包括:
Target Folder:YCT生成的配置代碼保存文件夾/目錄,默認(rèn)為“board”,將在生成SDK/MCAL應(yīng)用工程根目錄下創(chuàng)建一個(gè)名為“board”的文件夾用于保存所有的生成文件,包括.h/.c文件和鏈接文件:
Keep User Code When re-generating: 配置重新生成代碼時(shí)是否保存main.c中添加的用戶代碼,若勾選則添加在關(guān)鍵詞保護(hù)的指定區(qū)域中的用戶應(yīng)用代碼將不被覆蓋,推薦保持默認(rèn)勾選配置即可;
Generate board init function:配置是否生成系統(tǒng)和外設(shè)初始化函數(shù),推薦默認(rèn)的勾選配置,生成系統(tǒng)和外設(shè)的初始化調(diào)用API函數(shù);
Board function name:設(shè)置Board初始化函數(shù)名字,默認(rèn)為Board_Init,用戶可以設(shè)置為其他名字,推薦使用默認(rèn)配置即可。該函數(shù)將在生產(chǎn)的main()函數(shù)中調(diào)用,可將系統(tǒng)時(shí)鐘初始化、外設(shè)模塊初始化以及引腳初始化等API放到Board_Init()中,
Tips:用戶可以通過(guò)YCT的API界面圖形化添加SDK和MCAL的驅(qū)動(dòng)模塊初始化函數(shù):
3.2.3 工程屬性(CMake GCC)配置
若3.2.1小節(jié)的IDE配置選擇為“CMake+Vscode(GCC)”,則可以通過(guò)YCT提供的CMake GCC界面配置所使用的GNU GCC編譯器和鏈接器選項(xiàng),主要包括:
A. Target Config
Arm family: ARM內(nèi)核,根據(jù)新建yct工程時(shí)選擇的云途車規(guī)MCU型號(hào)自動(dòng)選擇,這里不可配置;
Library support:選擇使用的C語(yǔ)言庫(kù),包括GNU GCC的輕量版newlib_nano no I/O、newlib_nano Debugger Console和完整版newlib no I/O、newlib Debugger Console,用戶可根據(jù)自己應(yīng)用的實(shí)際需求來(lái)選擇:newlib_nano是newlib的一個(gè)變種,它進(jìn)一步減小了庫(kù)的大小,并提供了一些額外的優(yōu)化。newlib_nano通過(guò)去除一些不常用的功能和減小庫(kù)的大小來(lái)降低內(nèi)存占用和存儲(chǔ)需求。比如,newlib_nano庫(kù)不支持浮點(diǎn)數(shù)。
Float ABI:浮點(diǎn)數(shù)應(yīng)用二進(jìn)制接口標(biāo)準(zhǔn),支持純硬件FPU(FP(hard),使用硬件浮點(diǎn)數(shù)指令)、純軟件庫(kù)(Library(soft))和軟硬件混合(Library(softfp)),對(duì)于CM33內(nèi)核支持硬件FPU,推薦使用純硬件FPU(FP(hard))或者軟硬件混合(Library(softfp)),以減少代碼size,提高CPU的浮點(diǎn)數(shù)處理性能。
FPU Type:CM33內(nèi)核的FPU只支持單精度(Single-Point)浮點(diǎn)數(shù)指令:fpv4-sp-d16
B. Debugging Options
調(diào)試選項(xiàng)配置包括:
Debug Level:調(diào)試等級(jí)配置,-g/1/3,數(shù)字越大,包含的調(diào)試信息越多,推薦使用默認(rèn)配置即可。PS:若此選項(xiàng)配置為“None”,則生成的elf文件不包含任何調(diào)試信息,下載后將無(wú)法調(diào)試,包括斷點(diǎn)都不能打。
Debug format:生成elf文件包含的調(diào)試文件格式支持配置,用戶可根據(jù)實(shí)際需求進(jìn)行配置,一般情況推薦使用默認(rèn)配置即可。
Generate gcov information(-ftest-coverage -fprofile-arcs): 勾選將生成GNU的代碼測(cè)試覆蓋度和profile信息。
C. Compiler Options
GCC編譯的配置選項(xiàng)如下:
其中,需要關(guān)注的配置選項(xiàng)如下:
Optimization Level:優(yōu)化等級(jí)設(shè)置,-O0/1/2/s/fast,-O0就是沒(méi)有任何優(yōu)化,編譯的代碼size最大,-O1是比較推薦的優(yōu)化設(shè)置,-Os的優(yōu)化目標(biāo)是代碼大小size,編譯結(jié)果最小,但是運(yùn)行速度比較差,-Ofast優(yōu)化目標(biāo)為速度speed,運(yùn)行速度快,但是代碼size可能比較大,用戶可根據(jù)實(shí)際需求進(jìn)行配置,云途推薦使用-O1,因?yàn)樵仆維DK和MCAL都是基于-O1進(jìn)行測(cè)試驗(yàn)證的。
Function Sections(-ffunction-section):勾選將在工程編譯結(jié)果的map文件中生成應(yīng)用工程中所有函數(shù)的段(.text section)信息,推薦使用默認(rèn)勾選配置即可;
Data sections(-fdata-sections):勾選將在工程編譯結(jié)果的map文件中生成應(yīng)用工程中所數(shù)據(jù)的段(.data/.bss section)信息,推薦使用默認(rèn)勾選配置即可;
Other flags:用戶可在此輸入自定義的編譯選項(xiàng),比如添加一個(gè)全局有效的宏定義符號(hào)MCAL_ENABLE_USER_MODE_SUPPORT:
D. Link Options
Link Options可以用于配置應(yīng)用工程鏈接選項(xiàng),主要配置選項(xiàng)如下:
Remove unused sections(-Xlinker --gc-section):勾選此選項(xiàng)鏈接生成成的elf文件將刪除未使用的代碼段和數(shù)據(jù)段,從而減小代碼大小,且不影響應(yīng)用功能和程序運(yùn)行結(jié)果,因此推薦使用默認(rèn)使能選項(xiàng);
Printf removed sections(-Xlinker --printf-gc-section):勾選此選項(xiàng),則在鏈接過(guò)程中將在DE的輸出控制臺(tái)打印被刪除/移除的段信息;若有需要,可以勾選使能此選項(xiàng)。
Other flags:用戶可在此輸入自定義的鏈接配置選項(xiàng);
Tips:關(guān)于GNU GCC toolchain的編譯鏈接配置選項(xiàng)細(xì)節(jié),可以參考如下文章或者鏈接:
《S32DS GNU GCC編譯優(yōu)化選項(xiàng)與配置方法詳解及S32 SDK代碼編譯優(yōu)化選項(xiàng)設(shè)置建議》(點(diǎn)擊文章標(biāo)題即可直接跳轉(zhuǎn)閱讀);
GNU官網(wǎng)在線幫助手冊(cè):https://www.gnu.org/doc/doc.html
3.3 生成MCAL/SDK配置代碼及應(yīng)用工程
在完成以上工程配置之后,點(diǎn)擊“Ctrl+S”保存工程,則會(huì)在指定的工程目錄下創(chuàng)建一個(gè)工程名命名的yct文件,其中保存了當(dāng)前工程的所有配置信息:
然后,添加應(yīng)用所需的SDK或者M(jìn)CAL驅(qū)動(dòng)模塊,完成配置并解決/fix所有錯(cuò)誤之后(LOG界面中Problem的Errors為0),即可點(diǎn)擊“Generate”開(kāi)始配置代碼和應(yīng)用工程生成了:
在彈出的Generate Code窗口,可以預(yù)覽查看(View)配置結(jié)果生成代碼,點(diǎn)擊“Generate”即可開(kāi)始生成代碼:
完成配置代碼和應(yīng)用工程生成后,會(huì)彈窗提示是否打開(kāi)當(dāng)前工程?選擇“OK”,YCT就會(huì)自動(dòng)調(diào)用VScode IDE打開(kāi)當(dāng)前工程:
YCT生成的云途車規(guī)MCU MCAL應(yīng)用工程完整目錄如下:
調(diào)試云途車規(guī)MCU的VSCode應(yīng)用工程
默認(rèn)YCT配置生成的VSCode IDE應(yīng)用工程,在確保本文第2章節(jié)介紹的工具鏈軟件(CMake + Ninja + GCC for ARM)和VSCode擴(kuò)展插件安裝正確的情況下,是可以被成功編譯鏈接生成elf文件并下載調(diào)試的。
4.1 編譯應(yīng)用工程
打開(kāi)上文生成的VSCode IDE應(yīng)用工程,點(diǎn)擊下方的“Build”命令,在上方彈出的編譯工具鏈欄提示,選擇“[unspecfied] Unspecified(Let CMake guess what compiler and environment to use)”即可開(kāi)始工程編譯和鏈接:
整個(gè)編譯和鏈接過(guò)程會(huì)在VSCode IDE的OUTPUT窗口輸出提示信息,編譯完成后,在工程目錄下將生成一個(gè)“build”文件夾,用于存放編譯結(jié)果,比如map文件和elf文件:
?
Tips:安裝了CMake Tools VSCode擴(kuò)展并且應(yīng)用程序項(xiàng)目構(gòu)建完成,生成elf文件后,打開(kāi)CMake工具實(shí)用程序,用戶可以選擇不同的CMake目標(biāo)來(lái)生成所需的Flash編程文件和工程列表文件:
gembin-Utility:生成二進(jìn)制文件,僅包含以二進(jìn)制格式存儲(chǔ)的程序數(shù)據(jù),文件大小與Flash大小相同。
gemhex-Utility:生成Intel指定的十六進(jìn)制文件,包含程序數(shù)據(jù)和Flash地址,以人類可讀的ASCII文本格式表示。
gems19-Utility:生成Motorola指定的十六進(jìn)制文件,包含程序數(shù)據(jù)和Flash地址,以人類可讀的ASCII文本格式表示。
gemlist-Utility:生成列表文件,包含從elf文件中提取的所有匯編代碼和符號(hào)信息。對(duì)于調(diào)試和問(wèn)題分析很有幫助。
?
生成的Flash編程文件和列表文件存放在“build”目錄下:
4.2 下載調(diào)試應(yīng)用工程
完成以上編譯鏈接生成elf文件之后,就可以開(kāi)始下載調(diào)試了。具體方法步驟如下:
首先,需要確認(rèn)YCT自動(dòng)生成的debug配置腳本launch.json中MCU芯片的“device” name是否JLINK能夠識(shí)別的目標(biāo)板使用MCU對(duì)應(yīng)的完整part number:
若不是(v1.1.8及之前的老版本YCT工具),則參考下表修改:
上表為J-Flash軟件目標(biāo)設(shè)備配置(Target Device Settings)界面截圖,需要提前安裝云途車規(guī)MCU的patch補(bǔ)丁包才能讓JLINK(推薦JLINK V9以上版本硬件 + v6.96版本驅(qū)動(dòng))支持/識(shí)別。 云途車規(guī)MCU的patch補(bǔ)丁包的安裝方法有如下兩種: 方法①:使用SDK Config Tool集成的Patch Tool(從“YTMicro Devices”下拉菜單選擇需要打補(bǔ)丁的MCU系列,在“JLink Install Path”選擇JLINK軟件安裝根目錄)
方法②:使用SDK Release Package集成的Patch Tool(配置界面和patch方法同上)
連接硬件:通過(guò)USB或者12V DV電源給目標(biāo)EVB供電,然后提供USB將JLINK調(diào)試器與電腦主機(jī)和目標(biāo)MCU EVB連接:
在VScode中,切換到debug界面,選擇launch Debug jlink:,點(diǎn)擊左側(cè)的“?”開(kāi)始調(diào)試器連接,elf下載和調(diào)試:
進(jìn)入調(diào)試界面后,默認(rèn)停在main()函數(shù)最開(kāi)始的默認(rèn)斷點(diǎn):
VSCode IDE的Cortex Debug調(diào)試擴(kuò)展支持自動(dòng)變量(VARIABLES)、手動(dòng)變量(WATCH)、斷點(diǎn)(BREAKPOINTS)、外設(shè)寄存器(CORTEX PERPHERALS)和內(nèi)核寄存器(CORTEX REFISTERS)查看以及復(fù)位/運(yùn)行/單步/進(jìn)入/退出函數(shù)/關(guān)閉調(diào)試器等便捷高效的調(diào)試控制、源代碼自動(dòng)跳轉(zhuǎn),斷點(diǎn)快捷設(shè)置(單擊源代碼行號(hào)前紅點(diǎn))以及調(diào)試控制臺(tái)顯示下載調(diào)試命令執(zhí)行l(wèi)og等,功能十分強(qiáng)大好用:
Tips:當(dāng)然,用戶也可以選擇使用調(diào)試器(比如勞德巴赫、iSystem等)其他第三方調(diào)試軟件(比如Segger的OZone, 勞德巴赫的Trace32等)下載調(diào)試本文生成的elf文件,后續(xù)專門寫篇文件進(jìn)行介紹。
總結(jié)
本文詳細(xì)介紹了基于YCT和VSCode(CMake + GCC)工具鏈的云途車規(guī)MCU應(yīng)用軟件開(kāi)發(fā)環(huán)境的搭建和使用方法及步驟。此工具鏈搭建簡(jiǎn)單、功能強(qiáng)大、使用方便,從SDK/MCAL底層驅(qū)動(dòng)圖形化配置、代碼和應(yīng)用工程生成、到應(yīng)用程序編譯鏈接和下載調(diào)試等步驟“一氣呵成”,是云途車規(guī)MCU軟件開(kāi)發(fā)的一站式解決方案,強(qiáng)烈推薦正在或者計(jì)劃使用云途車規(guī)MCU芯片開(kāi)發(fā)汽車ECU應(yīng)用軟件的用戶評(píng)估使用。
-
mcu
+關(guān)注
關(guān)注
146文章
17318瀏覽量
352649 -
IDE
+關(guān)注
關(guān)注
0文章
341瀏覽量
46878 -
嵌入式軟件
+關(guān)注
關(guān)注
4文章
240瀏覽量
26729 -
開(kāi)發(fā)環(huán)境
+關(guān)注
關(guān)注
1文章
230瀏覽量
16697 -
vscode
+關(guān)注
關(guān)注
1文章
157瀏覽量
7852
原文標(biāo)題:云途車規(guī)MCU軟件開(kāi)發(fā)環(huán)境搭建及使用詳解--VSCode(CMake GCC) IDE
文章出處:【微信號(hào):汽車電子expert成長(zhǎng)之路,微信公眾號(hào):汽車電子expert成長(zhǎng)之路】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論