關注、星標公衆號,不錯過精彩內容
作者:strongerHuang
微信公衆號:strongerHuang
庫,對於程序員的人來說,應該都不陌生。但有很多初學者,及已經工作的朋友對庫的理解還處於書本概念階段,也就是自己沒有生成及使用過庫。今天就來簡單分享一下Keil、IAR生成靜態庫方法,靜態與動態庫的區別。
一、關於庫
庫函數(Library function)是把函數放到庫裏,供別人使用的一種方式。方法是把一些常用到的函數編完放到一個文件裏,供不同的人進行調用。調用的時候把它所在的文件名用#include<>加到裏面就可以了。一般是放到lib文件裏的。
---來自百度百科
很多朋友都知道printf打印函數,我們在代碼中調用printf函數打印數據時,已經調用了標準的「微庫」,比如Keil、IAR中使用「微庫」,需要配置:
1.Keil MDK使用微庫
Project -> Options for Target -> Target 勾選上「Use Micro LIB」,如下圖:
2.IAR EWARM使用微庫
Project -> Options -> General Options -> Library Configuration 選中「Full」,如下圖:
什麼情況下要生成庫?
1.代碼模塊化定型。也就是說模塊代碼的功能在經過無數次驗證,並無誤後,方便團隊的協同開發,這個時候可以將模塊代碼生成庫。
2.提供SDK給客戶開發。這裏一般是指源代碼對客戶不具有公開性的原因,包括某些特有算法、實現特有功能的具體過程等。
生成庫的原則?
簡單來說就是使代碼結構化、模塊化、源碼不具公開性等。要求代碼高內聚、低耦合。
二、Keil、IAR如何生成庫?
代碼工程生成庫的過程只需要對工程進行配置即可,這裏再簡單講一下過程,其實在我「系列教程」中有相關內容。
1.Keil MDK
Project -> Options for Target -> Output 勾選上「Create Library」即可。
2.IAR EWARM
Project -> Options -> General Options -> Output 勾選上「Library」即可。
三、庫在工程的使用方法
「.Lib」、「.a」這種庫大家可以理解爲「.c」,只是它已經經過處理,我們看不到源文件。我們只需要像添加「.c」文件,將其添加到工程即可。
如下圖,我們將STM32F10x_StdPeriph_Driver標準外設庫生成「STM32F10x_StdPeriph_Driver.a」庫,添加到工程中:
四、靜態庫和動態庫的區別?
上面Keil生成的庫是以「.Lib」爲後綴的文件,IAR是以「.a」爲後綴的文件,你們知道他們是靜態庫還是動態庫嗎?
答案是:二者都是靜態庫。
爲什麼都是靜態庫呢?先看一下靜態庫和動態庫的區別就會知道。
簡單的來說二者的區別:
靜態庫:就是在編譯的時候直接將需要的代碼連接進可執行程序中去;
動態庫:就是在需要調用其中的函數時,根據函數映射表找到該函數然後調入堆棧執行。
從上面的描述可以知道,靜態庫是我們MCU開發者常用的一種,而動態庫常用於Linux、Windows等開發場合。
推薦閱讀:
關注微信公衆號『strongerHuang』,後臺回覆「1024」查看更多內容,回覆「加羣」按規則加入技術交流羣。
長按前往圖中包含的公衆號關注