开云体育官方网站MCUXpresso IDE下将源码制作成Lib库方法及其与IARMDK差异
发布时间:2023-11-08
 程序函数库是一个包含已经编译好代码和数据的目标文件集合,这个库文件里的函数可以供其他程序调用。  被放进库文件里的代码通常具有一定通用性,是经过高度抽象的,这样可以避免重复造轮子。程序函数库设计可以使得程序的开发工作更加模块化,更容易重新编译,也更方便升级。  嵌入式开发里有时候也会需要涉及函数库文件,除了模块化开发以及方便升级特点外,有时候也是为了对源代码进行保密,毕竟库文件是编译后的文件。

  程序函数库是一个包含已经编译好代码和数据的目标文件集合,这个库文件里的函数可以供其他程序调用。

  被放进库文件里的代码通常具有一定通用性,是经过高度抽象的,这样可以避免重复造轮子。程序函数库设计可以使得程序的开发工作更加模块化,更容易重新编译,也更方便升级。

  嵌入式开发里有时候也会需要涉及函数库文件,除了模块化开发以及方便升级特点外,有时候也是为了对源代码进行保密,毕竟库文件是编译后的文件。今天就跟大家聊聊MCUXpresso IDE 下生成 Lib 库文件的方法及其与 IAR, MDK 有何差异。

  我们先来看看其它 IDE 下是如何生成和使用 Lib 库文件的。我们以SDK_2.10.0_MI

  使用IAR 打开 hello_world_demo_cm7.eww 文件,编译默认工程可以得到工程可执行文件和镜像文件,这是经过编译和链接之后的可直接执行的纯机器码数据。由于我们只需要将 fsl_lpuart.c 文件制作成 Lib 库,所以要对工程进行一些改动:

  将工程里除fsl_lpuart.c 之外的其它.c 文件全部移除,并且仅需保留fsl_lpuart.c 所依赖的相关头文件。

  这时候重新编译工程便可以得到我们想要的 lpuart_drv.a 库文件,如果要使用这个库文件的话,也非常简单,只要在原始的hello_world 工程里将 fsl_lpuart.c 文件替换成 lpuart_drv.a 即可。

  1)将工程里除fsl_lpuart.c 之外的其它.c 文件全部移除,并且仅需保留fsl_lpuart.c 所依赖的相关头文件。

  我们先使用 SDK 包里导出的默认工程(C Project),按照之前 IAR, MDK 上的经验,在这个工程里做如下改动。重新编译工程,发现生成的文件似乎跟原始工程生成的可执行文件(Artifact Type 为 Executable )差不多,显然 Shared Library 并不是我们想要的静态 Lib 库。

  1)将工程里除fsl_lpuart.c 之外的其它.c 文件全部移除,并且仅需保留fsl_lpuart.c 所依赖的相关头文件。

  在创建 C Static Library 时尽量在向导里将多余的源文件选项全部去掉,仅保留我们感兴趣的 lpuart 驱动。

  编译工程可得到 liblpuart_drv.a 文件(MCUXpresso IDE 特意在用户设置的库名加了 lib 前缀,这是刻意设计的,开云体育官方网站后面使用该库文件时会用到这个设计),即是我们需要的静态Lib 库文件。开云体育官方网站

  静态库是一些 .o 目标文件的集合,一般以 .a/.lib 形式结尾。静态库在程序链接阶段使用,链接器将程序要用到的函数从库中提取出来,并整合到程序中,程序运行不再使用静态库了。由于每个程序要用到函数都从库提取并整合在一起,所以可执行文件会比较大。

  共享库即动态链接库,在Linux中以 .so(share object) 为后缀,在 Windows 中以 .dll 为后缀。程序开始启动运行时,加载所需的函数,程序运行时也需要共享库的支持。共享库链接出来的文件比静态库要小得多。

  所以这其实就是链接方式的差异,链接(Link)是程序被装载到内存运行之前需要完成的一个步骤。链接本身分为静态链接(Static Link)和动态链接(Dynamic Link)两种方式。

  下在线调试时使用不同复位策略的现象总结 /

  文件的生成和使用 /

  调用方案介绍 /

  中测量能耗? /

  如何在Micropython+ESP32环境中使用定时器来实现各种实用功能

  182.电风扇不转,这个小元件坏的最多,教你一招自己就能轻松修好 #我爱电器维修 #硬声创作季

  114.音箱或功放机声音小,有杂音或没声音,教你这样接一条线就能修好【我爱电器维修】 #硬声创作季

  142.液晶电视背光灯整体发暗,老师傅半天才修好,经验分享值得参考 #我爱电器维修 #硬声创作季