女人被狂躁到高潮视频免费无遮挡,内射人妻骚骚骚,免费人成小说在线观看网站,九九影院午夜理论片少妇,免费av永久免费网址

當(dāng)前位置:首頁 > > 痞子衡嵌入式
[導(dǎo)讀]程序函數(shù)庫是一個(gè)包含已經(jīng)編譯好代碼和數(shù)據(jù)的函數(shù)集合,這個(gè)庫文件里的函數(shù)可以供其他程序調(diào)用。被放進(jìn)庫文件里的代碼通常具有一定通用性,是經(jīng)過高度抽象的,這樣可以避免重復(fù)造輪子。程序函數(shù)庫設(shè)計(jì)可以使得程序的開發(fā)工作更加模塊化,更容易重新編譯,也更方便升級(jí)。


大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家分享的是MCUXpresso IDE下將源碼制作成Lib庫方法及其與IAR,MDK差異。

程序函數(shù)庫是一個(gè)包含已經(jīng)編譯好代碼和數(shù)據(jù)的函數(shù)集合,這個(gè)庫文件里的函數(shù)可以供其他程序調(diào)用。被放進(jìn)庫文件里的代碼通常具有一定通用性,是經(jīng)過高度抽象的,這樣可以避免重復(fù)造輪子。程序函數(shù)庫設(shè)計(jì)可以使得程序的開發(fā)工作更加模塊化,更容易重新編譯,也更方便升級(jí)。

嵌入式開發(fā)里有時(shí)候也會(huì)需要涉及函數(shù)庫文件,除了模塊化開發(fā)以及方便升級(jí)特點(diǎn)外,有時(shí)候也是為了對(duì)源代碼進(jìn)行保密,畢竟庫文件是編譯后的文件。今天痞子衡就跟大家聊聊 MCUXpresso IDE 下生成 Lib 庫文件的方法及其與 IAR, MDK 有何差異。

  • Note: 痞子衡測試的MCUXpresso IDE版本是v11.4.0_6224。

一、其它IDE下制作Lib庫的方法

我們先來看看其它 IDE 下是如何生成和使用 Lib 庫文件的。我們以 \SDK_2.10.0_MIMXRT1170-EVK\boards\evkmimxrt1170\demo_apps\hello_world\cm7 目錄下的工程文件為例。這個(gè) hello_world 例程主要就是利用 LPUART 外設(shè)驅(qū)動(dòng)( fsl_lpuart.c )實(shí)現(xiàn)串口打印功能,這里我們就嘗試將 fsl_lpuart.c 文件制作成 Lib 庫(這里特指靜態(tài)鏈接庫 - Static Library)。

1.1 IAR EWARM下

使用 IAR 打開 hello_world_demo_cm7.eww 文件,編譯默認(rèn)工程可以得到工程可執(zhí)行文件和鏡像文件,這是經(jīng)過編譯和鏈接之后的可直接執(zhí)行的純機(jī)器碼數(shù)據(jù)。由于我們只需要將 fsl_lpuart.c 文件制作成 Lib 庫,所以要對(duì)工程進(jìn)行一些改動(dòng):

1. 將工程里除 fsl_lpuart.c 之外的其它 .c 文件全部移除,并且僅需保留 fsl_lpuart.c 所依賴的相關(guān)頭文件。
2. 在工程選項(xiàng) General Options / Output / Output file 里切換到 Library。
3. 在工程選項(xiàng) Library Builder / Output / Output file 里命名生成的庫文件(比如 lpuart_drv.a )。

這時(shí)候重新編譯工程便可以得到我們想要的 lpuart_drv.a 庫文件,如果要使用這個(gè)庫文件的話,也非常簡單,只要在原始的 hello_world 工程里將 fsl_lpuart.c 文件替換成 lpuart_drv.a 即可。

1.2 Keil MDK下

MDK 下制作和使用 Lib 庫方法與 IAR 差不多,就是工程設(shè)置差異。使用 MDK 打開 hello_world_demo_cm7.uvprojx 文件,同樣對(duì)工程進(jìn)行一些改動(dòng):

1. 將工程里除 fsl_lpuart.c 之外的其它 .c 文件全部移除,并且僅需保留 fsl_lpuart.c 所依賴的相關(guān)頭文件。
2. 在工程選項(xiàng) Output / 里切換到 Create Library。
3. 在工程選項(xiàng) Output / Name of Executable 里命名生成的庫文件(比如 lpuart_drv.lib )。

二、MCUXpresso IDE下制作Lib庫的方法

了解了 IAR, MDK 下制作和使用 Lib 庫方法,我們?cè)賮砜幢疚牡闹鹘?MCUXpresso IDE 下制作 Lib 庫的方法。首先是按照 《MCUXpresso IDE下SDK工程導(dǎo)入與workspace管理機(jī)制》 一文導(dǎo)入一個(gè) hello_world 工程,在導(dǎo)入向?qū)Ы缑?,我們能看?SDK 里的例程類型是 C Project,旁邊雖然有 C Static Library 選項(xiàng),但是不可設(shè)置。

我們先使用 SDK 包里導(dǎo)出的默認(rèn)工程(C Project),按照之前 IAR, MDK 上的經(jīng)驗(yàn),在這個(gè)工程里做如下改動(dòng)。重新編譯工程,發(fā)現(xiàn)生成的文件似乎跟原始工程生成的可執(zhí)行文件(Artifact Type 為 Executable )差不多,顯然  Shared Library 并不是我們想要的靜態(tài) Lib 庫。

1. 將工程里除 fsl_lpuart.c 之外的其它 .c 文件全部移除,并且僅需保留 fsl_lpuart.c 所依賴的相關(guān)頭文件。
2. 在工程選項(xiàng) C/C++ Build / Settings / Build Artifact / Artifact Type 里切換到 Shared Library。
3. 在工程選項(xiàng) C/C++ Build / Settings / Tool Settings / MCU Linker / Shared Library Settings 里 Shared 選項(xiàng)勾選上。

那么 MCUXpresso IDE 下如何生成靜態(tài) Lib 庫呢?很遺憾,你必須在新建工程之初就確定工程類型為 C Static Library,工程類型確定之后無法僅通過工程選項(xiàng)來切換 C Project 和 C Static Library (這是和 IAR, MDK 不一樣的第一個(gè)地方)。在創(chuàng)建 C Static Library 時(shí)盡量在向?qū)Ю飳⒍嘤嗟脑次募x項(xiàng)全部去掉,僅保留我們感興趣的 lpuart 驅(qū)動(dòng)。

新建了 C Static Library 工程后發(fā)現(xiàn)工程里還是殘留了多余的 .c 文件(Debug Console 和 device 初始化相關(guān)文件),這時(shí)候再手動(dòng)移除這些 .c 文件,然后打開工程選項(xiàng) C/C++ Build / Settings / Build Artifact / Artifact Type,此時(shí)僅有 Static Library 一種選擇。編譯工程可得到 liblpuart_drv.a 文件(MCUXpresso IDE 特意在用戶設(shè)置的庫名加了 lib 前綴,這是刻意設(shè)計(jì)的,后面使用該庫文件時(shí)會(huì)用到這個(gè)設(shè)計(jì)),即是我們需要的靜態(tài) Lib 庫文件。

回到官方 SDK 包里原始的 hello world 例程里,此時(shí)我們嘗試使用這個(gè) liblpuart_drv.a 文件,我們將工程目錄下的 fsl_lpuart.c 文件替換成 liblpuart_drv.a 文件,直接編譯發(fā)現(xiàn)報(bào)錯(cuò),無法找到 LPUART 相關(guān)驅(qū)動(dòng),顯然工程并沒有直接識(shí)別庫文件(這是跟 IAR, MDK 不一樣的第二個(gè)地方),這時(shí)候需要更新下工程選項(xiàng),在 C/C++ Build / Settings / Tool Settings / MCU Linker / Libraries 里添加 liblpuart_drv.a 庫(包括名字和路徑),這里特別注意庫名字僅需要填 lpuart_drv,不需要 lib 前綴(這就是前面所說的 MCUXpresso IDE 特意設(shè)計(jì))。此時(shí)再編譯工程,就一切正常了。

三、靜態(tài)鏈接庫和共享鏈接庫差異

在 MCUXpresso IDE 下我們接觸到了兩種庫 Static Library 和 Shared Library,最后再簡單介紹下它倆的差異。

靜態(tài)庫是一些 .o 目標(biāo)文件的集合,一般以 .a/.lib 形式結(jié)尾。靜態(tài)庫在程序鏈接階段使用,鏈接器將程序要用到的函數(shù)從庫中提取出來,并整合到程序中,程序運(yùn)行不再使用靜態(tài)庫了。由于每個(gè)程序要用到函數(shù)都從庫提取并整合在一起,所以可執(zhí)行文件會(huì)比較大。

共享庫即動(dòng)態(tài)鏈接庫,在 Linux 中以 .so(share object) 為后綴,在 Windows 中以 .dll 為后綴。程序開始啟動(dòng)運(yùn)行時(shí),加載所需的函數(shù),程序運(yùn)行時(shí)也需要共享庫的支持。共享庫鏈接出來的文件比靜態(tài)庫要小得多。

所以這其實(shí)就是鏈接方式的差異,鏈接(Link)是程序被裝載到內(nèi)存運(yùn)行之前需要完成的一個(gè)步驟。鏈接本身分為靜態(tài)鏈接(Static Link)和動(dòng)態(tài)鏈接(Dynamic Link)兩種方式。而在嵌入式 MCU 世界里,我們通常都是用靜態(tài)鏈接這種方式。

至此,MCUXpresso IDE下將源碼制作成Lib庫方法及其與IAR,MDK差異痞子衡便介紹完畢了,掌聲在哪里~~~


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉