keil中生成个人库文件及调用方法
Keil C 库文件的制作
Keil C库文件的制作在实际工作中,我们可能通常要为我们的知识产权进行恰当的保护,这样我们就可能经常不方便以源代码的形式交付我们的劳动成果,所以这时候我们就需要将我们的执行码作为交付的方式交付使用方使用。
对此我们也就需要把我们所设计的对象,封装在执行码文档中,并且要保证不影响使用方的使用。
Keil C允许我们在一个工程中包含两类执行码文件,即.obj文件与.lib文件。
如图9-2:图9-2 项目中可包含.obj与.lib两类执行码文件下面我们来研究.lib封装执行码的方法。
先在我们的工程中包含一个Keil C中提供的库文件,如C51BS.LIB,然后在项目的工作空间中对文件名点右键。
如图9-3:图9-3 查看C51BS.LIB的设置选项选择“为文件C51BS.LIB设置选项”后,将出现C51BS.LIB库文件的一些重要信息。
如图9-4:图9-4 查看C51BS.LIB的设置选项我们这里特别关注一下图9-4中所说的模块这个概念。
如图9-5中关于模块的信息:图9-4 C51BS.LIB库的模块设置选项我们这样来理解,模块是库文件中一个完整的执行码整体,它在联合编译的时候将会被整体联入我们的目标文件中去。
这就意味着在一个库文件中的同一个模块里的执行码,无论我们在项目中有没有使用,它都将会被联入。
这个问题就是我们需要关注的问题。
如果我们的模块中有可能出现不希望总被联入的执行码,我们就必须要把它从现有的模块中独立出来,单独形成模块。
不要让额外的执行码来消耗我们的单片机程序空间。
为了创建一个好用的库,我们先从图9-5中了解一下库的空间逻辑关系。
了解了库空间逻辑关系后我们再来了解一下Keil C 所提供的lib51库管理工具,如图9-6:图9-5 库的空间逻辑关系图9-6 lib51命令表lib51为库文件管理提供了Create、Add、Delete、eXtract、List、Replace、Transfer这几个命令,关于这几个命令的具体说明,可以在Keil C编辑器中提供的帮助中找到,这里就不做详细地说明。
基于Keil u4创建库文件的图文教程
基于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调用主程序方法Keil is a popular integrated development environment (IDE) for the ARM microcontroller software development. It provides a user-friendly interface and powerful tools for designing, building, and debugging embedded applications. However, some users may encounter issues when trying to call a main program method in Keil.Keil是一种流行的ARM微控制器软件开发集成开发环境(IDE)。
它提供了用户友好的界面和强大的工具,用于设计、构建和调试嵌入式应用程序。
然而,一些用户在尝试在Keil中调用主程序方法时可能会遇到问题。
One possible reason for having trouble calling the main program method in Keil is the incorrect setup of the project settings. When developing an embedded application in Keil, it is crucial to ensure that the project settings are accurately configured to specify the main program method. Users must check the linker settings, startup code, and initialization routines to guarantee that the main program method is being correctly called.在Keil中调用主程序方法出现问题的一个可能原因是项目设置的不正确。
实验一 Keil软件的使用及简单程序的调试方法
实验一 Keil软件的使用及简单程序的调试方法一、实验目的掌握Keil的使用方法和建立一个完整的单片机汇编语言程序的调试过程及方法。
二、实验器材计算机1台三、实验内容1.Keil的使用方法。
2.建立一个单片机汇编语言程序的调试过程及方法四、实验步骤1.Keil的使用方法。
Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和C 语言的程序设计,界面友好,易学易用。
启动Keil 后的界面如下:几秒钟后即进入Keil的编辑界面。
用户便可建立项目及应用程序。
2.简单程序的调试方法Keil是通过项目工程来管理汇编程序的。
因此在调试程序前必须建立一个工程,工程名称及保存位置由用户来指定,注意每位同学的工程名称用“学号姓名实验*”来命名。
(1)建立一工程单击Project菜单,在弹出的下拉菜单中选中New Project选项。
并在弹出的对话框中确定保存的位置及工程名称。
又弹出一对话框,要求用户选择相应的硬件CPU及相关设置。
选择Atmel公司的AT89C51单片机。
如下图所示单击“确定”后在弹出的对话框中行选择“否”即工程建好了,但该工程没有任何语句,需要再建一个程序文件并将其添加到此工程中。
(2)建一文件单击“File”/“New”命令,则弹出文件的编辑窗口,此时该文件还没有指明其文件名称及保存位置,该文件还没有加载到所建立的工程中。
单击“File”/“Save”命令在弹出的对话框中指明文件的类型为.ASM汇编型及文件名后单击“保存”即可进行汇编源文件的编辑。
如下图所示。
(3)将文件添加到工程中单击“Target 1”前的“+”号则展开后变成“-”号,并右键单击“Source Group 1”在弹出的下拉菜单中执行“Add Files to Group ‘Source Group 1’”命令并弹出对话框在该对话框中的“文件类型”下拉列表中选择“Asm source file”后找到要添加的文件名并选中,单击“Add”即可。
KEIL安装与使用以及相关问题详解
首先是下载安装文件与破解文件,这个不详细说明。
你将会得到这两个文件!双击第一个安装文件!点击Next>>打勾,然后Next>>选择安装路径,建议默认即可。
Next>>1.随便写点什么。
Next>>2. 6等待安装结束即可安装完毕3.7把图上的钩钩打掉,然后完成4.8然后它会弹出这个,这个我们过后再讲,先将它关闭。
点击OK,点击是。
5.9然后你在桌面会得到keil5的图标,右键选择以管理员身份运行。
6.10打开后点击7.11 将如下代码复制8.12 打开我们的破解文件9.13 将复制的代码填入,并且选择ARM10.14 点击Generate,将生成的代码复制。
11.15粘贴到如图所示,点击Add LIC。
出现如图所示表示破解完成。
到这KEIL5的安装算是完成了。
接下来我们看看如何使用。
END方法/步骤2:安装库文件1. 1回到keil界面,点击如图所示按钮2. 2将弹出我们之前关闭的窗口,我们将图分成左右两边然后说明一下。
先说左边,左侧窗口主要选择你所使用的芯片或开发板,开发板我们没有就不管了。
这里我们选择的STM32F103ZE 芯片。
后边蓝色区域是芯片简要说明与库文件下载链接。
点击蓝色区域即可下载STM32F103ZE 的库文件。
3. 3这是我们刚下载库文件,双击安装。
然后一路Next>>完成即可,如果之前路径改变了,那么此时库文件也应改变。
(这里只是说明手动安装库文件的过程,实际不需要点链接下载安装,我们接着往下看)4. 4我们看右边,右边的packs显示了该芯片可以安装的相关支持。
Examples是实例代码。
5. 5根据图中的序号分别翻译过来就是(这里仅供参考)1.STMicrcoelectronice STM32F1系列支持的驱动程序和实例(有没有发现和之前下载的文件是一样的名字“STM32F1xx_DFP”实际上刚才是手动下载,在这可以直接点击lntall可以自动下载并自动安装)。
IAR里用户库文件的生成及调用
IAR里用户库文件的生成及调用1、首先新建一个项目,命名为LIBTEST2、在项目名处右键选择Option,进行配置项目,如图将输出文件修改为Library3.选择Library Configuration选项,将库类型选择为CLIB,如下图4、点击OK保存,然后新建一个C文件,命名为LIBTEST.c。
并添加至项目中去。
5、接下来便可以将编辑添加需要生成库的函数。
此处添加1个将16进制转换成ASIIC码的函数,函数内容如下:void HexToBCD(unsigned char *HexData, unsigned char *BCDData, unsigned char Length){unsigned char i;unsigned char m;for(i=0; i<Length; i++){m = (*(HexData+i) >> 4) * 10;//得出10位上的值*(BCDData+i) = (*(HexData+i) & 0x0f) + m;}}编译并链接,成功后输出如下图的编译信息。
由信息可知已经生成的库文件名为LIBTEST.r43 。
路径为:..\Debug\Exe\LIBTEST.r43再为此库文件编写一个头文件,对里面的函数进行声名6、新建一个正常的工程项目HexToASCII。
如下图所示,添加Main.c程序文件及上面生成的库文件,(之前的HexToASCII.c文件则可以删除掉了)并编译便可以如同调用Math.h头文件中的一些数学函数一样调用HexToASCII函数了。
下图为仿真调试截图。
Keil 下库的创建与使用(原创_总结)
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。
keil使用方法
第一步:新建一个文件夹第二步:双击图标,启动keil软件第三步:建立工程1.选择工具导入工程2.选择保存位置在刚才新建的文件夹——输入文件名——保存2.选择atlem——选择atc51——确定3.出现对话框选择否第四步:设置选项1.右键——为目标‘目标1’设置选项2.选择输出——勾选产生HEX文件——确定第五步:新建文件并保存1.新建文件2.保存3.在对话框文件名中加入后缀名(如果使用汇编语言加后缀名.SAM如果的是C语言加后缀名. C)第六步:编写程序花样彩灯程序:ORG 0START: MOV DPTR,#TABLE LOOP: CLR AMOVC A,@A+DPTRCJNE A,#01H,LOOP1JMP STARTLOOP1: MOV P1,AMOV R3,#20LCALL DELAYINC DPTRJMP LOOPDELAY: MOV R4,#20D1: MOV R5,#248DJNZ R5,$DJNZ R4,D1DJNZ R3,DELAYRETTABLE: DB 0FEH,0FDH,0FBH,0F7H DB 0EFH,0DFH,0BFH,07FHDB 0FEH,0FDH,0FBH,0F7HDB 0EFH,0DFH,0BFH,07FHDB 07FH,0BFH,0DFH,0EFHDB 0F7H,0FBH,0FDH,0FEHDB 07FH,0BFH,0DFH,0EFHDB 0F7H,0FBH,0FDH,0FEHDB 00H, 0FFH,00H, 0FFHDB 01HEND第七步:把程序加载到工程中进行编译1.右键——添加文件到组‘源代码组1’2.选择文件类型第二个3.点击文件——Add——Close第八步:编译第九步:使用双龙软件写入单片机1. 双击图标,打开双龙软件2选择Flash.3.点击.hex文件——打开4.点击确定5.点击编程KEIL C51 V8.06 完全汉化版下载地址:/f/19040345.html 双龙软件下载地址:/f/19064427.html。
第2章 keil软件使用说明
第2章Keil软件使用说明2.1 Keil工程的建立2.2 工程的设置2.3 编译和链接2.4 调试2.1 Keil1)进入Keil界面单击自己安装的Keilμvision2的图标。
进入Keil后,屏幕显示如图2-2所示。
图2-2 起动Keil软件时的界面2)建立一个工程选择菜单【Project】│【New Project】,界面如图2-3所示。
图2-3 新建工程文件界面3)保存工程选择工程要保存的路径,输入工程名。
例如,建立的文件夹名为“流水灯”,工程名也命名为“流水灯”,然后单击“保存”按钮。
此时,该工程已经建立,扩展名为.uv2,即项目名为“流水灯.uv2”,如图2-4所示。
图2-4 “保存新工程”对话框4)选择系统要用的单片机保存文件后弹出对话框,如图2-5所示,要求选择所设计系统要用的单片机,在此选择AT89C51单片机。
图2-5 “选择单片机”对话框4)选择系统要用的单片机在选择某个单片机,单击“确定”后,弹出如图2-6所示的对话框。
图2-6 “添加启动文件”对话框上述任务完成后,显示2-7所示的界面。
5)建立文件图2-8 新建文件界面选择菜单【File】│【New】,出现如图2-8界面。
在光标所在的窗口输入编写的源程序。
6)文件保存待录入源程序后,选择【File】│【Save】,保存文件为“流水灯.c”,和原来建立的项目放在同一个文件夹下。
如果源文件为汇编语言编写的,则扩展名为“.ASM”。
7)添加文件图2-9 添加文件中出现的菜单在项目窗口下,单击“Target1”前面的“+”,然后在“Source Group 1”选项上单击右键,弹出如图2-9所示对话框。
7)添加文件图2-10 “添加文件”对话框选择“Add Files to Group ‘Source Group 1’”选项,弹出要求添加进本项目的对话框。
如图2-10所示。
7)添加文件图2-11 添加了文件后的窗口将刚建立的“流水灯.c”选中,单击“Add”按钮或鼠标左键双击即可将本文件添加进本项目。
keil中生成个人库文件及调用方法
如何在keil中生成个人库文件及调用方法在网上找了些资料Keil中如何使用自己生成的LIB库代码积累多了,大家可能都尝试过自己写个库,方便调用,我最初的办法是把常用的函数放到一个个.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| 分类:STM32学习| 标签:lib keil文件调用函数|字号大中小订阅1、维护自己写的代码不被别人乱改动。
keil5调用函数
keil5调用函数Keil5是一款常用的嵌入式系统开发环境软件,其支持多种单片机芯片的开发。
在Keil5中,调用函数是非常重要的一种操作,下面将为大家详细介绍如何在Keil5中进行函数调用。
一、函数的定义与声明在Keil5中使用函数之前,必须先进行函数的定义与声明。
函数的定义是指函数体的实现,而函数声明则是指函数的名称、参数类型与返回值类型等信息的申明,这样编译器才能正确识别并使用该函数。
二、函数的调用1. 调用标准函数在Keil5中,可以直接调用C语言中的标准函数库,比如数学函数、字符串函数等。
这些函数在Keil5中已经预定义,可以直接调用,如下所示:``` C#include <stdio.h>#include <math.h>int main(){float num = 3.14;float result = exp(num); //调用math库函数exp()printf("e^%.2f = %.2f \n", num, result);return 0;}```2. 自定义函数的调用自定义函数的调用需要先进行定义和声明,如下所示:``` C#include <stdio.h>int add(int a, int b); //函数声明int main(){int a = 2, b = 3;int sum = add(a, b); //调用自定义函数printf("The sum of %d and %d is %d\n", a, b, sum); return 0;}int add(int a, int b) //函数定义{return a + b;}```3. 嵌套函数的调用在Keil5中也可以嵌套调用多个函数,如下所示:``` C#include <stdio.h>int add(int a, int b); //函数声明int sub(int a, int b);int main(){int a = 2, b = 3;int result = add(a, b) * sub(a, b); //函数嵌套调用printf("result = %d\n", result);return 0;}int add(int a, int b) //函数定义{return a + b;}int sub(int a, int b){return a - b;}```三、函数的返回值在Keil5中,函数可以有返回值,也可以没有返回值。
Keil_C51里面lib文件生成和调用方法(keil下的samples的BLINKY工程改编而来)
一、工程说明:.xh工程是生成C51lib文件的工程项目。
2.BLINKY工程是调用生成的lib文件的工程。
3.此工程是根据keil下的samples的BLINKY工程改编而来。
4.生成lib的方法是要在.c和.h文件中都要把函数声明为extern开头的函数。
5.文件中的函数要声明在#ifndef ..........#define .............#endif中。
6.在引用工程中要将lib文件添加到工程文件中,并在程序中添加生成lib文件的.h文件。
7、xh.h和xh.c是产生的xh.lib的源代码;BLINKY.C是调用xh.lib的源代码。
二、工程源代码:1、xh.h#ifndef __xh_H__#define __xh_H__extern void xhhs(void); /*在此声明lib的函数名,注意必须加上extern才能在以后的引用中使用;不加上extern表明是内部函数,加上之后表明是对外提供的一个接口,可以被外部的程序引用,此处与C++的公有属性和私用属性有相似之处*/#endif2、xh.c#include <REG51.H>#include <xh.h>void wait (void) { /* wait function */; /* only to delay for LED flashes */}extern void xhhs (void) { /*声明的功能函数,要加上extern*/unsigned int i; /* Delay var */unsigned char j; /* LED var */while (1) { /* Loop forever */for (j=0x01; j< 0x80; j<<=1) { /* Blink LED 0, 1, 2, 3, 4, 5, 6 */P1 = j; /* Output to LED Port */for (i = 0; i<20000; i++) { /* Delay for 10000 Counts */wait (); /* call wait function */}}}}3、* BLINKY.C - LED Flasher for the Keil MCBx51 Evaluation Board with 80C51 device*/ #include <REG51F.H>#include<xh.h> /*对生成lib库文件时的.h文件的引用*/// When you have enabled the option Stop Program Execution with Serial// Interrupt, the Monitor-51 uses the serial interrupt of the UART.// It is therefore required to reserve the memory locations for the interrupt// vector. You can do this by adding one of the following code lines:// char code reserve [3] _at_ 0x23; // when using on-chip UART for communication// char code reserve [3] _at_ 0x3; // when using off-chip UART for communication void main (void){xhhs(); /*调用lib库中的函数*/}三、附:Keil C里面lib文件生成方法(由网络上搜索而来)包含关系LCD1602.C里面包含LCD1602.HLCD1602.H的文件格式设置生成lib文件Lib文件调用添加lib文件对话框添加后的lib文件。
KEIL操作指导
开发工具介绍快 速 入 门一、基本操作步骤1. 点击运行 KEIL2. 创建项目3. 新建源文件4. 在项目中加载源文件5. 配置系统属性,选择生成 HEX 文件6. 编译7. 调试运行8. 点击运行在线编程工具软件 STC_ISP9. 装载 HEX 文件10.编程二、 Keil 简介Keil μVision3集成开发环境是Keil Software、 Inc/Keil Elektronik GmbH 开发的基于80C51内核的微处理器软件开发平台, 内嵌多种符合当前工业标准的 开发工具,可以完成从工程建立到管理、编译、连接、目标代码的生成、软件仿 真、硬件仿真等完整的开发流程。
尤其是C编译工具在产生代码的准确性和效率 方面达到了较高的水平,而且可以附加灵活的控制选项,在开发大型项目时非常 理想。
三、 操作步骤下面具体介绍如何开始单片机程序设计及简单调试。
1. 运行 Keil双击Keil快捷图标,进入Keil集成开发环境,界面如图1_1所示。
图1_1为安装Keil后初次打开的界面, 如果此前已经用Keil创建项目, Keil 启动后总是自动打开用户前一次保存的项目,此时可以点击工具栏的“Project” 菜单,选择其中的“Close Project”命令关闭当前项目。
图1-1 Keil启动界面2. 创建项目点击工具栏的“Project”菜单,在弹出的下拉菜单中选择“New Project”命令,创建一个新的项目并保存,如图1-2和 1-3所示。
图1-2 创建项目图1-3 保存项目这一阶段需要完成下列事情: (1)为你的项目取一个名称,项目名尽可能与要实现的功能说明一致,便于记忆,项目名不宜太长。
(2)选择项目存放的路径,建议为每个项目单独建立一个文件夹,并且项 目中需要的所有文件都放在这个文件夹。
(3)保存完毕,Keil会立即弹出如图1-4所示的器件选择窗口,在这一窗 口选择单片机厂商和具体型号。
keil使用教程
显示或隐藏工作簿窗口的标签 19)Option…: 设置颜色、字体、快捷键和编辑器选项
keil使用教程
2 Keil C操作界面
四、工程(Project)菜单
8)Toggle Bookmark:在当前行置书签
9)Goto Next Bookmark移光标到下一书签
10)Goto Previous Bookmark:
kei移l使用光教程 标到上一个书签
2 Keil C操作界面
11)Clear All Bookmark: 清除当前文件中所有的书签
12)Find… 13)Replace…:查找与替换 14)Find in Files…:
显示或隐藏代码覆盖窗口 12)Performance Analyzer Windows:
显示或隐藏性能分析窗口 13)Symbol Windows:
kei显l使Байду номын сангаас示教程 或隐藏符号变量窗口
2 Keil C操作界面
14)Serial Windows #1: 显示或隐藏串行口窗口1
15)Serial Windows #2: 显示或隐藏串行口窗口2
使能/禁止当前行的断点 11)Disable All Breakpoints:
禁止所有断点 12)Kill All Breakpoints:清除所有断点 13)Show Next Statement:
显示下一条指令
keil使用教程
2 Keil C操作界面
14)Enable/Disable Trace Recording: 使能/禁止跟踪记录
keil软件的使用方法
Keil 软件的使用随着单片机开发技术的不断发展,目前已有越来越多的人从普遍使用汇编语言到逐渐使用高级语言开发,其中主要是以C 语言为主,市场上几种常见的单片机均有其C 语言开发环境。
这里以最为流行的80C51单片机为例来学习单片机的C 语言编程技术。
大家都有C 语言基础,但是编单片机程序,大家还得找专门的书来学习一下。
这里我们只介绍Keil 这种工具软件的用法。
学习一种编程语言,最重要的是建立一个练习环境,边学边练才能学好。
Keil 软件是目最流行开发80C51系列单片机的软件,Keil 提供了包括C 编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(µVision )将这些部份组合在一起。
下面我以一个实验举一个例子,一步一步学习Keil 软件的使用。
首先我们看硬件原理图:很明显,要点亮使发光二极管,必须使单片机的I/O 口P1.0输出低电平。
于是我们的任务就是编程序使P1.0输出地电平。
1. 使用Keil 前必须先安装。
安装过程简单,这里不在叙述。
2. 安装好了Keil 软件以后,我们打开它。
打开以后界面如下:3.我们先新建一个工程文件,点击“Project->New Project…”菜单,如下图,:3.选择工程文件要存放的路径,输入工程文件名LED, 最后单击保存.4.在弹出的对话框中选择CPU 厂商及型号5. 选择好Atmel 公司的AT89S52 后, 单击确定1.在接着出现的对话框中选择“是”。
5.新建一个C51 文件, 单击左上角的New File 如下图所示:6.保存新建的文件,单击SA VE如下图:2.在出现的对话框中输入保存文件名MAIN.C(注意后缀名必须为.C),再单击“保存”,如下图;7.保存好后把此文件加入到工程中方法如下: 用鼠标在Source Group1 上单击右键, 然后再单击Add Files to Group …Source Group 1'如下图:8.选择要加入的文件 , 找到 MAIN.C 后 , 单击 Add, 然后单击 Close9.在编辑框里输入如下代码 :10.到此我们完成了工程项目的建立以及文件加入工程 , 现在我们开始编译工程如下图所示 : 我们先单击编译, 如果在错误与警告处看到 0 Error(s) 表示编译通过;11.生成 .hex 烧写文件,先单击Options for Target,如图;12.在下图中,我们单击 Output, 选中 Create HEX F。
keil的使用与操作
keil的使⽤与操作⼀、概述⼯欲善其事必先利其器。
Keil uVersion 4.0(后⽂简称为Keil 4.0)是单⽚机程序开发的集成开发环境(IDE),集成了C编译器、宏汇编、连接器、库管理和⼀个功能强⼤的仿真调试器。
本节以点亮⼀个LED为例,演⽰如何通过Keil新建⼯程、添加源⽂件、编译等基本操作。
⼆、Keil基本操作 ——以点亮⼀个LED项⽬为例本项⽬通过8051单⽚机的P2.0管脚控制⼀个红⾊LED,⽀持两种控制模式:长亮模式和闪烁模式。
电路图如下图所⽰,由图可知,P3.0输出低电平时,LED点亮;输出低电平时,LED熄灭。
项⽬程序由⼀个.c和⼀个.h组成,其中,LedCtrl.c为主程序,演⽰LED的两种控制模式;led.h为LED控制实现,定义了长亮函数LED_lit(bit flag)、闪烁函数LED_flash(unsigned int interval)和软件延时函数LED_delayMS(unsigned int ms)。
下⾯演⽰基于Keil完成本项⽬的开发过程。
1. 新建⼯程。
(1)运⾏Keil uVision4。
(2)选择菜单【Project>New µVersion Project】,打开Create New Project对话框。
(3)设置⼯程保存路径和⼯程名称。
注意,建议⼀个⼯程对应⼀个⽂件夹,⽅便管理。
(4)设置单⽚机型号。
在Select a CPU Data Base File对话框选择Generic Data Base,然后弹出的对话框中选择ATMEL>AT89C51,单击【OK】按钮。
(5)单击【否】按钮,选择不复制8051启动代码到⼯作⽂件。
到此,空⽩⼯程已经建好。
编写代码(1)选择菜单【File>New】(快捷键Ctrl+N)新建⼀个空⽩⽂件,则进⼊⽂件编辑状态。
(2)选择菜单【File>Save As】(快捷键Ctrl+S)将新建⽂件存储到⼯程⽬录LEDCtrl下,命名为led.h。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如何在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 调用Lib
2011-06-01 16:01:49| 分类:| 标签:|字号大中小订阅
1、维护自己写的代码不被别人乱改动。
lib 不是c 代码,不能对它编辑,只能通过.h 文
件调用。
所以为了别人能使用你的lib,一定要给他.h 文件。
2、可以把多个.c 文件合成一个lib 文件,这样在工程就不必要把每一个.c 文件都添加一
遍。
3、相比添加.c 文件,它具有不使用已经申明的extern 函数也不会出现Keil 经典的
UNCALLED FUNC warning。
更重要的是,不使用的函数编译时不会产生代码,从而大大减
小.hex 文件。
这对小容量的单片机来说是非常可贵的。
废话少说,下面以本人刚写的1602 程序为例一个教大家怎么生成和使用lib 文件。
为了实现上面说的lib 的第三个作用,大家要把独立的子函数用不同的.c 分开写。
因为
该.c 文件一旦使用,那么里面的子函数就会全部被编译,这样就不能达到不调用能节省rom 的目的了。
下面是写好的程序:
编译成功后,在project》options for target》Output 中,其设置如图。
点击确定之后就会在你的工程文件夹中产生一个1602.lib 的文件。
再在keil 的project workplace 中把lib 文件添加进去,并remove 掉除mian 函数的其他.c 文件,如图。
Keil的lib生成个人总结
1
1. 生成lib 的工程可以没有main函数,可以只有一个.c文件,一个.c文件中可以只有一个函数
用extern声明各全局变量和函数.
2. 需要在lib工程中建立一个.h文件, 必须
3. 调用lib文件的工程中必须包括lib中的.h文件, 也就是lib工程和调用工程都包含同一个.h文件(好像有点废话)
2.Lib的文件要分的细一点,没有调用关系的两个函数不要放到同一个C文件中. 没有调用关系的最好是一个函数单独放在一个.c文件中.这是为了避免在keil中应用程序调用lib库里出现告警. 因为LIB51在链接的时候是按模块来链接的,一个模块就对应一个C文件,假如链接器因为要使用你一个函数fA而引入了A模块,那么A模块中的另外的函数也会被引入,而另外的函数你又没有使用的话,那么就会引发Keil经典的UNCALLED FUNC的warning。
通常为每一个函数编一个.C文件,而整个lib用一个.h文件,这样就可以使只有被调用的函数参与连接
3.调用lib库时需要在工程中将.lib文件加进来. 在Group中右键,然后Add ,注意文件类型中选择*.lib.
暂时就总结到这里,很重要哟.
LCD1602.C里面包含LCD1602.H
LCD1602.H的文件格式
设置生成lib文件
L ib文件调用
添加lib文件对话框
添加后的lib文件
呵呵^_^,这样就可以删除LCD1602.C文件了,只留下LCD1602.Lib和LCD1602.H文件就可以咯
在协同工作中,经常会有模块维护和代码封装的问题。
把需要封装的代码打成一个lib无疑是一种很好的方式。
1.创建lib
创建一个lib很容易,只需要创建一个target,然后把需要封装的代码全部加进来,然后再Options of Target 中选择Create Library,然后编译,因为是lib所以不需要链接,编译过了,你的lib就创建了。
当然了,为了别人可以轻松的使用,请提供头文件支持哦。
2.使用lib
使用lib就更容易了,把lib和头文件加入你的工程,直接调用就是了。
lib库会和你工程中其它编译后的obj 一起链接,形成最后的目标文件。
3.注意事项
首先,Startup和中断处理程序不要封入LIB,这些程序会在链接的时候产生问题。
具体的原因么,有点复杂,应该是中断程序的link机制有所不同的关系吧。
其次,Lib的文件要分的细一点,没有调用关系的两个函数不要放到同一个C文件中,因为LIB51在链接的时候是按模块来链接的,一个模块就对应一个C文件,假如链接器因为要使用你一个函数fA而引入了A 模块,那么A模块中的另外的函数也会被引入,而另外的函数你又没有使用的话,那么就会引发Keil经典的UNCALLED FUNC的warning。
这个warning在Keil的文档中说的好清楚了,我粘过来吧:
It is common practice during the development process to write but not call
additional functions. While the compiler permits this without error, the
Linker/Locator does not treat this code casually because of the support for data
overlaying, and emits a warning message.
Interrupt functions are never called, they are invoked by the hardware. An
uncalled routine is treated as a potential interrupt routine by the linker. This
means that the function is assigned non-overlayable data space for its local
variables. This quickly exhausts all available data memory (depending upon the
memory model used).
If you unexpectedly run out of memory, be sure to check for linker warnings
re lating to uncalled or unused routines. You can use the linker’s IXREF
directive to include a cross reference list in the linker map (.M51) file.
大意就是说,Keil的内存应用模式是指定地址的,也就是要根据调用关系来决定哪块地址可以被复用。
对于这种没人调用的函数,Keil会认为是中断处理程序,并不能决定调用关系,所以此类uncalled函数的空间不能和其他的程序共享,也就是说,这函数用多少RAM,你就少多少RAM。
那uncall多了会怎么样?----废话,当然是内存溢出了。
所以,lib的功能可以做的大而全,但是里面的模块一定要分的要多细,有多细,只有这样,你才能像在windows上用CRT一样舒服的使用LIB。