问题引出:为什么要做成lib库?

1、不想将自己写的源代码公开,但是同时库文件又需要让别人能够正常调用,那封装成lib的格式就是一个方法。

2、编译某些工程文件时非常耗时,像ST官方的库时,由于文件众多,编译一次可能得1两分钟,这时可以打包成库,节省不少的时间。但同时也不能用右键go to Definition 'XXX'来直接找到源文件定义了。

如何生成LIB库文件?

1. 创建空工程,准备好生成LIB库文件对应的.c和.h文件,如

commLib.h:

//commLib.h:void delay(int ms);unsigned char ccCrol(unsigned char org, unsigned char bitNum);unsigned char ccCror(unsigned char org, unsigned char bitNum);

commLib.c:

//commLib.c:void delay(int ms){ .......}unsigned char ccCrol(unsigned char org, unsigned char bitNum){ .......}unsigned char ccCror(unsigned char org, unsigned char bitNum){ .......}

2. 将这两个文件添加到项目中(只需要添加生成库所需要的头文件和源文件),并做以下设置:

选中Create Library

3. 编译之后在目录下生成对应的.LIB库文件了。

如何使用LIB库文件呢?

1. 新建一个项目,然后在你的项目中包含LIB库文件对应的头文件commLib.h。

2. 添加LIB库文件到项目中:

然后选择你要添加的LIB库文件:

添加完成之后就可以在项目中看到对应的库文件了:

3. 编译项目就OK了。

注意事项:创建lib的工程和使用lib的工程芯片型号要一致才可以!!!

Keil 下生成LIB库文件以及如何使用LIB库文件

如何生成LIB库文件?

1. 首先准备好生成LIB库文件对应的.c和.h文件,我这里用到的.c和.h文件分别是:

commLib.h:

/*======================================================*/

/* 延时函数,单位ms */

/* 晶振频率为11.0592MHz时延时1ms子程序 */

/*======================================================*/

void delay(int ms);

/*======================================================*/

/* 循环左移函数 2015年7月27日 21:34:44 */

/*======================================================*/

unsigned char ccCrol(unsigned char org, unsigned char bitNum);

/*======================================================*/

/* 循环右移函数 2015年7月29日 21:40:39 */

/*======================================================*/

unsigned char ccCror(unsigned char org, unsigned char bitNum);

commLib.c:

/*======================================================*/

/* 延时函数,单位ms */

/* 晶振频率为11.0592MHz时延时1ms子程序 */

/*======================================================*/

void delay(int ms)

{

int i, j;

for (i = ms; i > 0; i--)

{

for (j = 110; j > 0; j--)

{

}

}

}

/*======================================================*/

/* 循环左移函数 2015年7月27日 21:34:44 */

/*======================================================*/

unsigned char ccCrol(unsigned char org, unsigned char bitNum)

{

unsigned char i;

unsigned char high, low;

unsigned char after = org;

for (i = 0; i < bitNum; i++)

{

high = after & 0x80;

low = high >> 0x07;

after <<= 0x01;

after |= low;

}

return after;

}

/*======================================================*/

/* 循环右移函数 2015年7月29日 21:40:39 */

/*======================================================*/

unsigned char ccCror(unsigned char org, unsigned char bitNum)

{

unsigned char i;

unsigned char high, low;

unsigned char after = org;

for (i = 0; i < bitNum; i++)

{

low = after & 0x01;

high = low << 0x07;

after >>= 0x01;

after |= high;

}

return after;

}

2. 新建一个项目,将这两个文件添加到袄项目中,并做以下设置:

选中Create Library

3. 编译之后就可在项目目录下生成对应的.LIB库文件了。

如何使用LIB库文件呢?

1. 新建一个项目,然后在你的项目中包含LIB库文件对应的头文件commLib.h。

如图:

2. 添加LIB库文件到项目中:

然后选择你要添加的LIB库文件:

添加完成之后就可以在项目中看到对应的库文件了:

3. 编译项目就OK了。

在keil5 MDK 中,为一段代码封装LIB库

首先,创建一个工程,该工程选的芯片型号和原先的工程保持一致。

然后,导入源码,导入的源码不需要添加main.c 或者main()函数入口

lib库的名称最好和工程名称保持一致

编译,就会在output目录输出lib库

把输出的lib库文件和要提供给工程的.h文件添加到工程中

在新的工程中包含liba.h 调用liba.h 提供的接口就可以了