|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
请问如何使用自己创建的KEIL库? |
作者:杨秀玮 栏目:MCU技术 |
请问,我在KEIL中自己创建了一个库,但是不知如何使用啊。烦请好心人指点一下如何使用!库需要放在哪个目录下?是否需要在工程中添加库?是否需要创建头文件?头文件里写些什么?是否需要外部声明?KEIL环境如何设置?等等!谢谢 |
2楼: | >>参与讨论 |
作者: zlg900 于 2006/2/7 9:21:00 发布:
re 在keil的hlp目录下的英文文档中有详细介绍. 或者在网上搜索 "keil 生成 Lib" |
3楼: | >>参与讨论 |
作者: LPC900 于 2006/2/7 9:47:00 发布:
自己建立库文件(*.LIB)并不容易,需要注意方方面面的问题 1、必须懂得规范化C语言编程 重点是工程文件的组织形式,C源程序文件要与其头文件分开。头文件只能包括宏定义、函数声明(某些函数不希望被他人访问,可将其声明应当放在C文件里)、结构体定义、typedef定义等内容,同时要防止重复包含问题。全局变量、全局结构体对象、函数的具体实现等内容应当放在C文件里。如果想了解更多规范化编程的知识,建议认真读读林锐博士的名著《高质量程序设计指南--C++/C语言》。如果编程时没有注意到规范化问题,那么你自己生成的库文件很可能因漏洞百出而无法使用。 2、I/O操作问题 实际的单片机程序,不像字符串处理这样的功能,经常会涉及I/O操作。有关I/O的定义,如sbit等,可以放在头文件中。但是将来一旦生成库文件,库文件的用户就无法再更改这些I/O的定义,如果强制修改,则库文件中操作的依然是原先定义的I/O。 3、程序应当正确、规范、精简 库文件往往是交付客户使用的,因此首先要保证其正确性。其次是规范,这里的规范是指接口的规范问题,主要体现在头文件里。与Keil C51自带的库不通,未使用的函数仍然会占用ROM空间,因此写得精简的程序才能生成短小的库文件,以节省客户宝贵的存储器资源。此外还要考虑库文件的兼容性、可维护性(升级问题)、安全性等一系列问题。看来写出这样一份高质量的程序并不容易。 4、库文件的生成和使用 写完源程序,并经过验证无误后,另建一个工程用于生成库文件。新工程中只添加库的C源程序,不要有main()函数。在Keil C51的“Options for Target..”设置的OUTPUT选项卡里,选中“Create Library”项,然后确定。编译工程,不能出现任何错误和警告,否则要排查。编译后会生成后缀为“.LIB”的库文件。头文件和库文件要一并提供给客户,并附有详细使用说明书(不要指望客户去猜测你的意图)。客户使用时,要把库文件添加进工程(Keil C51自带的库文件无需添加),用到其中的库函数时,只需先包含其头文件。 |
4楼: | >>参与讨论 |
作者: 杨秀玮 于 2006/2/7 10:16:00 发布:
谢谢LPC900的热心指点,但请看我的代码 我建了一个工程,里面只有一个文件,是.C文件,文件名ku.c 其完整的代码如下: unsigned CHAR max(unsigned CHAR a,unsigned CHAR b) { if(a>=b) return(a); else return(b); } 然后编译设置生成库文件ku.lib 没有任何警告和错误。 再写一个头文件ku.h 其完整的代码如下: #ifndef __ku_h__ #define __ku_h__ extern unsigned CHAR max(unsigned CHAR a,unsigned CHAR b); #endif 然后再新建一个工程,把上述两个文件放在新工程的文件夹下,这个新建工程只有一个C文件,完整代码如下: #include "ku.h" void main(void) { unsigned CHAR c; c=max(2,0); c=max(3,5); c=max(10,100); } 编译没有错误,但有4个警告如下: linking... *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: _MAX MODULE: siyan.obj (SIYAN) *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: _MAX MODULE: siyan.obj (SIYAN) ADDRESS: 0008H *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: _MAX MODULE: siyan.obj (SIYAN) ADDRESS: 000FH *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: _MAX MODULE: siyan.obj (SIYAN) ADDRESS: 0016H Program Size: data=9.0 xdata=0 code=36 "siyan" - 0 Error(s), 4 Warning(s). 进入软件仿真,观察c的值,单步运行,程序运行不止,强制停止后c值始终为0 说明库里的函数根本没起作用啊!请教一下了,多谢各位! |
5楼: | >>参与讨论 |
作者: LPC900 于 2006/2/7 12:39:00 发布:
你要自己研究了 我只会给出指导性意见,具体实践还是要靠你自己。做一个好的库文件不是初学者工作,确实需要一定的经验。编译时不能有错误和警告,否则要仔细排查。 |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |