Keil MDK中单个c文件生成LIB文件

	工作中有时候因为分工合作的原因需要让别人调用自己写的代码去完成某项功能,但是又不想让别人看到具体的实现过程,只是提供一个API形式的接口供别人调用;又或者是其他的一些原因,有必要学习静态库及动态库的相关知识,本文为转载文章,作为学习笔记。原文出处 Keil MDK中单个c文件生成LIB文件。

看大多数说的都是简单地将整个工程转换成.LIB,在Project->Options for Target->Output下,选择Create Library,就可以了。
在这里插入图片描述
不过这样生成的lib文件巨大,我现在编译的工程最后生成的lib有2.6MB。

若只想将工程中的单个c文件生成相应的lib文件

1、右键点击工程,假设为a,选Add Group,假设为b,再将想生成lib的文件加入b group,假设文件是cc.c,必须要有cc.h。
在这里插入图片描述
2、右键依次点击其他的group,按KEIL官网资料所说的,将Options for Group->Properties下的Include in Target Build前的对勾去掉,这样生成LIB时就不会被编译了。
在这里插入图片描述
3、Project->Options for Target->Output下,选择Create Library,改输出文件名为cc,点OK。
在这里插入图片描述
4、编译,这样就能在工程文件夹下的OBJ找到生成的cc.lib了,我在里面只放了一个函数,大小为80K。

5、调用也要注意,将cc.lib拷贝到source文件夹下,将其添加到main group中,并删掉之前的cc.c,要使用cc.lib时,必须要保证c文件中include “cc.h”。当然在之前写cc.c中也要include “cc.h”,并且cc.h中声明了cc.c中的函数才行。最后要将刚才去掉对勾的部分都还原,编译,OK!

备注要点:

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文件,这样就可以使只有被调用的函数参与连接 。这个warning在Keil的文档中说的好清楚了,我粘过来吧:

It is common practice during 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。

5、调用lib库时需要在工程中将.lib文件加进来. 在Group中右键,然后Add ,注意文件类型中选择*.lib。

6、Startup和中断处理程序不要封入LIB,这些程序会在链接的时候产生问题。具体的原因么,有点复杂,应该是中断程序的link机制有所不同的关系吧。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Keil MDK是一款嵌入式开发工具,它提供了丰富的功能和易用的界面,可以帮助开发人员进行嵌入式软件的开发和调试。其的编辑器配色文件是指可以修改编辑器的颜色方案,以满足开发人员个性化的需求。 要修改Keil MDK编辑器的配色方案,首先需要打开Keil MDK软件,然后点击菜单栏的"Options"选项,再选择"Fonts and Colors"。接着,在弹出的窗口,可以看到各种不同语言的配色选项。 点击对应的语言选项,比如C、C++、ASM等,就可以设置该语言的配色方案。在配色方案窗口,可以设置编辑器的前景色和背景色,以及关键字、注释、字符串等的颜色。通过选择不同的颜色,并进行预览,可以实时查看效果。还可以根据自己的喜好,调整配色方案的亮度、对比度等参数。 在选择配色方案后,点击"Apply"按钮,就可以将修改的配色方案应用到Keil MDK的编辑器了。如果想要保存修改的配色方案,可以点击"Save"按钮,然后给配色方案命名,并保存到指定的位置。 通过修改Keil MDK编辑器的配色方案,可以使开发人员在编写代码时更加舒适和高效。不同的颜色搭配和亮度对比可以帮助开发人员更好地区分不同的代码元素,提高代码的可读性和可维护性。因此,根据个人喜好和需求,合理设置Keil MDK编辑器的配色方案是很重要的。 ### 回答2: Keil MDK(Microcontroller Development Kit)编辑器是一种常用的嵌入式开发工具,用于编写和调试嵌入式系统的程序代码。配色文件可以用来改变编辑器界面的颜色和外观,以提高开发者的舒适度和工作效率。 在Keil MDK编辑器,我们可以根据自己的喜好和需求进行配色定制。一般而言,配色文件是以XML格式保存的,可以包含各种编辑器界面的颜色和样式设置。 要更改Keil MDK编辑器的配色,可以按照以下步骤进行: 1. 打开Keil MDK编辑器,并在菜单栏选择“Options”(选项)。 2. 在弹出的对话框,选择“Editor”(编辑器)选项。 3. 在编辑器选项,可以找到“Colors”(颜色)选项。在这里,可以看到各种编辑器元素(如关键字、注释、字符串等)的配色设置。 4. 可以通过单击下拉菜单来选择不同的配色方案。通常,Keil MDK提供了一些预定义的配色方案,如“Classic”(经典)、“Dark”(暗黑)等。 5. 如果需要进行自定义配色,可以单击“Edit...”按钮来编辑配色方案。在弹出的对话框,可以更改具体的颜色值和样式设置。 6. 编辑完成后,点击“OK”按钮保存并应用新的配色方案。 需要注意的是,更改配色文件可能需要重启Keil MDK编辑器才能生效。此外,Keil MDK还提供了其他一些编辑器设置,如字体、缩进、代码折叠等,可以根据个人习惯进行调整。 通过改变Keil MDK编辑器的配色文件,可以让开发者在编写和调试嵌入式程序时有一个更舒适和高效的工作环境。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值