dabor                   

  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  131 随笔 :: 0 文章 :: 101 评论 :: 0 Trackbacks
Keil 编译器不让我们随心所欲地使用自定义库函数, 因为如果你调用了一个自编写的 Delay.lib 库中的库函数, 
如 Delayms (1000); 则 Delay.lib 库中所有函数都将加入到你的程序中, 例 Delay50us 等. 而 Keil 自己的库函数
则不存在这个问题, 例如调用 STRING.H 中的 strlen 函数, 它不会把 strcmp 等函数加入到你的程序中.

不得已, 只有使用笨办法, 以尽量让自己方便程序的编写:
在 C51\INC 下建 delay.h 文件:

#ifdef	add_Delayms
	#include	"delay\delayms.c"
#endif

#ifdef	add_Delay50us
	#include	"delay\delay50us.c"
#endif

再在这个目录下建目录 delay, 目录里分别写各个函数的原程序:

delayms.c:


void Delayms (unsigned int count);


/*----------------------------------------
  1mS 延时 函数

参 数:	count:	count x 1mS
----------------------------------------*/
void Delayms (unsigned int count)
{
	unsigned int	i;
	unsigned int	j;

	for (j=0; j<count; j++)
		for (i=0; i<124; i++);	// 根据 CPU 时钟修改 i 的循环值
}


delay50us.c:



void Delay50us (unsigned char count);


/*----------------------------------------
  50uS 延时 函数

参 数:	count:	count x 50uS
----------------------------------------*/
void Delay50us (unsigned char count)
{
	unsigned char	i;
	unsigned char	j;

	for (j=0; j<count; j++)
		for (i=0; i<13; i++);	// 根据 CPU 时钟修改 i 的循环值
}
 
 
 
最后在主程序中调用:


#include	<at89x52.h>
#include	<define.h>

//--- 自编库函数 ---
#define		add_Delayms
#define		add_Delay50us

#include	<delay.h>


/*----------------------------------------
  主函数
----------------------------------------*/
void main (void)
{
	while (TRUE)
	{
		Delayms (1000);
		Delay50us (5);
	}
}



虽然感觉有点笨, 但还是方便了些, 如果编译时出现提示某个函数没有被使用, 只需注释掉一行就行, 例:

#include	<AT89X52.H>
#include	<DEFINE.H>

//--- 自编库函数 ---
#define		add_Delayms
//#define	add_Delay50us

#include	<DELAY.H>


/*----------------------------------------
  主函数
----------------------------------------*/
void main (void)
{
	while (TRUE)
	{
		Delayms (1000);
	}
}

posted on 2008-07-28 16:14 dabor 阅读(620) 评论(2)  编辑 收藏 引用 所属分类: 11 C51

评论

# re: 0003-自定义库函数的问题 2009-01-08 21:52 qboy
博主是否在制作库的时候使用了一个.c文件?想要制作和keil自带库一样功能的库,需要在建库时将可能独立调用的函数拆到几个独立的.c文件内,再将这几个.c文件作为一个工程一同编译成.lib。这样,使用时只要未调用的函数模块是不会将该函数链接到你的程序代码内的,也不会出现“xxx函数未使用”的warning。  回复  更多评论
  

# re: 0003-自定义库函数的问题[未登录] 2009-03-20 11:59 zjj
keil c51这点让人恨死. 如果按qboy的方法, 如果有上百个函数怎么办? TI dsp有相似的问题, 但可以建lib时在编译选项增加一条每个函数单独编译到一个subsection里,就可以只链接调用了的函数.  回复  更多评论
  

只有注册用户登录后才能发表评论。