一、背景
最近在跟一些開發(fā)者交流過程中,或者開發(fā)者群里反饋,感覺先楫單片機(jī)開發(fā)方式不同于以往的單片機(jī)開發(fā)方式,或者開發(fā)方式?jīng)]接觸過導(dǎo)致無從下手,或者是覺得自己的APP需要嚴(yán)重依賴hpm_sdk等等。
在這些反饋當(dāng)中,覺得有必要出個(gè)雜談文章,談一談hpm_sdk的開發(fā)方式的優(yōu)缺點(diǎn),以及相比以往的單片機(jī)傳統(tǒng)開發(fā)方式的不同點(diǎn)。以此可以帶給開發(fā)者一些啟發(fā),更能方便開發(fā)者更快借助hpm_sdk進(jìn)行開發(fā)自己的應(yīng)用。
本文也會(huì)借助一些開發(fā)者分享過的開發(fā)經(jīng)驗(yàn),感謝hpmicro開發(fā)者貢獻(xiàn)的文章。
二、開發(fā)差異
(一)IDE
先楫的目前通用MCU采用的內(nèi)核架構(gòu)都是riscv,這一點(diǎn)就不同于國內(nèi)大同小異的各種arm的cortex-M系列的單片機(jī),甚至可以B2B兼容STM32的單片機(jī)也一樣,不能夠支持ARM自己的平臺(tái)-Keil MDK。
對(duì)于嚴(yán)重依賴keil開發(fā)的工程師來說,特別目前國內(nèi)的很多開發(fā)工程師來說,這確實(shí)是不夠友好的一個(gè)點(diǎn)。畢竟keil經(jīng)過多年的發(fā)展,其傻瓜式的界面操作,網(wǎng)上豐富的踩坑記錄,都足夠讓一個(gè)沒接觸過單片機(jī)開發(fā)的都能輕松入門。
但是Keil這個(gè)本身不是免費(fèi)的商用IDE,盡管國內(nèi)很多cortex-M單片機(jī)的芯片廠家提供的類似STM32的Firmware_Library包,里面的工程都支持了keil,但是也沒說明對(duì)keil這個(gè)IDE進(jìn)行了版權(quán)購買,這帶來的版權(quán)問題責(zé)任就分給了芯片開發(fā)者,雖然國內(nèi)很多可以通過破解方式進(jìn)行商用,但是畢竟在商用的過程中時(shí)時(shí)刻刻得注意著版權(quán)問題。
先楫開發(fā)雖然不支持keil,但是在提供的IDE上,使用segger(大名鼎鼎Jlink調(diào)試器的廠家)自己開發(fā)的IDE,也就是SEGGER Embedded Studio for RISC-V,這個(gè)同樣不是免費(fèi)的商用IDE,但是先楫在版權(quán)上十分重視,購買了其芯片開發(fā)的商用版權(quán),目前可以不限定于SEGGER Embedded Studio的版本,而且可以讓開發(fā)者直接商用開發(fā),避免版權(quán)問題。這個(gè)IDE同樣跟keil操作類似,通過可視化操作進(jìn)行配置即可,配合其Jlink更是能夠讓調(diào)試更加友好。
IDE的編譯鏈支持上,支持了segger自身的編譯鏈,也支持了gcc編譯鏈,同樣也支持andes編譯鏈。
開發(fā)者文章: (SEGGER Embedded Studio for RISC-V,for HPMicro Devices 解決首次使用激活問題,提示無License )
另外SEGGER Embedded Studio 也有對(duì)應(yīng)user manual手冊(cè),以便開發(fā)者查缺補(bǔ)漏。網(wǎng)頁:

(二)構(gòu)建系統(tǒng)
對(duì)于國內(nèi)的arm的cortex-m的單片機(jī)廠家來說,并沒有所謂的什么構(gòu)建系統(tǒng)開發(fā)環(huán)境。但是對(duì)于有些開發(fā)者如果開發(fā)過樂鑫的產(chǎn)品,比如esp32,使用的esp-idf就是使用的cmake構(gòu)建系統(tǒng)(早期的esp-idf還是makefile版本),還有樹莓派的rp2040的pico-sdk。這種構(gòu)建系統(tǒng)入門有點(diǎn)門檻,需要有一定的cmake基礎(chǔ)(比如cmakelist語法)以及相關(guān)環(huán)境搭建經(jīng)驗(yàn),但這也感覺是未來嵌入式發(fā)展的趨勢,通過cmakelists.txt管理配置生成各大跨平臺(tái)的工程(比如先楫開發(fā)中,生成SEGGER Embedded Studio 以及后續(xù)先楫支持的IDE)、生成的makefile文件可以給各大平臺(tái)編譯器解析,
對(duì)于芯片原廠和開發(fā)者來說,這種構(gòu)建系統(tǒng)可以讓多種芯片系列,組件包等等只需要支持一套SDK,而不需要提供多種library芯片包,可以擴(kuò)展構(gòu)建多種IDE,比如命令或者可視化界面生成EGGER Embedded Studio工程;支持cmake構(gòu)建的vscode,clion等等跨平臺(tái)開發(fā)。
三、開發(fā)優(yōu)勢
項(xiàng)目工程依靠cmakelists.txt文件進(jìn)行管理,這種管理方式類似在keil進(jìn)行相關(guān)路徑加入或者加入自定義編譯宏定義等,比如:
1、設(shè)置一些自定義編譯宏定義開關(guān)
2、根據(jù)不同編譯類型配置不同的編譯選項(xiàng)和鏈接選項(xiàng)
3、添加頭文件路徑、編譯宏等常規(guī)操作
4、添加源碼編譯
5、添加extern組件等操作
以上是不是覺得這種開發(fā)方式,IDE比如keil在界面操作也有,但是對(duì)于cmake來說,單純一個(gè)cmakelist文件就可以操作完成,熟悉入門后也能大大提高開發(fā)效率。
本文以hpm_sdk1.2進(jìn)行說明,簡單舉例一些常用的命令說明,一個(gè)cmakelist文件管理的方便好處。
更多的命令接口可以參考sdk中的sample的cmakelist,以及cmake文件夾里面的封裝的命令函數(shù)。不在本文闡述范圍內(nèi)。

該版本已經(jīng)支持在sdk以外創(chuàng)建自己的Board, 但在sdk以外開發(fā)自己的應(yīng)用一直都是可以的。
(一)創(chuàng)建自己的AP應(yīng)用文件夾
新建一個(gè)自己一個(gè)APP文件夾,里面放置一個(gè)Board-這里我使用的是hpm6750_rc,這里從hpm_sdk里面的board的hpm6750evkmini中提取,并把hpm6750evkmini.yaml改為hpm6750_rc.yaml,如下:

從hpm_sdk復(fù)制一個(gè)sample,比如hello_world。然后在自己創(chuàng)建的應(yīng)用文件夾新建個(gè)build,進(jìn)入到該build文件夾,這時(shí)候使用命令:
cmake -G Ninja -DBOARD=rc_hpm_evk -DBOARD_SEARCH_PATH=your custom/rcsn_project/board/ -DCMAKE_BUILD_TYPE=flash_xip ..
這時(shí)候打開build文件夾里面的segger_embedded_studio,打開ses這個(gè)IDE,可以看到boards已經(jīng)變成自己項(xiàng)目上的Board,以及自己的application已經(jīng)被添加上來。

(二)定義宏開關(guān),預(yù)處理定義
在keil上,預(yù)處理定義在option上可以手動(dòng)輸入定義

同樣在segger_embedded_studio中也有類似的定義。

但是hpm_sdk中,并不需要開發(fā)者自己手動(dòng)去添加,在makelists使用命令: sdk_compile_definitions, 如此就可以進(jìn)行定義預(yù)處理符號(hào)。

(三)頭文件路徑加入
比如在keil里面就有對(duì)應(yīng)的控件操作

那么在segger_embedded_studio也有類似操作界面

在hpm_sdk的構(gòu)建當(dāng)中,同樣也不需要用戶自己去界面操作,直接可以在cmakelists通過sdk_inc 命令設(shè)置,比如自己的工程定義以下工程目錄,每個(gè)目錄里面有個(gè)inc,這個(gè)就是需要包含的頭文件路徑。


(四)加入源文件
像keil一樣,segger_embedded_studio也有自己的源文件目錄結(jié)構(gòu),比如需要添加上述所說的drivers里面的文件,可以通過使用sdk_app_src命令進(jìn)行設(shè)置。比如:

(五)編譯相關(guān)
比如設(shè)置優(yōu)化等級(jí)、GCC編譯參數(shù)、指令集選擇等等。都可以通過sdk_compile_options命令設(shè)置
設(shè)置O3優(yōu)化可以使用:
sdk_compile_options("-O3")
設(shè)置gcc特定警告
sdk_compile_options("-Wall")
設(shè)置ABI和ISA
sdk_compile_options("-mabi=ilp32d")sdk_compile_options("-march=rv32gc")
四、開發(fā)劣勢
(一)入門門檻相對(duì)高
目前來說,cmake構(gòu)建方式在MCU開發(fā)上并不常見,也存在一定的入門門檻;
但對(duì)于項(xiàng)目的構(gòu)建優(yōu)化和管理是效率顯著的,比如引入一個(gè)第三方中間件,只需要在此中間件內(nèi)部通過CMakelists管理好自身文件鏈接,項(xiàng)目通過條件包含,能夠最大減少中間件帶來的耦合度。

需要有一定的cmake基礎(chǔ),也帶來一定的學(xué)習(xí)成本。
(二)工程管理相對(duì)約束
在傳統(tǒng)的MCU開發(fā)中,很多開發(fā)者都喜歡把MCU廠家自身的驅(qū)動(dòng)和組件源碼都加入到自己的工程目錄下,這樣方便自己管理,甚至可以自己改動(dòng)官方庫代碼(這點(diǎn)是極其不推薦的行為)。
但hpm_sdk更多傾向于開發(fā)者的APP應(yīng)用與SDK分開,這種開發(fā)好比是上位機(jī)的QT開發(fā),在QT開發(fā)中,通過pro/pri文件管理導(dǎo)入QT的官方庫使用,如果不想使用那就不開啟對(duì)應(yīng)的庫,又好比python開發(fā),通過Import方式自行選擇。
這種開發(fā)方式需要把hpm_sdk路徑放在對(duì)應(yīng)的文件夾中,并把路徑添加到環(huán)境變量,這好比是軟件的安裝,先楫的所有芯片系列都依賴與這個(gè)hpm_sdk,用戶只需關(guān)心自己的應(yīng)用開發(fā)路徑,在拷貝的過程中也只需要拷貝自身應(yīng)用,但前提對(duì)方也得"安裝"了hpm_sdk。
這種約束方法對(duì)于有些開發(fā)者來說確實(shí)不夠友好,當(dāng)然未來先楫也不排除支持把hpm_sdk所需要的文件能讓開發(fā)者自行導(dǎo)入到自己工程目錄的需求,比如類似stm32cubemx生成初始化外設(shè)工具,但hpm_sdk的cmake構(gòu)建方式仍是主要開發(fā)方式。
-
單片機(jī)
+關(guān)注
關(guān)注
6076文章
45494瀏覽量
670260 -
SDK
+關(guān)注
關(guān)注
3文章
1101瀏覽量
51713 -
HPM
+關(guān)注
關(guān)注
2文章
51瀏覽量
8255
發(fā)布評(píng)論請(qǐng)先 登錄
2026?啟芯程 | 先楫 HPM_SDK v1.11.0 重磅發(fā)布
先楫解決方案 | 變頻器EtherCAT通訊卡+遠(yuǎn)程IO方案
開發(fā)者分享 | HPM5E-EC-DEV:基于HPM5E00的EtherCAT開發(fā)板分享
hpm的vscode開發(fā)環(huán)境搭建openocd燒錄問題求解
HPM monitor studio 只能在 hpm芯片+hpm_sdk 的組合下才能用嗎?
先楫半導(dǎo)體高性能MCU入駐立創(chuàng)商城,國產(chǎn)芯勢力再添新動(dòng)能
重磅更新 | HPM_SDK v1.10.0 發(fā)布
支持HPM6P00/HPM5E00系列!HPMicro Manufacturing Tool v0.6.0發(fā)布
先楫半導(dǎo)體HPM6E8Y:先楫實(shí)時(shí)控制芯片驅(qū)動(dòng)的機(jī)器人關(guān)節(jié)“芯”時(shí)代
【強(qiáng)勢上新】HPM5E00:EtherCAT運(yùn)動(dòng)控制MCU,先楫半導(dǎo)體再拓工業(yè)總線產(chǎn)品新版圖
【強(qiáng)勢上新】HPM5E00:EtherCAT運(yùn)動(dòng)控制MCU,先楫半導(dǎo)體再拓工業(yè)總線產(chǎn)品新版圖
重磅更新 | 先楫半導(dǎo)體HPM_SDK v1.9.0 發(fā)布
600MHz RISC-V 雙核加持!先楫HPM6P00重新定義國產(chǎn)高性能混合信號(hào)MCU
[HPM雜談]你想要了解的先楫hpm_sdk開發(fā)都在這里系列 (一)
評(píng)論