看板 ASM 關於我們 聯絡資訊
最近在學習使用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架構了還是得全部打掉重來。 謝謝大家。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.250.45.16 ※ 文章網址: https://www.ptt.cc/bbs/ASM/M.1533624145.A.9C4.html
james732: 考慮移植性來說,直接操作暫存器是最糟的選項 08/08 00:38
james732: 新的MCU如果沒有抽象層,頂多自己做一個 08/08 00:38
james732: 總之就是要把"硬體相依"與"硬體無關"的程式碼完全分開 08/08 00:39
ypyp1010: 請問下James為什麼直接操作暫存器會最糟阿... 08/08 09:22
ypyp1010: 主要應用層的程式,跟MCU功能設定完全分離,不論用甚麼 08/08 09:23
ypyp1010: 架構應該都好換,除非是使用到MCU特殊功能 08/08 09:24
ypyp1010: 像我用ST的HAL就用的超不習慣,設定GPIO很麻煩... 08/08 09:28
icetofux: ypyp你的意思是自己實作類似CMSIS或HAL的函式庫,把 08/08 10:10
icetofux: 底層操作跟程式邏輯分開嗎? 08/08 10:11
ypyp1010: 應用跟mcu底層是本來就要分開的,不論在CMSIS或HAL,但 08/08 14:35
ypyp1010: 是我會依自己習慣去改,像ST的HAL就包超多.c跟.h,看了 08/08 14:35
ypyp1010: 就煩,要k這種架構寫出來的code也很煩,我都把他移掉, 08/08 14:35
ypyp1010: 改成自己的東西,好處是很淺顯易懂,壞處是要花時間, 08/08 14:35
ypyp1010: 而且不是大眾平台,別人要用會不方便,我其實也在找看 08/08 14:35
ypyp1010: 有沒有別的比較好的方法 08/08 14:35
icetofux: 看來大家都在想一樣的事呢XD 08/08 16:16
MasterChang: 寫習慣就好,ST、新唐、Microchip的Crotex-M都有在用 08/10 01:37
MasterChang: 沒甚麼差,轉換也不過一天的事情。頂多USB、Ethernet 08/10 01:38
MasterChang: 這類比較麻煩的周邊要花點時間處理。 08/10 01:39
MasterChang: 反正看顧客要甚麼就用甚麼方案....自己選的話就用ST 08/10 01:40
MasterChang: 的,CubeMx初始化可以省不少時間。 08/10 01:40