前情提要
上一篇文章記錄了一下如何創(chuàng)建GD32E503的BSP。但由于時(shí)間關(guān)系只實(shí)現(xiàn)了MDK版本的工程模板,后面如果需要提交BSP時(shí)再去補(bǔ)全I(xiàn)AR版本的。但對(duì)于我個(gè)人而言,IAR只在讀書時(shí)玩藍(lán)牙開發(fā)的時(shí)候用過,而MDK雖然用的比較多但最近幾年也很少用了。感覺還是VSCode等編輯器用起來更舒服一些,而對(duì)于RTT系統(tǒng)的開發(fā),我個(gè)人還是更傾向于使用官方的RTThreadStudioIDE進(jìn)行開發(fā)。于是今天想想辦法怎么移到RTTStudio上去。
面臨的問題
上篇文章已經(jīng)發(fā)現(xiàn),目前官方的固件庫竟然沒有GCC版本的啟動(dòng)文件,所以要想辦法弄個(gè)啟動(dòng)文件
RTTStudio自帶的GCC編譯器版本太老,不支持編譯M33內(nèi)核,所以要升級(jí)GCC
計(jì)劃用開源的DAP調(diào)試器進(jìn)行調(diào)試,但同樣RTTStudio自帶的pyocd調(diào)試工具版本太老,需要升級(jí)
添加GCC版本的啟動(dòng)文件
拷貝啟動(dòng)文件模板
從GD32F4xx固件包內(nèi)把GCC文件夾拷貝到新添加的GDE50x固件包的對(duì)應(yīng)位置,并把匯編文件名稱修改為gd32e50x的,注意,GD32E50x分了高密度版(hd)和互聯(lián)版(cl),我這里暫且只修改了一份我用到的高密度版本的。cl版本的也類似修改即可。

修改啟動(dòng)文件
眾所周知,匯編的啟動(dòng)文件要干的事情就是做一些芯片啟動(dòng)的前期初始化工作,搭建C代碼的運(yùn)行環(huán)境。所以這里也并不需要對(duì)照匯編指令,把每條語句的功能都搞明白,只需大致了解一下即可。一眼望去,感覺這個(gè)匯編文件主要做了三大事情。
第一,定義中斷向量;
第二,定義啟動(dòng)入口;
第三,聲明中斷函數(shù)。
而啟動(dòng)入口相關(guān)的不用修改,都是先調(diào)用SystemInit函數(shù)做一些時(shí)鐘等基礎(chǔ)初始化,然后再調(diào)用entry或者main函數(shù)執(zhí)行后續(xù)的代碼。
所以這里主要修改的就是中斷向量的定義和中斷函數(shù)的聲明,按照armcc版本的進(jìn)行修改即可:
1;?*?Copyright?(c)?2006-2021,?RT-Thread?Development?Team
2;?*
3;?*?SPDX-License-Identifier:?Apache-2.0
4;?*
5;?*?Change?Logs:
6;?*?Date???????????Author???????Notes
7;?*?2018-05-22?????tanek????????first?implementation
8;?*/
9.syntax?unified
10.cpu?cortex-m33
11.fpu?softvfp
12.thumb
13.global??g_pfnVectors
14.global??Default_Handler
15????.section??.isr_vector,"a",%progbits
16????.type??g_pfnVectors,?%object
17g_pfnVectors:
18????.word?????_estack???????????????????????//?Top?of?Stack
19????.word?????Reset_Handler?????????????????????//?Reset?Handler
20????.word?????NMI_Handler???????????????????????//?NMI?Handler
21????.word?????HardFault_Handler?????????????????//?Hard?Fault?Handler
22????.word?????MemManage_Handler?????????????????//?MPU?Fault?Handler
23????.word?????BusFault_Handler??????????????????//?Bus?Fault?Handler
24????.word?????UsageFault_Handler????????????????//?Usage?Fault?Handler
25????.word?????0?????????????????????????????????//?Reserved
26????.word?????0?????????????????????????????????//?Reserved
27????.word?????0?????????????????????????????????//?Reserved
28????.word?????0?????????????????????????????????//?Reserved
29????.word?????SVC_Handler???????????????????????//?SVCall?Handler
30????.word?????DebugMon_Handler??????????????????//?Debug?Monitor?Handler
31????.word?????0?????????????????????????????????//?Reserved
32????.word?????PendSV_Handler????????????????????//?PendSV?Handler
33????.word?????SysTick_Handler???????????????????//?SysTick?Handler
34????//?external?interrupts?handler
35????.word?????WWDGT_IRQHandler??????????????????//?16:Window?Watchdog?Timer
36????.word?????LVD_IRQHandler????????????????????//?17:LVD?through?EXTI?Line?detect
37????.word?????TAMPER_IRQHandler???????????????????//?18:Tamper?through?EXTI?Line?detect
38????.word?????RTC_IRQHandler???????????????????????????//?19:RTC?through?EXTI?Line
39????.word?????FMC_IRQHandler????????????????????//?20:FMC
40????.word?????RCU_CTC_IRQHandler????????????????//?21:RCU?and?CTC
41????.word?????EXTI0_IRQHandler??????????????????//?22:EXTI?Line?0
42????.word?????EXTI1_IRQHandler??????????????????//?23:EXTI?Line?1
43????.word?????EXTI2_IRQHandler??????????????????//?24:EXTI?Line?2
44????.word?????EXTI3_IRQHandler??????????????????//?25:EXTI?Line?3
45????.word?????EXTI4_IRQHandler??????????????????//?26:EXTI?Line?4
46????.word?????DMA0_Channel0_IRQHandler??????????//?27:DMA0?Channel0
47????.word?????DMA0_Channel1_IRQHandler??????????//?28:DMA0?Channel1
48????.word?????DMA0_Channel2_IRQHandler??????????//?29:DMA0?Channel2
49????.word?????DMA0_Channel3_IRQHandler??????????//?30:DMA0?Channel3
50????.word?????DMA0_Channel4_IRQHandler??????????//?31:DMA0?Channel4
51????.word?????DMA0_Channel5_IRQHandler??????????//?32:DMA0?Channel5
52????.word?????DMA0_Channel6_IRQHandler??????????//?33:DMA0?Channel6
53????.word?????ADC0_1_IRQHandler?????????????????//?34:ADC0?and?ADC1
54????.word????????????USBD_HP_CAN0_TX_IRQHandler????????????????//?35:USBD?HP?or?CAN0?TX
55????.word????????????USBD_LP_CAN0_RX0_IRQHandler????????????????//?36:USBD?LP?or?CAN0?RX0
56????.word?????CAN0_RX1_IRQHandler???????????????//?37:CAN0?RX1
57????.word?????CAN0_EWMC_IRQHandler??????????????//?38:CAN0?EWMC
58????.word?????EXTI5_9_IRQHandler????????????????//?39:EXTI5?to?EXTI9
59????.word?????TIMER0_BRK_TIMER8_IRQHandler??????//?40:TIMER0?Break?and?TIMER8
60????.word?????TIMER0_UP_TIMER9_IRQHandler???????//?41:TIMER0?Update?and?TIMER9
61????.word?????TIMER0_TRG_CMT_TIMER10_IRQHandler?//?42:TIMER0?Trigger?and?Commutation?and?TIMER10
62????.word?????TIMER0_Channel_IRQHandler?????????//?43:TIMER0?Channel?Capture?Compare
63????.word?????TIMER1_IRQHandler?????????????????//?44:TIMER1
64????.word?????TIMER2_IRQHandler?????????????????//?45:TIMER2
65????.word?????TIMER3_IRQHandler?????????????????//?46:TIMER3
66????.word?????I2C0_EV_IRQHandler????????????????//?47:I2C0?Event
67????.word?????I2C0_ER_IRQHandler????????????????//?48:I2C0?Error
68????.word?????I2C1_EV_IRQHandler????????????????//?49:I2C1?Event
69????.word?????I2C1_ER_IRQHandler????????????????//?50:I2C1?Error
70????.word?????SPI0_IRQHandler???????????????????//?51:SPI0
71????.word?????SPI1_I2S1ADD_IRQHandler???????????//?52:SPI1?or?I2S1ADD
72????.word?????USART0_IRQHandler?????????????????//?53:USART0
73????.word?????USART1_IRQHandler?????????????????//?54:USART1
74????.word?????USART2_IRQHandler?????????????????//?55:USART2
75????.word?????EXTI10_15_IRQHandler??????????????//?56:EXTI10?to?EXTI15
76????.word?????RTC_Alarm_IRQHandler??????????????//?57:RTC?Alarm
77????.word?????USBD_WKUP_IRQHandler?????????????????//?58:USBD?Wakeup
78????.word?????TIMER7_BRK_TIMER11_IRQHandler?????//?59:TIMER7?Break?and?TIMER11
79????.word?????TIMER7_UP_TIMER12_IRQHandler??????//?60:TIMER7?Update?and?TIMER12
80????.word?????TIMER7_TRG_CMT_TIMER13_IRQHandler?//?61:TIMER7?Trigger?and?Commutation?and?TIMER13
81????.word?????TIMER7_Channel_IRQHandler?????????//?62:TIMER7?Channel?Compare
82????.word?????ADC2_IRQHandler??????????????????????????????//?63:ADC2
83????.word?????EXMC_IRQHandler???????????????????//?64:EXMC
84????.word?????SDIO_IRQHandler???????????????????//?65:SDIO
85????.word?????TIMER4_IRQHandler?????????????????//?66:TIMER4
86????.word?????SPI2_I2S2ADD_IRQHandler???????????//?67:SPI2?or?I2S2ADD
87????.word?????UART3_IRQHandler??????????????????//?68:UART3
88????.word?????UART4_IRQHandler??????????????????//?69:UART4
89????.word?????TIMER5_DAC_IRQHandler?????????????//?70:TIMER5?and?DAC0?DAC1?Underrun?error
90????.word?????TIMER6_IRQHandler?????????????????//?71:TIMER6
91????.word?????DMA1_Channel0_IRQHandler??????????//?72:DMA1?Channel0
92????.word?????DMA1_Channel1_IRQHandler??????????//?73:DMA1?Channel1
93????.word?????DMA1_Channel2_IRQHandler??????????//?74:DMA1?Channel2
94????.word?????DMA1_Channel3_4_IRQHandler????????//?75:DMA1?Channel3?and?Channel4
95????.word?????0??????????????????????????????????????????????????????????//?76:Reserved
96????.word?????0???????????????????????????????????????????????//?77:Reserved
97????.word?????0??????????????????????????????????????????????????????//?78:Reserved
98????.word?????CAN1_TX_IRQHandler????????????????//?79:CAN1?TX
99????.word?????CAN1_RX0_IRQHandler???????????????//?80:CAN1?RX0
100????.word?????CAN1_RX1_IRQHandler???????????????//?81:CAN1?RX1
101????.word?????CAN1_EWMC_IRQHandler??????????????//?82:CAN1?EWMC?
102????.word?????0??????????????????????????????????????????????????//?83:Reserved
103????.word?????0??????????????????????????????????????????????????????????//?84:Reserved
104????.word?????SHRTIMER_IRQ2_IRQHandler??????????//?85:SHRTIMER?IRQ2
105????.word?????SHRTIMER_IRQ3_IRQHandler??????????//?86:SHRTIMER?IRQ3
106????.word?????SHRTIMER_IRQ4_IRQHandler??????????//?87:SHRTIMER?IRQ4
107????.word?????SHRTIMER_IRQ5_IRQHandler??????????//?88:SHRTIMER?IRQ5
108????.word?????SHRTIMER_IRQ6_IRQHandler??????????//?89:SHRTIMER?IRQ6
109????.word?????0??????????????????????????????????????????????????????????//?90:Reserved
110????.word?????0???????????????????????????????????????????????????????//?91:Reserved
111????.word?????SHRTIMER_IRQ0_IRQHandler??????????//?92:SHRTIMER?IRQ0
112????.word?????SHRTIMER_IRQ1_IRQHandler??????????//?93:SHRTIMER?IRQ1
113????.word?????0????????????????????????????????????????????????//?94:Reserved
114????.word?????0?????????????????????????????????//?95:Reserved
115????.word?????0???????????????????????????????????????????????//?96:Reserved
116????.word?????0????????????????????????????????????????????????//?97:Reserved
117????.word?????I2C2_EV_IRQHandler????????????????//?98:I2C2?Event
118????.word?????I2C2_ER_IRQHandler????????????????//?99:I2C2?Error
119????.word?????USART5_IRQHandler?????????????????//?100:USART5
120????.word?????I2C2_WKUP_IRQHandler??????????????//?101:I2C2?Wakeup
121????.word?????USART5_WKUP_IRQHandler????????????//?102:USART5?Wakeup
122????.word?????0?????????????????????????????????//?103:Reserved
123????.size??g_pfnVectors,?.-g_pfnVectors
124????.section??.text.Reset_Handler
125????.weak??Reset_Handler
126????.type??Reset_Handler,?%function
127Reset_Handler:
128????ldr?r1,?=_sidata
129????ldr?r2,?=_sdata
130????ldr?r3,?=_edata
131????subs?r3,?r2
132????ble?fill_bss_start
133loop_copy_data:
134????subs?r3,?#4
135????ldr?r0,?[r1,r3]
136????str?r0,?[r2,r3]
137????bgt?loop_copy_data
138fill_bss_start:
139????ldr?r1,?=__bss_start
140????ldr?r2,?=__bss_end
141????movs?r0,?0
142????subs?r2,?r1
143????ble?startup_enter
144loop_fill_bss:
145????subs?r2,?#4
146????str?r0,?[r1,?r2]
147????bgt?loop_fill_bss
148startup_enter:
149????bl?SystemInit
150????bl?entry
151????/*?Exception?Handlers?*/
152????.weak???NMI_Handler
153????.type???NMI_Handler,?%function
154NMI_Handler:
155????b???????.
156????.size???NMI_Handler,?.?-?NMI_Handler
157????.weak???MemManage_Handler
158????.type???MemManage_Handler,?%function
159MemManage_Handler:
160????b???????.
161????.size???MemManage_Handler,?.?-?MemManage_Handler
162????.weak???BusFault_Handler
163????.type???BusFault_Handler,?%function
164BusFault_Handler:
165????b???????.
166????.size???BusFault_Handler,?.?-?BusFault_Handler
167????.weak???UsageFault_Handler
168????.type???UsageFault_Handler,?%function
169UsageFault_Handler:
170????b???????.
171????.size???UsageFault_Handler,?.?-?UsageFault_Handler
172????.weak???SVC_Handler
173????.type???SVC_Handler,?%function
174SVC_Handler:
175????b???????.
176????.size???SVC_Handler,?.?-?SVC_Handler
177????.weak???DebugMon_Handler
178????.type???DebugMon_Handler,?%function
179DebugMon_Handler:
180????b???????.
181????.size???DebugMon_Handler,?.?-?DebugMon_Handler
182????.weak???PendSV_Handler
183????.type???PendSV_Handler,?%function
184PendSV_Handler:
185????b???????.
186????.size???PendSV_Handler,?.?-?PendSV_Handler
187????.weak???SysTick_Handler
188????.type???SysTick_Handler,?%function
189SysTick_Handler:
190????b???????.
191????.size???SysTick_Handler,?.?-?SysTick_Handler
192????/*?IQR?Handler?*/
193????.section??.text.Default_Handler,"ax",%progbits
194????.type??Default_Handler,?%function
195Default_Handler:
196????b??.
197????.size??Default_Handler,?.?-?Default_Handler
198????.macro??IRQ?handler
199????.weak???\handler
200????.set????\handler,?Default_Handler
201????.endm
202????IRQ?WWDGT_IRQHandler
203????IRQ?LVD_IRQHandler
204????IRQ?TAMPER_IRQHandler
205????IRQ?RTC_IRQHandler
206????IRQ?FMC_IRQHandler
207????IRQ?RCU_CTC_IRQHandler
208????IRQ?EXTI0_IRQHandler
209????IRQ?EXTI1_IRQHandler
210????IRQ?EXTI2_IRQHandler
211????IRQ?EXTI3_IRQHandler
212????IRQ?EXTI4_IRQHandler
213????IRQ?DMA0_Channel0_IRQHandler
214????IRQ?DMA0_Channel1_IRQHandler
215????IRQ?DMA0_Channel2_IRQHandler
216????IRQ?DMA0_Channel3_IRQHandler
217????IRQ?DMA0_Channel4_IRQHandler
218????IRQ?DMA0_Channel5_IRQHandler
219????IRQ?DMA0_Channel6_IRQHandler
220????IRQ?ADC0_1_IRQHandler
221????IRQ?USBD_HP_CAN0_TX_IRQHandler????????
222????IRQ?USBD_LP_CAN0_RX0_IRQHandler???????
223????IRQ?CAN0_RX1_IRQHandler???????????????
224????IRQ?CAN0_EWMC_IRQHandler??????????????
225????IRQ?EXTI5_9_IRQHandler????????????????
226????IRQ?TIMER0_BRK_TIMER8_IRQHandler??????
227????IRQ?TIMER0_UP_TIMER9_IRQHandler???????
228????IRQ?TIMER0_TRG_CMT_TIMER10_IRQHandler?
229????IRQ?TIMER0_Channel_IRQHandler?????????
230????IRQ?TIMER1_IRQHandler?????????????????
231????IRQ?TIMER2_IRQHandler?????????????????
232????IRQ?TIMER3_IRQHandler?????????????????
233????IRQ?I2C0_EV_IRQHandler????????????????
234????IRQ?I2C0_ER_IRQHandler????????????????
235????IRQ?I2C1_EV_IRQHandler????????????????
236????IRQ?I2C1_ER_IRQHandler????????????????
237????IRQ?SPI0_IRQHandler???????????????????
238????IRQ?SPI1_I2S1ADD_IRQHandler???????????
239????IRQ?USART0_IRQHandler?????????????????
240????IRQ?USART1_IRQHandler?????????????????
241????IRQ?USART2_IRQHandler?????????????????
242????IRQ?EXTI10_15_IRQHandler??????????????
243????IRQ?RTC_Alarm_IRQHandler??????????????
244????IRQ?USBD_WKUP_IRQHandler??????????????
245????IRQ?TIMER7_BRK_TIMER11_IRQHandler?????
246????IRQ?TIMER7_UP_TIMER12_IRQHandler??????
247????IRQ?TIMER7_TRG_CMT_TIMER13_IRQHandler?
248????IRQ?TIMER7_Channel_IRQHandler?????????
249????IRQ?ADC2_IRQHandler???????????????????
250????IRQ?EXMC_IRQHandler???????????????????
251????IRQ?SDIO_IRQHandler???????????????????
252????IRQ?TIMER4_IRQHandler?????????????????
253????IRQ?SPI2_I2S2ADD_IRQHandler???????????
254????IRQ?UART3_IRQHandler??????????????????
255????IRQ?UART4_IRQHandler??????????????????
256????IRQ?TIMER5_DAC_IRQHandler?????????????
257????IRQ?TIMER6_IRQHandler?????????????????
258????IRQ?DMA1_Channel0_IRQHandler??????????
259????IRQ?DMA1_Channel1_IRQHandler??????????
260????IRQ?DMA1_Channel2_IRQHandler??????????
261????IRQ?DMA1_Channel3_4_IRQHandler????????
262????IRQ?CAN1_TX_IRQHandler????????????????
263????IRQ?CAN1_RX0_IRQHandler???????????????
264????IRQ?CAN1_RX1_IRQHandler???????????????
265????IRQ?CAN1_EWMC_IRQHandler??????????????
266????IRQ?SHRTIMER_IRQ2_IRQHandler??????????
267????IRQ?SHRTIMER_IRQ3_IRQHandler??????????
268????IRQ?SHRTIMER_IRQ4_IRQHandler??????????
269????IRQ?SHRTIMER_IRQ5_IRQHandler??????????
270????IRQ?SHRTIMER_IRQ6_IRQHandler??????????
271????IRQ?SHRTIMER_IRQ0_IRQHandler??????????
272????IRQ?SHRTIMER_IRQ1_IRQHandler??????????
273????IRQ?I2C2_EV_IRQHandler????????????????
274????IRQ?I2C2_ER_IRQHandler????????????????
275????IRQ?USART5_IRQHandler?????????????????
276????IRQ?I2C2_WKUP_IRQHandler??????????????
277????IRQ?USART5_WKUP_IRQHandler
導(dǎo)入RTTStudioIDE
導(dǎo)入工程
有了GCC版本的啟動(dòng)文件,那不妨先用RTTStudio導(dǎo)入一下工程,然后再根據(jù)錯(cuò)誤想辦法解決。點(diǎn)擊“文件”菜單內(nèi)的“導(dǎo)入”圖標(biāo),打開導(dǎo)入對(duì)話框:

選擇“RT-Thread Bsp到工作空間中”,然后點(diǎn)擊下一步按鈕:

根據(jù)自己的實(shí)際情況填寫內(nèi)容,然后點(diǎn)擊“完成按鈕”進(jìn)行導(dǎo)入:

如下是我導(dǎo)入后的項(xiàng)目資源列表,會(huì)把所需的內(nèi)容都拷貝到工程內(nèi)部:

編譯根據(jù)錯(cuò)誤解決問題
不妨先編譯一下工程,發(fā)現(xiàn)報(bào)了一些錯(cuò)誤,這是必然的,因?yàn)檫€有很多操作沒做呢。那首當(dāng)其沖的錯(cuò)誤就是如下的GCC不支持m33內(nèi)核的問題。
1arm-none-eabi-gcc:?error:?unrecognized?argument?in?option?'-mcpu=cortex-m33+nodsp'
2arm-none-eabi-gcc:?note:?valid?arguments?to?'-mcpu='?are:?arm1020e?arm1020t?arm1022e?arm1026ej-s?arm10e?arm10tdmi?arm1136j-s?arm1136jf-s?arm1156t2-s?arm1156t2f-s?arm1176jz-s?arm1176jzf-s?arm2?arm250?arm3?arm6?arm60?arm600?arm610?arm620?arm7?arm70?arm700?arm700i?arm710?arm7100?arm710c?arm710t?arm720?arm720t?arm740t?arm7500?arm7500fe?arm7d?arm7di?arm7dm?arm7dmi?arm7m?arm7tdmi?arm7tdmi-s?arm8?arm810?arm9?arm920?arm920t?arm922t?arm926ej-s?arm940t?arm946e-s?arm966e-s?arm968e-s?arm9e?arm9tdmi?cortex-a12?cortex-a15?cortex-a15.cortex-a7?cortex-a17?cortex-a17.cortex-a7?cortex-a5?cortex-a53?cortex-a57?cortex-a57.cortex-a53?cortex-a7?cortex-a72?cortex-a72.cortex-a53?cortex-a8?cortex-a9?cortex-m0?cortex-m0.small-multiply?cortex-m0plus?cortex-m0plus.small-multiply?cortex-m1?cortex-m1.small-multiply?cortex-m3?cortex-m4?cortex-m7?cortex-r4?cortex-r4f?cortex-r5?cortex-r7?cortex-r8?ep9312?exynos-m1?fa526?fa606te?fa626?fa626te?fa726te?fmp626?generic-armv7-a?iwmmxt?iwmmxt2?marvell-pj4?mpcore?mpcorenovfp?native?strongarm?strongarm110?strongarm1100?strongarm1110?xgene1?xscale
3make:?***?[rt-thread/src/subdir.mk:54:?rt-thread/src/clock.o]?Error?1
更新GCC
去arm官網(wǎng),下載最新版本的gcc-arm-none-eabi:
GCC下載地址: https://developer.arm.com/downloads/-/gnu-rm

把解壓后的GCC文件夾拷貝到RTTStudio的GCC工具路徑內(nèi),為了減小點(diǎn)路徑長度,可以把文件夾名字重命名為”10.3”:

點(diǎn)擊“構(gòu)建配置”工具圖標(biāo),打開配置對(duì)話框,在“設(shè)置”欄的“Toolchains”圖頁內(nèi)就可以配置GCC相關(guān)信息了。GCC應(yīng)該是向下兼容的,這里不妨選擇”global”進(jìn)行全局設(shè)置:

點(diǎn)擊“瀏覽”按鈕,選擇剛加入的GCC工具路徑,要選擇到里面的bin級(jí)目錄:


添加“cmsis_gcc.h”頭文件
點(diǎn)擊“應(yīng)用并關(guān)閉”按鈕,完成修改,再次編譯,發(fā)現(xiàn)之前不支持M33內(nèi)核的錯(cuò)誤不見了。不過錯(cuò)誤反而變多了??,也很正常,因?yàn)橹熬蜎]進(jìn)行到GCC編譯這一步,很多錯(cuò)誤自然出現(xiàn)不了,不用著急,先看第一個(gè)錯(cuò)誤:
1D:\RT-ThreadStudio\workspace\FOC_MiniCar\libraries\GD32E50x_Firmware_Library\CMSIS/cmsis_compiler.h:54:12:?fatal?error:?cmsis_gcc.h:?No?such?file?or?directory
2???54?|???#include?"cmsis_gcc.h"
報(bào)的是固件庫缺少“cmsis_gcc.h”文件。也對(duì),官方固件并沒有做GCC的支持,怎么會(huì)有這個(gè)頭文件呢。那繼續(xù)從其它固件那里拷貝一份到當(dāng)前工程內(nèi)即可,當(dāng)然為了之前做的BSP的完整性,也可以同時(shí)往其對(duì)應(yīng)位置拷貝一份:

再次編譯,嘔吼!錯(cuò)誤更多了,依然不急,先看第一個(gè)錯(cuò)誤:
1D:\RT-ThreadStudio\workspace\FOC_MiniCar\libraries\GD32E50x_Firmware_Library\CMSIS/core_cm33.h:2668:10:?fatal?error:?mpu_armv8.h:?No?such?file?or?directory
2?2668?|?#include?"mpu_armv8.h"
提示找不到”mpu_armv8.h”頭文件。這里比較奇怪,m33內(nèi)核確實(shí)屬于armv8架構(gòu),但官方固件庫內(nèi)卻找不到此頭文件,倒是在其它的BSP內(nèi)搜到了此頭文件,于是隨便拷貝一個(gè)到工程內(nèi)即可,比如我是從瑞薩的一個(gè)BSP內(nèi)拷貝的。當(dāng)然,這里也可以關(guān)掉mpu的配置宏,不用mpu。

于是再次進(jìn)行編譯,就會(huì)發(fā)現(xiàn)編譯通過了:

更新pyocd
那不妨下載一下試試,不出意外自然會(huì)出現(xiàn)意外,果真不能正常下載。原因就是最開始提到的自帶的pyocd版本太老了,不支持GD32E503RC的器件。需要更新pyocd:

打開CMD命令窗口,運(yùn)行如下命令,安裝新的pyocd:

等待安裝完畢,就可以在python的安裝路徑下找到新的”pyocd.exe”

在終端輸入“pyocd -V”命令,可查看到新安裝pyocd的版本。還可以輸入“pyocd list —targets”命令查看目前pyocd支持的器件。

最后會(huì)發(fā)現(xiàn),默認(rèn)并不支持兆易創(chuàng)新的器件,所以,還需要自己添加支持包:

安裝完后,再查看安裝包和支持的器件,就能找到GD32了:


最后再修改一些RTTStudio的工程配置,選擇先安裝的pyocd.exe和pyocd-gdbserver.exe:

然后再嘗試一些燒寫,就可以正常下載甚至調(diào)試程序了:

相關(guān)鏈接
本系列首篇文章鏈接:
https://club.rt-thread.org/ask/article/5c0c4ba7eb4ab1ad.html
———————End———————


?
?