導航:首頁 > 源碼編譯 > keil中將代碼編譯成庫

keil中將代碼編譯成庫

發布時間:2022-03-07 04:38:46

『壹』 怎麼用Keil將C程序封裝成lib庫

在團隊工作中,經常會有模塊維護和代碼封裝的問題。把需要封裝的代碼打成一個lib無疑是一種很好的方式。
1.創建lib
創建一個lib很容易,只需要創建一個target,然後把需要封裝的代碼全部加進來,然後再Options of Target中選擇Create Library,然後編譯,因為是lib所以不需要鏈接,編譯過了,你的lib就創建了。當然了,為了別人可以輕松的使用,請提供頭文件支持哦。
2.使用lib
使用lib就更容易了,把lib和頭文件加入你的工程,直接調用就是了。lib庫會和你工程中其它編譯後的obj一起鏈接,形成最後的目標文件。
3.注意事項
首先,Startup和中斷處理程序不要封入LIB,這些程序會在鏈接的時候產生問題。具體的原因么,有點復雜,應該是中斷程序的link機制有所不同的關系吧。
其次,Lib的文件要分的細一點,沒有調用關系的兩個函數不要放到同一個C文件中,因為LIB51在鏈接的時候是按模塊來鏈接的,一個模塊就對應一個C文件,假如鏈接器因為要使用你一個函數fA而引入了A模塊,那麼A模塊中的另外的函數也會被引入,而另外的函數你又沒有使用的話,那麼就會引發Keil經典的UNCALLED FUNC的warning。這個warning在Keil的文檔中說的好清楚了,我粘過來吧:
It is common practice ring the development process to write but not call
additional functions. While the compiler permits this without error, the
Linker/Locator does not treat this code casually because of the support for data
overlaying, and emits a warning message.
Interrupt functions are never called, they are invoked by the hardware. An
uncalled routine is treated as a potential interrupt routine by the linker. This
means that the function is assigned non-overlayable data space for its local
variables. This quickly exhausts all available data memory (depending upon the
memory model used).
If you unexpectedly run out of memory, be sure to check for linker warnings
relating to uncalled or unused routines. You can use the linker』s IXREF
directive to include a cross reference list in the linker map (.M51) file.
大意就是說,Keil的內存應用模式是指定地址的,也就是要根據調用關系來決定哪塊地址可以被復用。對於這種沒人調用的函數,Keil會認為是中斷處理程序,並不能決定調用關系,所以此類uncalled函數的空間不能和其他的程序共享,也就是說,這函數用多少RAM,你就少多少RAM。那uncall多了會怎麼樣?----廢話,當然是內存溢出了。
所以,lib的功能可以做的大而全,但是裡面的模塊一定要分的要多細,有多細,只有這樣,你才能像在windows上用CRT一樣舒服的使用LIB。

個人總結
1. 生成lib 的工程可以沒有main函數,可以只有一個.c文件,一個.c文件中可以只有一個函數
2. 需要在lib工程中建立一個.h文件, 必須用extern聲明各全局變數和函數.

3. 調用lib文件的工程中必須包括lib中的.h文件, 也就是lib工程和調用工程都包含同一個.h文件(好像有點廢話)
4.Lib的文件要分的細一點,沒有調用關系的兩個函數不要放到同一個C文件中. 沒有調用關系的最好是一個函數單獨放在一個.c文件中.這是為了避免在keil中應用程序調用lib庫里出現告警. 因為LIB51在鏈接的時候是按模塊來鏈接的,一個模塊就對應一個C文件,假如鏈接器因為要使用你一個函數fA而引入了A模塊,那麼A模塊中的另外的函數也會被引入,而另外的函數你又沒有使用的話,那麼就會引發Keil經典的UNCALLED FUNC的warning。
通常為每一個函數編一個.C文件,而整個lib用一個.h文件,這樣就可以使只有被調用的函數參與連接
5.調用lib庫時需要在工程中將.lib文件加進來. 在Group中右鍵,然後Add ,注意文件類型中選擇*.lib.

『貳』 會做keil自編C函數庫的高手請進

沒寫過lib。。。不過我在想是不是可以用P1^3這樣的方法來代替P1.3?因為用reg52.h頭文件時都這樣聲明的。。。

『叄』 請問在keil中怎麼編譯源代碼呀 財富值不夠,請原諒……

如果是剛剛接觸這個KEIL,建議你可以先打開示例項目,在菜單的project->open project.....
示例項目的目錄在KEIL\C51\EXAMPLES,最簡單的就是那個hello。
打開項目後,菜單project->Rebuild all target files..就是編譯了,當然你也可以使用菜單那裡的快捷方式。

『肆』 keil 如何生成c語言庫函數

在左側的項目樹上,在項目根目錄上(默認是target 1)點右鍵,選擇option for target target 1,在選「output」頁,再選Create Library,最後點OK就可以了。如果你的程序沒有錯誤,編譯通過了,那就會生成一個庫文件,在以後的程序中調用了。

『伍』 keil 中如何編譯和引用庫「.LIB」

頭文件是要引入到項目中的,也就項目中要用到ST.LIB庫函數的地方,用把ST_PIN.H含進去

『陸』 keil中怎樣製作自己的庫函數

寫好你的代碼
在option for target->output 裡面
勾選create libraty
編譯會在目錄下生成.lib文件

用的時候..在工程文件中載入lib文件.
並且庫函數申明一下即可

『柒』 在keil uvision4 編譯環境下,想把一個*.C原文件生成lib庫文件,有什麼辦法及如何調用

我用自己的一個程序創建一次,截圖你看看

首先在option中設置output選擇創建lib文件

然後重新rebuild,會生成lib文件

就可以調用了。

只能上傳一個圖片,不知道效果怎麼樣能看清楚不,圖片中有步驟

『捌』 keil5中如何將C文件編譯生成ASM匯編文件

在配置編譯選項時,在列表標簽中,選中匯編代碼,編譯後用會生成.LST文件,打開後就會找到匯編代碼了,但需要整理才是需要匯編文件。

『玖』 keil如何將自己常用的函數編寫成庫函數

你做成頭文件和C文件過後,就保存下來了,然後在你要是用的時候,就將其拷貝到你的工程文件下,然後再包含進去就可以了嗎。。
要做成系統的估計得做成DLL 文件哦。。

『拾』 用KEIL寫的c語言代碼能做成動態庫嗎

盡管原理上可行,但實際上應該是不能的.不像電腦,單片機中的rom空間緊張,不會有什麼地方給你存放"可能會用到的代碼";更重要的是,動態庫的使用需要有一套動態庫的鏈接機制,不斷運行著,以單片機的性能來看這是不可能實現的(光運行鏈接器了),
反觀靜態庫就好的多,用到什麼才往裡編譯什麼,編譯完後就不用管了.
最後嘛,我用keil的時候只見過編譯靜態庫的選項,沒見過編動態庫的......
有錯的話莫噴.....

閱讀全文

與keil中將代碼編譯成庫相關的資料

熱點內容
運動app如何測量運動心率 瀏覽:778
蘋果手機文件夾圖標背景圖透明度 瀏覽:728
遼寧省解壓旅遊 瀏覽:267
pdf怎麼把部分圖紙拷到文件夾 瀏覽:695
讓程序員崩潰的40個瞬間 瀏覽:545
macbookair修改文件夾名稱 瀏覽:429
iphone如何快速刪除所有app 瀏覽:235
java高級編程pdf 瀏覽:884
編譯的時候報錯 瀏覽:386
安卓音量鍵怎麼鎖定 瀏覽:27
把pdf合並在一起 瀏覽:659
編程需要啥樣的電腦 瀏覽:968
把word2003轉換成pdf 瀏覽:467
androidbitmap顯示圖片 瀏覽:294
工具欄列印命令大全 瀏覽:784
銅仁人工智慧編程 瀏覽:396
第六章單片機的定時計數 瀏覽:696
命令方塊製作導彈指令是什麼 瀏覽:878
安卓手機為什麼不自帶掃描功能 瀏覽:46
海康威視伺服器如何進入pe 瀏覽:418