KEIL MDK教程Word文档格式.docx
《KEIL MDK教程Word文档格式.docx》由会员分享,可在线阅读,更多相关《KEIL MDK教程Word文档格式.docx(27页珍藏版)》请在冰豆网上搜索。
(2)在当前文件中查找。
在编辑框中输入要查找的关键字,按回车即可查到,连续按回车会跳到下一处。
(3)在当前文件中查找。
单击后会弹出查找对话框,能进行一些设置,比如大小写区分等。
4.设置书签快捷按钮:
(从左向右依次为标签1、2、3、4)
这个功能还是很实用的,想象一下,当你的一个文件有很多代码的时候,寻找你需要的代码行就变得很不容易,这个时候,设置书签快捷键就派上了用场!
(1)设置书签。
将鼠标定位到要标记的代码行,单击该图标则在代码行的左侧设下一个书签,再次单击该按钮,取消该代码行的书签。
(2)跳到上一书签。
(3)跳到下一书签。
(4)取消所有书签
5.调试快捷按钮:
(1)点击此按钮进入调试界面
(2)设置断电。
单击要设计断电的代码行,再单击此按钮,则为该代码行设置了断点,再次单击,取消所设的断点。
通常设置断点是在debug窗口的要设断点代码处双击,再次双击取消设置断点。
(3)使能/禁止断点。
将鼠标定位到一个已经设置了断点的代码行处,单击此按钮,该断点被禁止,再次单击该按钮,断点使能。
(4)使能/禁止所有断点。
(5)取消所有断点。
哎呀,有事要回去了,明天接着写。
一晚上过去,继续写。
6.工程视图和配置快捷按钮:
(1)工程视图快捷按钮。
这相当于一个下拉菜单,里面有绝大多说的工程窗口。
这个按钮用来显示/禁止工程内的窗口。
比如常常会有人把工程空间窗口或者编译输出窗口不小心关掉却又不能把它再显示出来,这个时候就可以通过单击这个快捷按钮的相应内容来显示。
另外,该按钮实现的功能都可以在菜单view中设置。
(2)配置快捷按钮。
点击一下出现图4所示的界面:
图4
(1)编辑选项卡。
用来设置一些编辑信息,比如缩进的设置,显示行号设置,界面显示效果等等。
(2)设置代码、关键的颜色和字体。
如果默认的关键字颜色,代码颜色,代码字体、大小不符合你的习惯,可以在这里进行更该,在这里还可以更改用户自定义关键字。
(3)设置用户关键字。
非常非常好用的一个功能,它可以使你自己定义的关键字像系统关键字一样高亮显示。
假如你有想写一个移植性比较高的程序,通常一些和编译器无关的变量类型需要这样定义:
typedefunsignedchar
uint8;
/*
无符号8位整型变量
*/
typedefsigned
char
int8;
/*有符号8位整型变量
typedefunsignedshortuint16;
/*无符号16位整型变量*/
然后在其它模块中都是这样定义一个无符号8位整形变量:
uint8test;
//定义变量
这样有一个什么问题呢?
就是uint8这个虽然是用户定义的关键字,但是它并不能像系统关键字那样高亮显示。
怎么办呢?
完全有办法解决,而且就是在这个标签卡中就可完成。
方法如下:
a.打开UserKeywords标签卡。
在左侧窗口选择文件类型,比如ARM:
EditorCFile;
在右侧窗口点击
按钮,新建一个用户关键字编辑框,输入用户定义的关键字,比如uint8,这样在程序代码中,所有的uint8都会高亮显示。
(4)设置快捷键。
这个我没有用过,所以不多说明。
(5)模板代码。
这又是一个比较实用的功能,模板既有软件自带的,也可以自己编辑模板。
可以在你书写程序的时候使用这一功能加快代码的输入。
使用方法:
a.先在该选项卡中编辑自己的代码模板,也可以之用软件自带的模板。
b.使用上面6-
(1)所说的工程视图快捷按钮,保证该按钮下拉菜单中Templates被选中;
选中后会在工程工作空间(ProjectWorkSpace)中出现:
标签。
c.在编写代码时,应用即可。
7.目标工具选项(TargetOptions…):
这个是最常用而且最重要的快捷按钮和设置点。
这里以LPC2114为例详细做讲述,其它CPU与之类似。
µ
Vision可以设置目标硬件的选项。
通过上面的工具栏按钮或Project-OptionsforTarget菜单项打开OptionsforTarget对话框,如图5所示。
在Target页中设置目标硬件及所选CPU片上组件的参数。
(1)设备选项卡(device)。
图5
在这里可以在图中2区域更改所使用的CPU,图中3区域是该cpu的一些描述。
(2)硬件目标设置选项卡(Target),见图6所示。
图6
1:
选择硬件目标设置选项卡
2:
指定用于的晶振频率
3:
在应用中可以选择实时操作系统(RTOS)。
Keil提供:
∙:
它是一个非常有效的RTOS,支持抢占式的任务调度、消息和信号传送、信号量等等。
完整的版本带有源代码和包含一个Flash文件系统和TCP/IP协议栈。
4:
指定选择ARM或者Thumb模式进行代码生成。
5:
利用Cross-Module优化为全局代码优化创建一个链接反馈文件。
6:
使用MicroLib库。
为进一步改进基于ARM处理器的应用代码密度,RealViewMDK采用了新型microlibC库(用于C的ISO标准运行时库的一个子集),并将其代码镜像降低最小以满足微控制器应用的需求。
MicrolibC库可将运行时库代码大大降低。
7:
选择大端模式。
编译器默认都是小端模式,NXP的LPC2114处理器只支持小端模式,所以该项变成了灰色。
三星的S3C2440既支持大端也支持小端,这样的处理器该项就可以选择了。
8:
利用交叉模块优化创建一个链接反馈文件以实现全局代码优化。
11:
片外ROM设置,最多支持3块ROM(Flash),在Start一栏输入起始地址,在Size一栏输入大小。
若是有多片片外ROM,需要在13区域设置一个作为启动存储块,程序从该块启动;
有几块ROM需要选中对应的9区域。
12:
片内ROM设置。
设置方法同片外ROM,只是程序的存储区在芯片内集成。
17:
片外RAM设置。
基本同片外ROM,只是若选中19、20区域后,对应的RAM不会被默认初始化为0。
18:
片内RAM设置。
设置方法与片外RAM相同,只是数据的存储区域在芯片内集成。
(3)输出选项卡(Output),见图7所示。
图7
选择输出选项卡
指定输出文件的文件夹,这样做可以减少工程文件夹文件的数目。
3.可执行文件的名字。
可执行文件指生成的.hex文件,因此应先使能4区域。
使能后会产生可执行文件。
5.创建批文件
6.生成库文件
(4)列表选项卡(Listing),见图8。
图8
选择列表选项卡
指定输出文件的文件夹,这样做可以减少工程文件夹文件的数目。
设置生成/禁止一些.lst、.txt文件。
4.设置生成/禁止一些.map文件(生成的代码详细信息就在这个文件里)
(5)用户程序选项卡(User),见图9。
图9
选择用户选项卡。
编辑源文件前运行用户程序。
编译前运行用户程序。
编译后运行用户程序。
图中所示的是运行fromelf.exe程序生成.bin文件,详细方法见博客:
(6)C/C++选项卡,见图10。
图10
选择C/C++选项卡。
定义预处理符号。
假如有一段代码使用了条件编译,如下所示:
#ifABC
void
delay_tus(uint32
dly)
{
uint8i;
for(;
dly>
0;
dly--)
for(i=0;
i<
4;
i++);
}
#endif
如果你想让编译器编译这段代码,有两种方法:
第一种方法:
使用#defineABC
第二种方法:
在图中2区域所示的编辑框中输入ABC。
多个符号用逗号隔开。
使能/禁止ARM状态与Thumb状态交互。
为了更好的优化存储空间,请使能该选项。
设置优化级别,共4级。
Level0为不优化,Level3为最高级别优化。
一般选择default,即Level2级优化。
附加的优化选项。
输出警告信息设置。
为了更好的检查程序,设置成All即可。
头文件路径设置。
(7)Asm选项卡,见图11。
与C/C++选项卡。
图11
该选项卡与C/C++选项卡十分类似。
这里重点说说图中红色区域条件汇编控制符号的应用,因为这个在启动代码中可能会用到的。
摘录一段启动代码:
IF
:
DEF:
EXTERNAL_MODE
LDR
R0,=PINSEL2
R1,=PINSEL2_Val
STR
R1,[R0]
ENDIF
在这段代码中,如果在图中1区域的编辑框中输入了符号:
EXTERNAL_MODE,则本段代码被编译。
(8)连接选项卡(Linker)
对于不是特别大或者特殊的程序,选项卡的内容默认即可,编译器会自动按照你的设置生成连接选项。
(9)调试选项卡(Debug),见图12。
图12
打开调试选项卡。
使用软件仿真。
使用硬件仿真。
(使用H-JTAG仿真参见我的博客:
或者使用L-LINK仿真参见我的博客:
4,5:
选中后,点击调试按钮自动运行到main函数。
要去睡觉了,明天是周末,争取把它写完。
(10)工具选项卡(Utilities),见图13。
图13
点击进入工具选项卡。
2.配置Flsah下载按钮(即:
)
使用J-LINK下载详情见我的博文:
8.维护工程组件、配置工具环境及管理书:
点击该快捷按钮。
弹出图14所示界面。
(1)工程组建选项卡(ProjectComponents)。
图14
点击进入工程组建选项卡.
工程目标组建。
添加/删除文件组。
重点讲述一下这个,应用比较多。
使用New(Insert)按钮(图3区域红色划线处)可在目标工程中设置文件组,方便文件归类,图中创建了两个文件组:
H-File和User。
在工程工作空间中,新建的文件组会体现出来,如下图15所示:
该区域页面会列出用户工程的文件组织结构。
用户可以通过用鼠标拖拉的方式来重新组织工程的源文件。
好啦,快捷按钮终于告一段落!
下面开始创建源文件,不过我先去玩一下。
哎呀,我的周末,我来啦!
回来继续,其实就去吃个饭,昨晚舍友们胡扯,很晚才睡觉。
今天早晨,呃~应该是今天上午起床就晚了点,然后打开电脑不一会的时间就到该吃饭的时间。
第四。
创建源文件。
选择菜单选项File–New以创建一个新的源文件,选项会打开一个空的编辑窗口,用户可以在此窗口里输入源代码。
如果以扩展名*.C保存文件,µ
Vision4将以彩亮字体显示C源代码。
至于代码,还是用一个适合软件仿真的吧(不需要硬件就能全部模拟仿真),这个程序主要使用了定时器0并定时1S钟,然后在中断服务程序中翻转I/O口P0.17的电平。
如下所示:
(本示例保存文件为MAIN.C)
其中,cpu.h为自定义头文件,内容如下:
(保存为cpu.h)
[cpp]
1./*
2.********************************Copyright
(c)******************************
3.**
File
name:
main.c
4.**
Last
modified
Date:
2010-09-26
5.**
Version:
1.0
6.**
By:
瓶盖
7.**
8.****************************************************************************
9.*/
10.#include
<
LPC21xx.H>
11.#include
"
cpu.h"
12.#define
BEEPCON
(1<
17)
/*
P0.17引脚控制B1,低电平蜂鸣
*/
13.
14.
15.
16./****************************************************************************
17.*
名称:
IRQ_Time0()
18.*
功能:
定时器0中断服务程序,取反BEEPCON控制口。
19.*
入口参数:
无
20.*
出口参数:
21.****************************************************************************/
22.void
__irq
IRQ_Time0(void)
23.{
24.
if(
(IO0SET&
BEEPCON)
==
0
)
//使I/O口P0.17每隔1秒翻转一次
25.
IO0SET
=
BEEPCON;
26.
else
27.
IO0CLR
28.
T0IR
0x01;
//
清除中断标志
29.
VICVectAddr
0x00;
通知VIC中断处理结束
30.}
31.
32.
33./*
34.**************************************************************************
35.*
Time0Init()
36.*
初始化定时器0,定时时间为1S,并使能中断。
37.*
38.*
39.***************************************************************************
40.*/
41.void
Time0Init(void)
42.{
Fcclk
Fosc*4
11.0592MHz*4
44.2368MHz
43.
Fpclk
Fcclk/4
44.2368MHz/4
11.0592MHz
44.
45.
T0PR
99;
设置定时器0分频为100分频,得110592Hz
46.
T0MCR
0x03;
匹配通道0匹配中断并复位T0TC
47.
T0MR0
110592;
比较值(1S定时值)
48.
T0TCR
启动并复位T0TC
49.
50.
51.
设置定时器0中断IRQ
52.
VICIntSelect
所有中断通道设置为IRQ中断
53.
VICVectCntl0
0x24;
定时器0中断通道分配最高优先级(向量控制器0)
54.
VICVectAddr0
(uint32)IRQ_Time0;
设置中断服务程序地址向量
55.
VICIntEnable
0x00000010;
使能定时器0中断
56.}
57.
58.*/
59./**********************************************************************
60.*
main()
61.*
初始化I/O及定时器,然后等待中断。
62.*
说明:
在STARTUP.S文件中使能IRQ中断(清零CPSR中的I位)。
63.************************************************************************
64.*/
65.int
main(void)
66.{
PINSEL0
0x00000000;
设置管脚连接GPIO
67.
IO0DIR
设置I/O为输出
68.
IO0CLR=BEEPCON;
69.
Time0Init();
初始化定时器0及使能中断
70.
while
(1);
等待定时器0中断
71.
72.
return(0);
73.}
74.
75./*************************************************************************
76.**
End
Of
77.*************************************************************************/
/*
********************************Copyright(c)******************************
**Filename:
main.c
**LastmodifiedDate:
2010-09-26
**LastVersion:
1.0
**By:
瓶盖
**
****************************************************************************
*/
#include<
#include"
#defineBEEPCON(1<
17)/*P0.17引脚控制B1,低电平蜂鸣*/
/****************************************************************************
*名称:
IRQ_Time0()
*功能:
*入口参数:
无
*出口参数:
****************************************************************************/
void__irqIRQ_Time0(void)
if((IO0SET&
BEEPCON)==0)//使I/O口P0.17每隔1秒翻转一次
IO0SET=BEEPCON;
else
IO0CLR=BEEPCON;
T0IR=0x01;
//清除中断标志
VICVectAddr=0x00;
//通知VIC中断处理结束
}
**************************************************************************
Time0Init()
***************************************************************************
voidTime0Init(void)
{/*Fcclk=Fosc*4=11.0592MHz*4=44.2368MHz
Fpclk=Fcclk/4=44.2368MHz/4=11.0592MHz
*/
T0PR=99;
//设置定时器0分频为100分频,得110