‘壹’ 怎么用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的时候只见过编译静态库的选项,没见过编动态库的......
有错的话莫喷.....