作者icetofux ()
看板ASM
標題[問題] 關於ARM系列MCU的函式庫
時間Tue Aug 7 14:42:22 2018
最近在學習使用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://webptt.com/m.aspx?n=bbs/ASM/M.1533624145.A.9C4.html
1F:→ james732: 考慮移植性來說,直接操作暫存器是最糟的選項 08/08 00:38
2F:→ james732: 新的MCU如果沒有抽象層,頂多自己做一個 08/08 00:38
3F:→ james732: 總之就是要把"硬體相依"與"硬體無關"的程式碼完全分開 08/08 00:39
4F:→ ypyp1010: 請問下James為什麼直接操作暫存器會最糟阿... 08/08 09:22
5F:→ ypyp1010: 主要應用層的程式,跟MCU功能設定完全分離,不論用甚麼 08/08 09:23
6F:→ ypyp1010: 架構應該都好換,除非是使用到MCU特殊功能 08/08 09:24
7F:→ ypyp1010: 像我用ST的HAL就用的超不習慣,設定GPIO很麻煩... 08/08 09:28
8F:→ icetofux: ypyp你的意思是自己實作類似CMSIS或HAL的函式庫,把 08/08 10:10
9F:→ icetofux: 底層操作跟程式邏輯分開嗎? 08/08 10:11
10F:→ ypyp1010: 應用跟mcu底層是本來就要分開的,不論在CMSIS或HAL,但 08/08 14:35
11F:→ ypyp1010: 是我會依自己習慣去改,像ST的HAL就包超多.c跟.h,看了 08/08 14:35
12F:→ ypyp1010: 就煩,要k這種架構寫出來的code也很煩,我都把他移掉, 08/08 14:35
13F:→ ypyp1010: 改成自己的東西,好處是很淺顯易懂,壞處是要花時間, 08/08 14:35
14F:→ ypyp1010: 而且不是大眾平台,別人要用會不方便,我其實也在找看 08/08 14:35
15F:→ ypyp1010: 有沒有別的比較好的方法 08/08 14:35
16F:→ icetofux: 看來大家都在想一樣的事呢XD 08/08 16:16
17F:→ MasterChang: 寫習慣就好,ST、新唐、Microchip的Crotex-M都有在用 08/10 01:37
18F:→ MasterChang: 沒甚麼差,轉換也不過一天的事情。頂多USB、Ethernet 08/10 01:38
19F:→ MasterChang: 這類比較麻煩的周邊要花點時間處理。 08/10 01:39
20F:→ MasterChang: 反正看顧客要甚麼就用甚麼方案....自己選的話就用ST 08/10 01:40
21F:→ MasterChang: 的,CubeMx初始化可以省不少時間。 08/10 01:40