chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MCUXpresso IDE下將源碼制作成Lib庫(kù)方法及其與IAR,MDK差異

jf_pJlTbmA9 ? 來(lái)源:恩智浦MCU加油站  ? 作者:恩智浦MCU加油站  ? 2023-11-07 17:13 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

程序函數(shù)庫(kù)是一個(gè)包含已經(jīng)編譯好代碼和數(shù)據(jù)的目標(biāo)文件集合,這個(gè)庫(kù)文件里的函數(shù)可以供其他程序調(diào)用。

被放進(jìn)庫(kù)文件里的代碼通常具有一定通用性,是經(jīng)過(guò)高度抽象的,這樣可以避免重復(fù)造輪子。程序函數(shù)庫(kù)設(shè)計(jì)可以使得程序的開(kāi)發(fā)工作更加模塊化,更容易重新編譯,也更方便升級(jí)。

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

注: 本文測(cè)試的MCUXpresso IDE版本是v11.4.0_6224。

一、其它IDE下制作Lib庫(kù)的方法

我們先來(lái)看看其它 IDE 下是如何生成和使用 Lib 庫(kù)文件的。我們以 SDK_2.10.0_MI
MXRT1170-EVKboardsevkmimxrt1170demo_appshello_worldcm7目錄下的工程文件為例。

這個(gè) hello_world 例程主要就是利用 LPUART 外設(shè)驅(qū)動(dòng)( fsl_lpuart.c )實(shí)現(xiàn)串口打印功能,這里我們就嘗試將 fsl_lpuart.c 文件制作成 Lib 庫(kù)(這里特指靜態(tài)鏈接庫(kù) - Static Library)。

1.1 IAR EWARM

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

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

在工程選項(xiàng)Library Builder / Output / Output file 里命名生成的庫(kù)文件(比如 lpuart_drv.a )。

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

wKgaomUD352APFiKAASsvto44VI909.png

1.2 Keil MDK下

MDK 下制作和使用 Lib庫(kù)的方法與IAR差不多,就是工程設(shè)置差異。

使用 MDK 打開(kāi) 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 里命名生成的庫(kù)文件(比如 lpuart_drv.lib )。

wKgZomUD356AI59iAAQmi_1vGUM884.png

二、MCUXpresso IDE下制作Lib庫(kù)

了解了IAR, MDK 下制作和使用 Lib 庫(kù)方法,我們?cè)賮?lái)看本文的主角 MCUXpresso IDE 下制作 Lib 庫(kù)的方法。

首先是按照 《MCUXpresso IDE下SDK工程導(dǎo)入與workspace管理機(jī)制》 一文導(dǎo)入一個(gè) hello_world 工程,在導(dǎo)入向?qū)Ы缑?,我們能看?SDK 里的例程類型是C Project,旁邊雖然有 C Static Library 選項(xiàng),但是不可設(shè)置。

wKgaomUD36KAKq0lAAR2ZEz7Z-w307.png

我們先使用 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 庫(kù)。

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)勾選上。

wKgaomUD36OAWWzoAAR56LyDC_Y670.png

那么MCUXpresso IDE 下如何生成靜態(tài) Lib 庫(kù)呢?很遺憾,你必須在新建工程之初就確定工程類型為 C Static Library,工程類型確定之后無(wú)法僅通過(guò)工程選項(xiàng)來(lái)切換 C Project 和 C Static Library (這是和IAR, MDK 不一樣的第一個(gè)地方)。

在創(chuàng)建 C Static Library 時(shí)盡量在向?qū)Ю飳⒍嘤嗟脑次募x項(xiàng)全部去掉,僅保留我們感興趣的 lpuart 驅(qū)動(dòng)。

wKgZomUD36WAKzBhAAQHoxppUDg281.png

新建了C Static Library 工程后,發(fā)現(xiàn)工程里還是殘留了多余的 .c 文件(Debug Console 和 device 初始化相關(guān)文件),這時(shí)候再手動(dòng)移除這些 .c 文件,然后打開(kāi)工程選項(xiàng) C/C++ Build / Settings / Build Artifact / Artifact Type,此時(shí)僅有 Static Library 一種選擇。

編譯工程可得到 liblpuart_drv.a 文件(MCUXpresso IDE 特意在用戶設(shè)置的庫(kù)名加了 lib 前綴,這是刻意設(shè)計(jì)的,后面使用該庫(kù)文件時(shí)會(huì)用到這個(gè)設(shè)計(jì)),即是我們需要的靜態(tài)Lib 庫(kù)文件。

wKgaomUD36aALejeAAPiOUToFs0631.png

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

wKgZomUD36iANsaIAATAZkVANoU079.png

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

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

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

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

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

而在嵌入式 MCU 世界里,我們通常都是用靜態(tài)鏈接這種方式。

來(lái)源:恩智浦MCU加油站


審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17984

    瀏覽量

    367042
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    671

    瀏覽量

    30339
  • mcuxpresso
    +關(guān)注

    關(guān)注

    1

    文章

    45

    瀏覽量

    4505
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    芯海通用 MCU應(yīng)用筆記 :在 IARMDK 開(kāi)發(fā)環(huán)境使用 printf 函數(shù)重定向移植差異指南

    對(duì) printf 函數(shù)支持的差異。并在本應(yīng)用筆記結(jié)尾處給出可以一鍵移植到 Keil、IAR8.x、IAR9.x 版本的通用重定向代碼。 Keil 和
    發(fā)表于 05-16 11:56

    mdk生成的lib如何用在IAR中?

    我現(xiàn)在有一個(gè)lib文件,之前一直用在MDK中,后來(lái)需要IAR編輯時(shí)也要用這個(gè)lib,因?yàn)槲疫@邊沒(méi)有源碼,直接把
    發(fā)表于 02-03 14:40

    BRD板和LIB庫(kù)之間LIB庫(kù)LIB庫(kù)之間的封裝和焊盤差異

    程序功能:驗(yàn)證BRD板和LIB庫(kù)之間,SIP板和LIB庫(kù)之間,MCM板和LIB庫(kù)之間的封裝和焊盤
    發(fā)表于 08-24 12:50

    如何使用MDK/MCUXpresso IDE/IAR工具編譯生成燒錄固件文件

    使用MDK/MCUXpresso IDE/IAR工具編譯生成燒錄固件文件。使用MCU BootUtility來(lái)加載hex文件或者bin文件或者是.srec文件進(jìn)行一站式燒錄。默認(rèn)情況
    發(fā)表于 11-04 06:55

    MCUXpresso IDE下在線調(diào)試時(shí)使用不同復(fù)位策略的現(xiàn)象分享

    i.MXRT下調(diào)試現(xiàn)象不一致》的同系列篇,計(jì)劃中痞子衡是要把幾大經(jīng)典IDE(IAR EWARM、Keil MDK、MCUXpresso IDE
    發(fā)表于 01-25 07:37

    在keil和IAR環(huán)境lib庫(kù)的生成和使用

    lib靜態(tài)庫(kù)的使用可以簡(jiǎn)化項(xiàng)目開(kāi)發(fā)流程,提高開(kāi)發(fā)效率,本文詳細(xì)介紹了在keil和IAR環(huán)境lib庫(kù)
    發(fā)表于 01-27 06:52

    分享MCUXpresso IDE關(guān)鍵函數(shù)重定向到RAM中執(zhí)行的幾種方法

      大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家分享的是MCUXpresso IDE關(guān)鍵函數(shù)重定向到RAM中執(zhí)行的幾種方法。
    發(fā)表于 02-10 06:44

    MCUXpresso IDE應(yīng)用程序RW段分散鏈接有哪幾種方法

    MCUXpresso IDE應(yīng)用程序RW段分散鏈接有哪幾種方法?
    發(fā)表于 02-10 08:03

    如何為pn7362使用MCUXpresso IDE?

    網(wǎng)站上找到的庫(kù)。 NXP 網(wǎng)站上提供的手冊(cè)似乎沒(méi)有詳細(xì)信息。請(qǐng)下載 SW368332.zip 文件并說(shuō)明如何在 MCUXpresso 中使用它。 另外,請(qǐng)檢查該項(xiàng)目是否可以轉(zhuǎn)換為 IAR 并使用。
    發(fā)表于 04-23 06:56

    痞子衡嵌入式:MCUXpresso IDE下在線調(diào)試時(shí)使用不同復(fù)位策略的現(xiàn)象總結(jié)

    i.MXRT下調(diào)試現(xiàn)象不一致》的同系列篇,計(jì)劃中痞子衡是要把幾大經(jīng)典IDE(IAR EWARM、Keil MDK、MCUXpresso IDE
    發(fā)表于 11-30 18:06 ?14次下載
    痞子衡嵌入式:<b class='flag-5'>MCUXpresso</b> <b class='flag-5'>IDE</b>下在線調(diào)試時(shí)使用不同復(fù)位策略的現(xiàn)象總結(jié)

    keil和IARlib庫(kù)文件的生成和使用

    lib靜態(tài)庫(kù)的使用可以簡(jiǎn)化項(xiàng)目開(kāi)發(fā)流程,提高開(kāi)發(fā)效率,本文詳細(xì)介紹了在keil和IAR環(huán)境lib庫(kù)
    發(fā)表于 12-03 11:51 ?15次下載
    keil和<b class='flag-5'>IAR</b>中<b class='flag-5'>lib</b><b class='flag-5'>庫(kù)</b>文件的生成和使用

    痞子衡嵌入式:MCUXpresso IDE關(guān)鍵函數(shù)重定向到RAM中執(zhí)行的幾種方法

      大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家分享的是MCUXpresso IDE關(guān)鍵函數(shù)重定向到RAM中執(zhí)行的幾種方法。
    發(fā)表于 12-06 19:36 ?9次下載
    痞子衡嵌入式:<b class='flag-5'>MCUXpresso</b> <b class='flag-5'>IDE</b><b class='flag-5'>下</b><b class='flag-5'>將</b>關(guān)鍵函數(shù)重定向到RAM中執(zhí)行的幾種<b class='flag-5'>方法</b>

    三種常用IDE花式生成鏡像文件的方法

    大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家分享的是MCUXpresso IDE下生成鏡像文件的方法及其IAR,
    的頭像 發(fā)表于 10-24 14:08 ?1870次閱讀

    AN075 基于MDK實(shí)現(xiàn)的Lib庫(kù)調(diào)用方案介紹

    AN075 基于MDK實(shí)現(xiàn)的Lib庫(kù)調(diào)用方案介紹
    發(fā)表于 03-01 18:56 ?0次下載
    AN075 基于<b class='flag-5'>MDK</b>實(shí)現(xiàn)的<b class='flag-5'>Lib</b><b class='flag-5'>庫(kù)</b>調(diào)用方案介紹

    MCUXpresso IDE下生成鏡像文件的方法及其IAR,MDK差異

    MCUXpresso IDE下生成鏡像文件的方法及其IAR,MDK
    的頭像 發(fā)表于 09-28 17:05 ?1172次閱讀
    <b class='flag-5'>MCUXpresso</b> <b class='flag-5'>IDE</b>下生成鏡像文件的<b class='flag-5'>方法</b><b class='flag-5'>及其</b>與<b class='flag-5'>IAR</b>,<b class='flag-5'>MDK</b><b class='flag-5'>差異</b>