登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

请问如何使用自己创建的KEIL库?

作者:杨秀玮 栏目:MCU技术
请问如何使用自己创建的KEIL库?
请问,我在KEIL中自己创建了一个库,但是不知如何使用啊。烦请好心人指点一下如何使用!库需要放在哪个目录下?是否需要在工程中添加库?是否需要创建头文件?头文件里写些什么?是否需要外部声明?KEIL环境如何设置?等等!谢谢



2楼: >>参与讨论
zlg900
re
在keil的hlp目录下的英文文档中有详细介绍.

或者在网上搜索 "keil 生成 Lib"

3楼: >>参与讨论
LPC900
自己建立库文件(*.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楼: >>参与讨论
杨秀玮
谢谢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
你要自己研究了
我只会给出指导性意见,具体实践还是要靠你自己。做一个好的库文件不是初学者工作,确实需要一定的经验。编译时不能有错误和警告,否则要仔细排查。

参与讨论
昵称:
讨论内容:
 
 
相关帖子
请问如何掉高LPC900的时钟精度?
lpc900有没有5V电源供电的?
LPC901的标示字节是唯一的吗?
紧急求助!!
祝大家新年快乐,万事如意
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号