1. 程式人生 > >庫函式開發與暫存器開發

庫函式開發與暫存器開發

在以前 8 位機時代的程式開發中,一般直接配置晶片的暫存器,控制晶片的工作方式,如中斷,定時器等。配置的時候,常常要查閱暫存器表,看用到哪些配置位,為了配置某功能,該置 1還是置 0。這些都是很瑣碎的、機械的工作,因為 8位機的軟體相對來說較簡單,而且資源很有限,所以可以直接配置暫存器的方式來開發。

對於 STM32,因為外設資源豐富,帶來的必然是暫存器的數量和複雜度的增加,這時直接配置暫存器方式的缺陷就突顯出來了: (1) 開發速度慢 (2) 程式可讀性差 (3) 維護複雜 這些缺陷直接影響了開發效率,程式維護成本,交流成本。庫開發方式則正好彌補了這些缺陷。而堅持採用直接配置暫存器的方式開發的程式設計師,會列舉以下原因: (1) 具體引數更直觀 (2) 程式執行佔用資源少 相對於庫開發的方式,直接配置暫存器方式生成的程式碼量的確會少一點,但因為STM32有充足的資源,權衡庫的優勢與不足,絕大部分時候,我們願意犧牲一點 CPU 資源,選擇庫開發。一般只有在對程式碼執行時間要求極苛刻的地方,才用直接配置暫存器的方式代替,如頻繁呼叫的中斷服務函式。 對於庫開發與直接配置暫存器的方式,就好比程式設計是用匯編好還是用 C 好一樣。在STM32F1系列剛推出函式庫時引起程式設計師的激烈爭論,但是,隨著 ST 庫的完善與大家對庫的瞭解,更多的程式設計師選擇了庫開發。現在 STM32F1系列和 STM32F4系列各有一套自己的函式庫,但是它們大部分是相容的,F1和 F4之間的程式移植,只需要小修改即可。而如果要移植用暫存器寫的程式,我只想說:“呵呵”。用庫來進行開發,市場已有定論,使用者群說明了一切,但對於 STM32的學習仍然有人認為用暫存器好,而且彙編不是還沒退出大學教材麼?認為這種方法直觀,能夠了解到是配置了哪些暫存器,怎樣配置暫存器。事實上,庫函式的底層實現恰恰是直接配置暫存器方式的最佳例子,它代替我們完成了暫存器配置的工作,而想深入瞭解晶片是如何工作的話,只要直接檢視庫函式的最底層實現就能理解,相信你會為它嚴謹、優美的實現方式而陶醉,要想修煉 C語言,就從 ST 的庫開始吧。

庫開發方式與直接配置暫存器方式的區別如下圖