KEIL中如何生成lib文件
- 格式:pdf
- 大小:164.79 KB
- 文档页数:3
Keil C51工程模版创建
1、建立工程文件夹,在工程文件夹根目录下建立Output、Listing、scr和lib文件夹。
2、创建工程
3、创建main.c文件
4、更改输出路径
更改Output输出路径(如下图):
更改Listing输出路径: 方法和Output基本类似
5、更改头文件包含路径
为了统一管理用户编写的.C文件和头文件,我们把.C文件放到scr 文件夹,把头文件放到lib文件夹,但是,如果头文件与工程文件不在同一个目录下,编译时会找不到头文件,下面是讲解如何更改头文件包含路径。
同样第一步是打开Target Options设置界面,然后进行相应的设置,如下图:
修改路径。
基于Keil u4创建库文件的讨论 相信很多学习51单片机的朋友,特别是高级学习者,都特别想创建一个属于自己的库文件吧。
把自己常用的函数封装到一个库中,供自己和别人使用,不仅在编写大程序凸现优越性,而且能有效保护自己的知识贡献,何乐而不为呢!好了,废话不多说,下面我就来详细讲一讲如何成功地在Keil中建立自己的库文件,并且保证在最后的项目中结果是0错误、0警告。
一、首先讲一下第一种做法1、首先在桌面上建立一个工程文件夹lib,见下图2、打开Keil(我用的是u4,不同版本若有不一样的地方,请读者自己解决)。
新建工程lib。
其中弹出的一个对话框,问是否要生成startup.a51文件,我选了“是”。
(暂时没研究这个文件)如图:3、提前用记事本写好下面两个C延时文件(暂以2个来讲,多个就差不多了)和一个头文件,C文件放在工程目录里,头文件话在Keil安装目录的INC文件夹内,然后添加两个C文件进工程。
如:头文件:DELAY.H#ifndef _DELAY_H_ //读者可尝试将extern去掉,看看有何影响#define _DELAY_H_ //我去了之后,感觉好像没啥影响,不知为何extern void delay1s();extern void delay5ms();#endifc文件1:delay.1s.cvoid delay1s(){unsigned char i,j,k;for(i=100;i>0;i--)for(j=20;j>0;j--)for(k=248;k>0;k--);}c文件2:delay5ms.cvoid delay5ms(){unsigned char i,j;for(i=10;i>0;i--)for(j=248;j>0;j--);}4、然后在target option中的output选项栏勾选create library,编译,并把生成的lib.lib文件复制到Keil安装目录下的LIB文件夹内。
Keil工程文件的建立Keil 工程文件的建立、设置与目标文件的获得单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为 CPU 可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。
机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51 单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil 软件是目前最流行开发 MCS-51 系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持 Keil 即可看出。
Keil 提供了包括 C 编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。
运行 Keil 软件需要Pentium 或以上的 CPU,16MB 或更多RAM、20M 以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP 等操作系统。
掌握这一软件的使用对于使用 51 系列单片机的爱好者来说是十分必要的,如果你使用 C 语言编程,那么 Keil 几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用C 语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
我们将通过一些实例来学习Keil 软件的使用,在这一部份我们将学习如何输入源程序,建立工程、对工程进行详细的设置,以及如何将源程序变为目标代码。
图 1 所示电路图使用89C51 单片机作为主芯片,这种单片机性属于 MCS-51 系列,其内部有 4K 的 FLASH ROM,可以反复擦写,非常适于做实验。
89C51 的 P1 引脚上接 8 个发光二极管,P3.2~P3.4 引脚上接4 个按钮开关,我们的第一个任务是让接在 P1 引脚上的发光二极管依次循环点亮。
利用Keil C51制作原代码保密的库为想封装成库的代码制作库的步骤如下:1、利用Keil新建一个工程,假设工程名叫xxx;2、在此工程下新建两个文件,分别命名为xxx.c和xxx.h。
将这两个文件都添加到工程中;此处建议,所有的名字尽量与工程名相同。
3、用如下形式组织xxx.h文件:#ifndef __文件名_H__#define __文件名_H__/* 这部分是头文件的正文 */#endif这种组织形式主要是为了防止头文件的重复包含问题。
“__文件名_H__”的命名可以是随意的,但一般的命名方法如下例所示: 假如要生成名为“mylib.lib”的库文件,对应的头文件名为“mylib.h”,则宏名一般被命名为“__MYLIB_H__”(名字全用大写,用“_”代替了“ .”,并且在宏名两侧都加上了双下划线)头文件的正文部分一般是供库外调用的函数的原型声明,并且,一般在最前面加上 extern 关键字。
注意:1、头文件一般只包括宏定义、函数声明(某些函数不希望被他人访问,可将其声明放在对应的.C文件里)、结构体定义、typedef定义等内容,同时要防止重复包含问题。
全局变量、全局结构体对象、函数的具体实现等内容一般应当放在.C文件里。
2、头文件中定义(不是声明)的全局变量要用“static”修饰,以避免出现重复定义的错误!比如:static int index;。
但是,用static修饰的头文件中的全局变量不能在使用库的程序中直接访问(读和写)。
要读,可以通过库内(xxx.lib对应的xxx.c)函数的返回值实现;要写,可以通过调用库内(xxx.lib对应的xxx.c)的函数实现。
4、编辑xxx.c文件。
这个文件的内容是对头文件中声明的函数和一些库内函数进行具体的功能定义,编写方法与普通的C程序一样。
5、进行工程选项的设置,使之编译后能够生成xxx.lib文件。
在Keil C51的“Project\Options for Target..”设置的Output选项卡里,选中“Create Library”项,然后确定。
keil 静态库生成和使用方法以Keil静态库生成和使用方法为标题一、什么是Keil静态库Keil静态库是一种可重用的代码库,它包含了一组已经编译好的函数、变量和其他代码片段,可以供用户在不同的项目中重复使用。
使用Keil静态库可以简化项目开发流程,提高代码的可维护性和复用性。
二、Keil静态库的生成1. 创建Keil工程首先,我们需要在Keil中创建一个新的工程。
可以选择适合的设备型号,并确定工程的存储位置。
2. 编写代码在Keil工程中,我们可以编写需要的函数、变量和其他代码片段。
这些代码片段将被编译成目标文件,并最终生成静态库。
3. 配置编译选项在Keil的工程设置中,我们需要配置编译选项。
这包括选择合适的编译器和编译选项,以及设置目标文件的输出路径和文件名。
4. 编译工程在完成编写代码和配置编译选项后,我们可以编译整个工程。
编译过程将会生成一系列的目标文件,其中包括我们编写的代码片段。
5. 链接生成静态库在编译完成后,我们需要将目标文件链接成一个静态库。
在Keil 中,可以通过设置链接选项来完成这个过程。
链接选项包括指定目标文件和库文件的路径,设置库文件的输出路径和文件名等。
6. 生成静态库最后,我们可以通过执行链接操作来生成静态库。
生成的静态库文件可以被其他项目引用和使用。
三、Keil静态库的使用1. 创建新的Keil工程首先,我们需要创建一个新的Keil工程,用于引用和使用静态库。
同样,我们需要选择适合的设备型号,并确定工程的存储位置。
2. 配置编译选项在新的Keil工程中,我们需要配置编译选项。
这包括选择合适的编译器和编译选项,以及设置目标文件的输出路径和文件名。
3. 配置链接选项在工程设置中,我们需要配置链接选项,以引用和使用静态库。
这包括指定静态库文件的路径和文件名。
4. 编写代码在新的Keil工程中,我们可以编写需要的函数、变量和其他代码片段。
在编写代码时,可以直接调用静态库中的函数和变量,以实现代码的复用。
如何在keil中生成个人库文件及调用方法在网上找了些资料代码积累多了,大家可能都尝试过自己写个库,方便调用,我最初的办法是把常用的函数放到一个个.C文件里头,要用的时候就把一个个.C添加到Group里面,这种方法就很麻烦了,每次新建一个工程都要ADD半天这里8279.C,delay_ms.c,watchdog.c,function.c都是我以前写过现在拿来重用的代码这样做还有一个问题,如果某个函数未调用,编译器就会给一个警告,UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESS,"未调用的段,被忽略",虽然无啥大碍,但看着也挺不爽的于是自己生成LIB文件,.lib是生成了,但就是没能用,始终有警告*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL未解析的外部标号*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL引用外部为解析的段因为编译器没有找到那个函数的代码,也就未解析了,百度了一下,前几个结果竟然都没给出一个有效的解决办法其实问题很简单,你在Group上右键ADD时注意一下对话框中允许添加的文件扩展名,除了c,asm之外,还有lib,把你的lib文件加进去,ok了--------下面是我用库的一些记录--------------------------------------------------------------------库的生成库的使用(在group中添加lib文件),在主调的C文件中include .h文件KEIL中库可以由多个.obj(与.C对应)组成,而连接是以.obj为最小单元,即某.obj中有函数被调用时,则整个.obj中所有函数都会被连接到.hex文件通常为每一个函数编一个.C文件,而整个lib用一个.h文件,这样就可以使只有被调用的函数参与连接Keil 生成Lib 调用Lib2011-06-01 16:01:49| 分类:| 标签:|字号大中小订阅1、维护自己写的代码不被别人乱改动。
stm32教你如何编译出LIB文件这个是生成LIB 的技巧.也许大家在网上看到某些程序会发现,他们用这个方式来包含STM32 的库文件:而不是像DX32 的例程那样一堆C:那么,本技巧篇例程就是教大家怎么生成那个.LIB 的文件的.首先打开本程序,大家看到的整个工程就只有库文件:因为这是把STM32 的函数库编译成库的形式,所以你只需要包含函数库就行.然后注意一点,stm32f10x_conf.h 文件中,所有的include 都要开放#include “stm32f10x_adc.h”#include“stm32f10x_bkp.h”#include“stm32f10x_can.h”#include “stm32f10x_crc.h”#include“stm32f10x_dac.h”#include “stm32f10x_dbgmcu.h”#include“stm32f10x_dma.h”#include “stm32f10x_exti.h”#include“stm32f10x_flash.h”#include “stm32f10x_fsmc.h”#include“stm32f10x_gpio.h”#include “stm32f10x_i2c.h”#include“stm32f10x_iwdg.h”#include “stm32f10x_pwr.h”#include“stm32f10x_rcc.h”#include“stm32f10x_rtc.h”#include “stm32f10x_sdio.h”#include“stm32f10x_spi.h”#include“stm32f10x_tim.h”#include “stm32f10x_usart.h”#include“stm32f10x_wwdg.h”#include“misc.h”/* High level functions for NVIC and SysTick (add-on to CMSIS functions)*/这是因为当这堆C 文件编译成*.LIB 后,里面的内容将是恒定的,不能裁减的.(这是C 语言的理念,跟编译器什么的无关),所以我们必须开放所有H 文件,这样编译出来的LIB 文件才是全能的.这个理解,就和普通的DX32 例程中包含一大堆C 文件的意义是一样的.只不过是我们先把库函数那部分预先编译成LIB 文件.tips:感谢大家的阅读,本文由我司收集整编。
Keil 下库文件的创建和使用(原创/总结)对Keil我们大家可能都不陌生,从开始学习51开始就使用,那时还是Keil2直到现在Keil4,但却从未在Keil下创建过库文件。
使用库文件也有不少好处,比如:1、保密,维护自己的原创代码不被随意修改。
使用库文件别人就无法修改你的源文件,但可以使用。
2、可以实现软件的模块化。
在一个项目中,若由几个人一起完成,可以将一些通用的函数,驱动等封装成库文件。
3、在Keil中,若源文件中有出现你认为没有问题但在编译时又出现警告的地方,生成库文件后使用,是不会报警告的。
比如你定义了一个函数,但目前又没用到,则编译时会出现“UNCALLED FUNC warning”的警告,相信很多同仁都遇到过吧。
在网上查找了不少关于在Keil中创建库文件的资料,结合相关资料自己尝试了一下,现在总结出来给大家分享,特别是其中的一些要注意或容易被忽略细节。
现以一个DS12C887驱动为例来说明,其中C源文件名称为“DS12C887C.c”,头文件为“DS12C887H.h”步骤如下:1、新建一个工程,图1 创建一个新工程2、在工程的左侧project workplace窗口“Source Group 1”上点击右键选择添加文件,向工程中添加你希望创建成库文件的原文件。
注意:(1)项目里只添加希望创建成库文件的原文件的C源程序“DS12C887C.c”,不要有main函数,函数声明放在头文件中以便发布,并做好详细的使用说明。
(2)C源程序“DS12C887C.c”中用到的头文件应全部放到与之相对应的头文件中,而不要放到C源文件中(如图3),因为放到C源文件中生成库文件后不能再编辑。
而在其对外部开放的头文件“DS12C887H.h”中。
图2 添加文件图3 源文件中的头文件包含3、在工程的左侧project workplace窗口右键点击“Target 1”,选择Optionsfor ‘Target 1’…图4 进入设置4、在“OutPut”标签中进行图5显示的设置,设置完成点击OK。
固件库采用3.5.0版本USE_STDPERIPH_DRIVER,STM32F10X_CL1.首先建立工程文件,将固件库中的文件复制过来建立工程文件夹project,包含文件夹user:用户可自己修改的文件CMSIS:Cortex-M3内核相关文件startup:启动单片机的汇编文件driver:外设操作的驱动文件具体向工程文件夹中添加的文件为:将路径:固件库文件夹\Project\STM32F10x_StdPeriph_Template中的stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h文件添加到user文件夹,再在其中建立一个main.c主文件将路径:固件库文件夹\Libraries\CMSIS\CM3\CoreSupport中的core_cm3.c、core_cm3.h 文件,以及固件库文件夹\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x中的stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h文件添加到CMSIS文件夹将路径:固件库文件夹\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm 中的startup_stm32f10x_cl.s(互联型启动文件)文件添加到startup文件夹将路径:固件库文件夹\Libraries\STM32F10x_StdPeriph_Driver中的src和inc文件夹全部复制到driver文件夹2.在Keil中建立工程并管理工程文件3.设置Keil与编译相关的选项USE_STDPERIPH_DRIVER,STM32F10X_CL4.添加代码中断代码添加在stm32f10x_it.c中。