[問題] 關於ARM系列MCU的函式庫

作者: icetofux   2018-08-07 14:42:22
最近在學習使用ARM系列的MCU,我使用的是STM32系列的開發板,發現光是最基本的I/O
操作,就有直接操作暫存器、使用CMSIS函式庫、使用HAL函式庫等三種方式能做到。
目前理解是CMSIS是針對暫存器操作的抽象化實作,只要是Cortex M系列的MCU都通用,
可以很方便的在不同的IC間互相移植,並且減輕更換IC所造成的學習時間成本。
HAL感覺跟CMSIS有點接近,但只針對STM32系列有效。
目前用CubeMX產生出來的樣板專案好像是採用HAL,但實務上大家比較常看到哪一種呢?
另外還有兩個問題是個人滿好奇的,也許未來學習的過程就會得到解答,但如果各位先
進願意提前給我指點我會很感激:
看介紹CMSIS理念上的確是個很棒的東西,但是各家MCU周邊硬體百百款,CMSIS真的有辦
法包的下所有的周邊嗎?
另外就是CMSIS是ARM所主導的,所以理所當然只為ARM的Cortex M系列所用,但是根據以
往經驗,當面臨到換IC的情境下,沒辦法保證未來採用的一定是ARM系列的IC,也許會因
為各種考量換成其他架構的MCU。那麼用CMSIS或是HAL這類的函式庫對專案的可移植性或
可維護性是真的有幫助的嗎?畢竟要是真的換MCU架構了還是得全部打掉重來。
謝謝大家。
作者: james732 (好人超)   2018-08-08 00:38:00
考慮移植性來說,直接操作暫存器是最糟的選項新的MCU如果沒有抽象層,頂多自己做一個總之就是要把"硬體相依"與"硬體無關"的程式碼完全分開
作者: ypyp1010 (Nigel)   2018-08-08 09:22:00
請問下James為什麼直接操作暫存器會最糟阿...主要應用層的程式,跟MCU功能設定完全分離,不論用甚麼架構應該都好換,除非是使用到MCU特殊功能像我用ST的HAL就用的超不習慣,設定GPIO很麻煩...
作者: icetofux   2018-08-08 10:10:00
ypyp你的意思是自己實作類似CMSIS或HAL的函式庫,把底層操作跟程式邏輯分開嗎?
作者: ypyp1010 (Nigel)   2018-08-08 14:35:00
應用跟mcu底層是本來就要分開的,不論在CMSIS或HAL,但是我會依自己習慣去改,像ST的HAL就包超多.c跟.h,看了就煩,要k這種架構寫出來的code也很煩,我都把他移掉,改成自己的東西,好處是很淺顯易懂,壞處是要花時間,而且不是大眾平台,別人要用會不方便,我其實也在找看有沒有別的比較好的方法
作者: icetofux   2018-08-08 16:16:00
看來大家都在想一樣的事呢XD
作者: MasterChang (我愛ASM)   2018-08-10 01:37:00
寫習慣就好,ST、新唐、Microchip的Crotex-M都有在用沒甚麼差,轉換也不過一天的事情。頂多USB、Ethernet這類比較麻煩的周邊要花點時間處理。反正看顧客要甚麼就用甚麼方案....自己選的話就用ST的,CubeMx初始化可以省不少時間。

Links booklink

Contact Us: admin [ a t ] ucptt.com