
初學者使用 Keil學習單片機,用串口printf打印輸出時,通常都會使能Keil工具自帶的微庫(MicroLib):
最近看到有讀者在討論Keil的MicroLib微庫和標準C庫的話題,今天就來給大家簡單分享一下相關內容。
什么是MicroLib?
(資料圖)
MicroLib是針對以C語言編寫的基于ARM嵌入式應用程序的高度優化的庫。
與ARM Compiler工具鏈附帶的標準C庫相比,MicroLib具有明顯的代碼大小優勢。
上圖是一個性能基準測試代碼,通過上圖可以發現,微庫在不同內核下代碼量明顯少很多。
補充:
C語言標準庫,我們經常都會調用,比如:
在這些文件下還有很多各類庫函數,比如:printf()、 malloc()、 memcpy()、 strncpy()等。
微庫與標準C庫區別
因為針對Arm的嵌入式系統,通常存儲(代碼)資源相對較小,為了使其能用上標準函數,工程師就針對Arm嵌入式系統,對標準C庫進行了優化,以減小代碼量。
優化標準庫,肯定會帶來一些差異,下面分享幾點主要的差異:
1.代碼(數據)量更小(對比上圖)。
2.缺少一些不常用標準庫函數,比如:文件 I/O 的庫函數。
3.微庫最大程度優化代碼量,可能會導致有些庫代碼運行速度更慢。
4.可用于RTOS這類系統中,但不支持在像Windosw這類系統中。
總結
微庫函數也是一種函數,其很多庫函數原型在網上都能找到,如果你有特殊需求,可以不用微庫,在庫函數原型的基礎上進行修改。
比如:你的項目經過驗證,發現微庫的代碼量,或者運行速度都不理想的情況下,可以自己修改原型函數。
當然,在萬不得已的情況下才建議修改原型函數。通常還是建議直接使用微庫,畢竟經過別人多次驗證的庫,出現bug的概率更小。
審核編輯:湯梓紅
標簽: