1 寫在前面
既上上周在RA2E1上把RT-Thread跑起來之后,在上周日的晚上,馬不停蹄地給《致敬未來的攻城獅計(jì)劃》的小伙伴們開了一趟在線直播課,旨在輔導(dǎo)小伙伴們盡快上手基于RA2E1開發(fā)板的開發(fā),同時(shí)也把基于RT-Thread的一些開發(fā)方法和基本操作流程給大家介紹了一遍。
期間遇到了一些小插曲,說起來還是有點(diǎn)尷尬,都怪我這個(gè)直播沒做好充足的準(zhǔn)備,后面需要加強(qiáng)一下。
2 遇到問題
在直播課程中,我主要基于KEIL、RASC、FSP這幾個(gè)軟件給大家演示,介紹如何在KEIL中打開RASC,已經(jīng)從零開始配置一個(gè)新的外設(shè)(以新增UART1為例)。在RASC中完成基本的配置之后,點(diǎn)擊右上角的 Generate Project Content 完成代碼生成,隨后回到KEIL這邊去編譯,沒想到遇到了一個(gè)很詭異的報(bào)錯(cuò),現(xiàn)場直播可把我整懵了。看大意就是 board_cfg.h 頭文件沒找到。蒙頭一看,還不知道咋回事,整了兩下沒搞定,還是一樣的編譯報(bào)錯(cuò),那直播現(xiàn)場可是 大寫的尷尬 !
../libraries/HAL_Drivers/config/ra2l1/uart_config.h(15): warning: In file included from...
./ra_genhal_data.h(5): warning: In file included from...
./ra/fsp/inc/apibsp_api.h(32): warning: In file included from...
ra_cfg/fsp_cfg/bspbsp_cfg.h(6): error: 'board_cfg.h' file not found
#include "board_cfg.h"
^~~~~~~~~~~~~
3 分析問題
現(xiàn)場直播的時(shí)候,我以為是我操作有誤,導(dǎo)致引入了什么配置失效;當(dāng)時(shí)看到頭文件找不到,我第一時(shí)間想到的是 頭文件的路徑?jīng)]有添加進(jìn)去,于是我去KEIL的配置中,新增頭文件搜索路徑,結(jié)果還是失敗:
直播現(xiàn)場快速驗(yàn)證發(fā)現(xiàn)不行,我就打圓場搪塞過去了,演示其他的了。
后面直播結(jié)束后,我以為記得這事,等到我有空坐下來的時(shí)候,我再好好思考并解決這個(gè)問題。
前段時(shí)間參加瑞薩的設(shè)計(jì)大賽,我用的 RA4M2 這塊開發(fā)板,基本也是KEIL+RASC的開發(fā)環(huán)境,但是印象中是沒有出現(xiàn)這種更新了RASC的配置,導(dǎo)致KEIL編譯不過的問題。我上網(wǎng)一搜,結(jié)果也是有人遇到類似的
原來是RASC搞的鬼!這么一說,我回到我的git環(huán)境一看:git status,果然是 board_cfg.h 被刪除了。
有點(diǎn)想不明白的是為何之前 RA4M2的開發(fā)配置卻沒有這樣的問題。
突然我想到調(diào)試RA2E1要求瑞薩的FSP整個(gè)配套版本都需要使用 3.5.0 版本,而之前我用的是4.x 的版本,難道是版本不一樣導(dǎo)致的問題?
于是我對比了一下,兩次KEIL工程里面對RASC/FSP版本的要求,確實(shí)不一樣:
打開那個(gè)工程綁定的RASC,版本也確實(shí)不一樣:
但我嘗試過,直接把RA2E1的FAP升級到RA4M2使用的版本,是不行的;這應(yīng)該就是兩個(gè)大版本沒有做好兼容吧。
4 解決問題
明白了問題的根源,解決起來了就有思路了。
要解決這個(gè)問題,不外乎兩種方法:
第一種方式:就是每次執(zhí)行完RASC的配置更新之后,手動(dòng)把 board_cfg.h 文件恢復(fù)一下,再執(zhí)行KEIL的編譯。這種方式是比較笨重的,每次都需要人去接入,非常地 “不程序猿”!
第二種方式:采用自動(dòng)化腳本的方式來完成這個(gè)復(fù)制、還原的操作,使得在編譯過程無感知。作為程序猿,自然是要選擇這個(gè)方式比較聰明。
要使用這種方式,我想到了使用BAT腳本,這個(gè)腳本也很簡單,就是預(yù)先把board_cfg.h文件備份在一個(gè)目錄,然后使用腳本檢測對應(yīng)目標(biāo)目錄下的board_cfg.h是否存在,如果不存在,則拷貝過去。對應(yīng)的BAT腳本如下:
@echo off
SET BoardCfgFile=board_cfg.h
SET SourceFile=ra_bak%BoardCfgFile%
SET DstFile=ra_cfgfsp_cfgbsp%BoardCfgFile%
if exist %SourceFile% (
if not exist %DstFile% (
echo f | xcopy %SourceFile% %DstFile% /i /y
) else (
echo %DstFile% is exist!
)
) else (
echo %SourceFile% is not exist!
)
把上面的腳本取名為 board_cfg.bat,在每次KEIL執(zhí)行編譯前調(diào)用一下就可以了。
但是,還是要手動(dòng)去執(zhí)行一下這個(gè)BAT腳本?
這就需要了解一下KEIL里面有個(gè)配置,編譯前、編譯后,可以自定義腳本運(yùn)行的小功能;在這里使用它就可以完美地解決我們的需求。見圖:
5 更多思考
其實(shí),這個(gè)問題的引入本質(zhì)還是一個(gè) 版本兼容的問題,由此我想到了幾點(diǎn):
版本兼容始終是個(gè)大難題,無論是小廟還是大廠,都或多或少遇到這樣的困擾,如果大家有什么好的思路,可以在評論席一起交流交流。
學(xué)會(huì)精準(zhǔn)地尋找問題的答案,你遇到的問題,保不準(zhǔn)別人早已經(jīng)遇到過;善于發(fā)現(xiàn)它們,并整理成文,方便更多的用它解決問題;
善于用腳本去解決一些機(jī)械操作的問題;靈活解放自己的雙手這很重要;如果是windows下開發(fā),自然少不了BAT腳本;如果是linux下開發(fā),少不了SHELL腳本;當(dāng)然,如果你能掌握Python腳本開發(fā),那就再好不過了;
涉及到編譯過程中,找不到頭文件的問題,需要多思考一步。
-
python
+關(guān)注
關(guān)注
56文章
4797瀏覽量
84742 -
UART接口
+關(guān)注
關(guān)注
0文章
124瀏覽量
15298 -
RT-Thread
+關(guān)注
關(guān)注
31文章
1293瀏覽量
40190 -
FSP
+關(guān)注
關(guān)注
0文章
34瀏覽量
7143
發(fā)布評論請先 登錄
相關(guān)推薦
評論