《毕业设计论文基于LPC2210的电子钟设计.doc》由会员分享,可在线阅读,更多相关《毕业设计论文基于LPC2210的电子钟设计.doc(64页珍藏版)》请在三一办公上搜索。
1、本 科 毕 业 设 计 论 文题 目 基于LPC2210的电子钟设计 系 别 电气与信息工程 专 业 班 级 学 号 学生姓名 指导老师 2011年 6月摘要摘 要电子钟的发展是非常迅速的,从刚开始的机械式钟表到现在普遍用到的数字式钟表,从刚开始的大件式、功能单一化到现在的小型化、多功能化。本设计的主要任务是:通过LPC2210内部的实时时钟RTC产生时钟信号显示在液晶屏上。它可以对年、月、日、星期、时、分、秒进行计时,还具有通过按键对时间进行校准等功能。本课题以LPC2210为核心,充分发挥微处理器功能,其电路设计简单明了,系统稳定性高,在现实生活中以得到很广泛的应用。硬件设计中将LPC22
2、10与HS12864-10A液晶显示屏相结合,通过独立式键盘控制时间的调节。软件设计是将RTC产生的时钟信号通过I2C高速通道经液晶的驱动T6963C对年、月、日、星期、时、分、秒显示输出。本设计基本上完成了所要求的任务,通过按键可调整年、月、日、星期、时、分、秒的走时。这次毕业设计的制作,使本人对ADS1.2的运用更加的熟练,对LPC2210这款芯片了解的更多。关键字:LPC2210,ARM,时钟,RTC,ADS1.2IIIABSTRACTABSTRACTClock is very rapid development, from the beginning of mechanical wat
3、ches to digital is now widely used in watches, from the beginning of the large-type, single-function, then to the present small, multi-functional.The design of the main tasks are: the internal real time clock through LPC2210 RTC generates the clock signal displayed on the LCD screen. It can be year,
4、 month, day, weeks, hours, minutes, seconds for time, also has a calibration through the key functions of time.This topic is based on the LPC2210 electronic clock design. Hardware and software into the guidelines to give full play to the microprocessor function, and its simple circuit design, system
5、 stability, in real life to get a very wide range of applications. Hardware design is based on LPC2210 as the core controller, with HS12864-10A LCD screen, and stand-alone keyboard. Software design is the RTC generates the clock signal, through the I2C high-speed access to its data and clock for rea
6、ding and feedback, and then by T6963C LCD driver on the year, month, day, weeks, hours, minutes, seconds display output.The design is basically completed the required tasks, through the button to adjust the year, month, day, week, hours, minutes, seconds travel time. The production of the graduation
7、 project, so I am more skilled use of ADS1.2 on LPC2210 chip learn more.KEY WORDS: LPC2210,ARM,Clock,RTC,ADS1.2目录目 录摘 要IABSTRACTIII目 录V一 绪论11.1选题意义11.2国内外研究现状11.3主要研究内容11.4设计要求2二 硬件设计32.1设计方案32.2 硬件说明32.2.1主控模块32.2.2 液晶显示模块82.2.3 键盘模块102.3硬件电路说明112.3.1按键模块电路122.3.2晶振电路122.3.3显示模块电路12三 软件设计153.1程序流程框
8、图153.2软件简介173.2.1命令行开发工具173.2.2 ARM运行时库193.2.3 GUI开发环境21四 调试234.1运行结果234.2小结23五 总结与展望255.1总结255.2展望25致 谢27参考文献29附录一 源程序31附录二 外文翻译45外文文献45中文对照5155绪论一 绪论1.1选题意义随着计算机技术的发展,嵌入式系统获得了越来越广泛的应用。嵌入式处理器的应用量远远超过了通用处理器,几乎在我们身边的所有电子设备中都有嵌入式系统。嵌入式系统是很多产业慢慢地发生变化,包括家用电器、工业自动化、国防、运输和航天领域。例如神州飞船和长征火箭中肯定有很多嵌入式系统,高档汽车中
9、也有多达几十个嵌入式系统。因此嵌入式应用的发展已进入了一个全新的时期,成为当前IT产业的热点之一。电子钟是采用数字电路实现对时,分,秒,数字显示的计时装置,与传统的机械钟相比,它具有走时准确、显示直观、无机械传动装置等优点,因而广泛应用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数子时钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气自
10、动启用等,所有这些,都是以钟表数字化为基础的。因此,研究电子钟及扩大其应用,有着非常现实的意义。1.2国内外研究现状1819世纪,钟表制造业已逐步实现工业化生产,并达到相当高的水平。20世纪,随着电子工业的迅速发展,电池驱动钟、交流电钟、电机械表、指针式石英电子钟、数字式石英电子钟相继问世,时钟的日差已小于0.5秒,钟表进入了微电子技术与精密机械相结合的石英化新时期。钟表的发展是非常迅速的,从刚开始的机械式钟表到现在普遍用到的数字式钟表,现在钟表千奇百怪,而且它们工作原理也已经不同了。我国在最近几十年也逐渐对钟表有了比较深刻的认识,电子钟对我们来说已经必不可少。在电子钟的发展上看,主要向小型化
11、、多功能化发展。1.3主要研究内容本课题基于嵌入式系统原理,以LPC2210微处理器作为核心控制器,通过硬件电路的制作以及软件程序的编制,设计制作出一个多功能数字时钟系统。该时钟系统主要由主控模块、液晶显示模块、键盘控制模块组成。系统具有简单清晰的操作界面。能够准确显示时间,可随时进行时间调整。设计以硬件软件化为指导思想,充分发挥微处理器功能,大部分功能通过软件编程来实现,电路简单明了,系统稳定性高。研究本课题的具体步骤如下:首先,通过查阅相关资料,学习并分析电子钟的原理,组建电子钟的总体结构框图,从理论上分析设计方法和思路。选择硬件设备,通过理论分析和计算选择电路参数并绘制PCB电路板。其次
12、,掌握ARM接口扩展:显示、键盘,根据操作功能要求,确定键盘控制功能,按设计要求确定显示器件。最后,采用C语言编写应用程序并调试通过,对系统进行测试和结果分析。1.4设计要求 具有年、月、日、星期、时、分、秒等功能; 时间与阳历能够自动关联; 通过按键可以更改时间的实时显示;硬件设计二 硬件设计2.1设计方案现代的电子时钟都是基于单片机的一种计时工具,而本课题是基于LPC2210的电子钟。单就功能而言, ARM芯片大多把SDRAM,LCD等控制器集成到片子当中,而单片机大多需要外接扩展口。本次设计相比于以单片机为核心的电子钟的优点是:可实现的功能更多,不只是计时,还可以用做嵌入式web服务器,
13、java虚拟机等。ARM具有性能高、成本低和能耗省的特点。总的来说,单片机是个微控制器,ARM显然已经是个微处理器了。本次设计方案就是利用ARM的多功能性的特点来设计的,具体思路为利用LPC2210和液晶的驱动对产生的信号进行液晶显示,并且通过按键可以实时的调整年、月、日、时、分、秒的数值,此方案通过编程简化了外部电路,原理简单,容易实现。设计框图如图2-1。时间调节LPC2210处理器液晶显示图21 总体框图本次课题是由嵌入式系统LPC2210作为核心控制器,具有在线编程功能、低功耗;时钟是由LPC2210内部的实时时钟RTC提供的,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿
14、功能,显示部分是HS12864-10A液晶屏,使用动态的方式对数值进行显示,还有2*8的按键。2.2 硬件说明2.2.1主控模块主控模块LPC2210作为核心控制器功能框图如下:图32 LPC2210的功能框图实时时钟RTC提供秒、分、小时、日、月、年和星期给VPB进行时钟处理, VPB分频器决定处理器时钟(cclk)与外设器件所使用的时钟(pclk)之间的关系,VPB分频器有两个用途。第一个是通过VPB总线为外设提供所需的pclk时钟以便外设以为满足ARM处理器而调整的速度下工作。为了实现此目的,VPB总线可以降低到1/2或1/4处理器时钟速率,由于VPB总线必须在上电后正常工作(并且如果由
15、于VPB分频器控制器位于VPB总线上而使上电时VPB总线不工作其时序就不能改变),VPB总线在复位后默认的状态是以1/4速度运行。图33 VPB分频器连接1 简介1)概述LPC2210是基于一个支持实时仿真和嵌入式跟踪的16/32位ARM7TDMI-STM CPU的微控制器。对代码规模有严格控制的应用可使用16位Thumb模式将代码规模降低超过30%,而性能的损失却很小。由于LPC2210的144脚封装、极低的功耗、多个32位定时器、8路10位ADC、PWM输出以及多达9个外部中断使它们特别适用于工业控制、医疗系统、访问控制和POS机。通过配置总线LPC2210最多可提供76个GPIO。由于内
16、置了宽范围的串行通信接口,它们也非常适合于通信网关、协议转换器、嵌入式软modern以及其它各种类型的应用。2)特性l 16/32位144脚ARM7TDMI-S微控制器l 16K字节片内静态RAM l 串行boot装载程序通过UART0来实现在系统下载和编程l 通过外部存储器接口可将存储器配置成4组每组的容量高达16Mb数据宽度为8/16/32位l EmbeddedICE-RT接口使能断点和观察点当前台任务使用片内RealMonitor软件调试时中断服务程序可继续执行l 嵌入式跟踪宏单元ETM支持对执行代码进行无干扰的高速实时跟踪l 8路10位A/D转换器转换时间低至2.44ms l 2个32
17、位定时器带4路捕获和4路比较通道PWM单元6路输出实时时钟和看门狗l 多个串行接口包括2个16C550工业标准UART高速I2C接口400 kbit/s和2个SPI接口l 向量中断控制器可配置优先级和向量地址l 多达76个通用I/O口可承受5V电压12个独立外部中断引脚EIN和CAP功能l 通过片内PLL可实现最大为60MHz的 CPU操作频率l 片内晶振频率范围130 MHz l 2个低功耗模式空闲和掉电l 通过外部中断将处理器从掉电模式中唤醒l 可通过个别使能/禁止外部功能来优化功耗l 双电源-CPU操作电压范围1.651.95 V(1.8 V 8.3%) -I/O操作电压范围3.03.6
18、 V(3.3 V 10%)3)结构概述 LPC2210包含一个支持仿真的ARM7TDMI-S CPU、与片内存储器控制器接口的ARM7局部总线、与中断控制器接口的AMBA高性能总线(AHB)和连接片内外设功能的VLSI外设总线(VPB,ARM AMBA总线的兼容超集)。LPC2210将ARM7TDMI-S配置为小端(little-endian)字节顺序。AHB外设分配了2M字节的地址范围,它位于4G字节ARM存储器空间的最顶端。每个AHB外设都分配了16k字节的地址空间。LPC2210的外设功能(中断控制器除)外都连接到VPB总线。AHB到VPB的桥将VPB总线与AHB总线相连。VPB外设也分
19、配了2M字节的地址范围,从3.5GB地址点开始。每个VPB外设在VPB地址空间内都分配了16k字节地址空间。片内外设与器件管脚的连接由管脚连接模块控制。该模块必须由软件进行控制以符合外设功能与管脚在特定应用中的需求。4)PLL锁相环需要指出的是为了提高LED显示屏的可扩展性,就势必使系统提高了对频率的要求, 为此本设计在系统软件的设计过程中, 利用LPC2210 微处理器自带的锁相环( PLL) , 对系统进行了倍频设计, 以提高系统的可扩展性。LPC2210的PLL接收的输入时钟频率范围是1025MHz, 选用111059 2 MHz作为系统的外部晶振频率, 首先需要配置PLL, 计算公式如
20、式(1)所示。cclk =M Fosc或cclk = Fcco / (2 P) (1)其中, Fosc为晶振频率, Fcco为PLL电流控制振荡器的频率, cclk为PLL的输出频率即处理器的时钟频率,M 与P分别为PLL的倍增器值与分频器值。CCO频率可由式(2)得到。Fcco = cclk 2 P或Fcco = Fosc M 2 P (2)PLL模块部分源代码如下:PLLCON = 3; / /使能PLLPLLCFG = 0x2D; / / 设置M 为6, P为2PLLFEED = 0xAA; / / 发送PLL馈送序列PLLFEED = 0x55;V ICIntSelect = 0x00
21、000000; / / 设置所有中断分配为IRQ中断V ICVectCntl0 = 0x20 | 12; / / PLL 中断分配到IRQ slot0, 即最高优先级V ICVectAddr0 = ( uint32) PLL_ Int; / / 设置中断服务程序地址V ICIntEnable = 1 12; / / 使能E INT0中断2 实时时钟RTC实时时钟RTC提供一套计数器在系统上电和关闭操作是对时间进行测量。RTC消耗的功率非常低,这使其适合于电池供电的,CPU不连续工作(空闲模式)的系统。可编程基准时钟分频器允许调节RTC以适应不同的晶振频率。RTC 包含了许多寄存器 。地址空间按
22、照功能分成 4 个部分。 前 8 个地址为混合寄存器组。 第二部分的 8 个地址为定时器计数器组 ,第三部分的 8 个地址为报警寄存器组 。最后一部分为基准时钟分频器。实时时钟模块所包含的寄存器见表3-1名称规格 (位数)描述访问 复位值 地址 ILR2 中断位置寄存器R/W * 0xE0024000 CTC15 时钟节拍计数器RO * 0xE0024004 CCR4 时钟控制寄存器R/W * 0xE0024008 CIIR8 计数器递增中断寄存器R/W * 0xE002400C AMR8 报警屏蔽寄存器R/W * 0xE0024010 CTIME0(32) 完整时间寄存器0RO * 0xE0
23、024014 CTIME1(32) 完整时间寄存器1RO * 0xE0024018 CTIME2(32) 完整时间寄存器2RO * 0xE002401C SEC6秒寄存器R/W *0xE0024020 MIN6 分寄存器R/W * 0xE0024024 HOUR5 小时寄存器R/W * 0xE0024028 DOM5 日期月寄存器R/W * 0xE002402C DOW3 星期寄存器R/W * 0xE0024030 DOY9 日期年寄存器R/W * 0xE0024034 MONTH4 月寄存器R/W * 0xE0024038 YEAR12 年寄存器R/W * 0xE002403C ALSEC6
24、秒报警值R/W* 0xE0024060ALMIN6分报警值R/W * 0xE0024064 ALHOUR5小时报警值R/W * 0xE0024068 ALDOM5日期月报警值R/W * 0xE002406C ALDOW3星期报警值R/W * 0xE0024070 ALDOY9日期年报警值R/W * 0xE0024074 ALMON4月报警值R/W*0xE0024078ALYEAR12年报警值R/W*0xE002407CPREINT13预分频值,整数部分R/W00xE0024080PREFRAC15预分频值,小数部分R/W00xE0024084* RTC当中除预分频器部分之外的其它寄存器都不受器
25、件复位的影响。如果RTC使能,这些寄存器必须通过软件来初始化。2.2.2 液晶显示模块本次所使用的显示设备是HS12864-10A,它是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及12864全点阵液晶显示器组成。可完成图形显示,也可以显示84个(1616点阵)汉字。HS12864-10A内嵌控制器为TOSHIBA的T6963C,外部显示存储器为32K字节。T6963C具有独特的硬件初始化设置功能,最大驱动点阵液晶为单色640*128(单屏),支持图形和文本单独显示和混合显示,并具有字符发生器,如图3-4:控制总线T6963C芯片SRAMMMM240*128LCD液晶显示器TA40TA3
26、9TA39TA39TA40数据总线6464808080图3-4 内置T6963C的240*128点阵液晶模块原理图下面是对HS12864-10A进行一些基本的介绍:1 概述 HS12864-10A为带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为12864, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示84行1616点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模
27、块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。2 基本特性(1)低电源电压(VDD:+3.0-+5.5V)(2)显示分辨率:12864点 (3)内置汉字字库,提供8192个1616点阵汉字(简繁体可选) (4)内置 128个168点阵字符 (5)2MHZ时钟频率 (6)显示方式:STN、半透、正显 (7)驱动方式:1/32DUTY,1/5BIAS (8)视角方向:6点(9)背光方式:侧部高亮白色LED,功耗仅为普通LED的1/51/10 (10)通讯方式:串行、并口可选 (11)内置DC-DC转换电
28、路,无需外加负压 (12)无需片选信号,简化软件设计(13)工作温度: 0 - +55 ,存储温度: -20 - +603 模块接口说明HS12864-10A的接口说明如表3-2管脚号管脚名称电平管脚功能描述1VSS0V电源地2VCC3.0+5V电源正3V0-对比度(亮度)调整4RS(CS)H/LRS=“H”,表示DB7DB0为显示数据RS=“L”,表示DB7DB0为显示指令数据5R/W(SID)H/LR/W=“H”,E=“H”,数据被读到DB7DB0R/W=“L”,E=“HL”, DB7DB0的数据被写到IR或DR6E(SCLK)H/L使能信号7DB0H/L三态数据线8DB1H/L三态数据线
29、9DB2H/L三态数据线10DB3H/L三态数据线11DB4H/L三态数据线12DB5H/L三态数据线13DB6H/L三态数据线14DB7H/L三态数据线15PSBH/LH:8位或4位并口方式,L:串口方式(见注释1)16NC-空脚17/RESETH/L复位端,低电平有效(见注释2)18VOUT-LCD驱动电压输出端19AVDD背光源正端(+5V)(见注释3)20KVSS背光源负端(见注释3)*注释1:如在实际应用中仅使用串口通讯模式,可将PSB接固定低电平,也可以将模块上的J8和“GND”用焊锡短接。*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。*注释3:如背光
30、和模块共用一个电源,可以将模块上的JA、JK用焊锡短接。2.2.3 键盘模块按键采用16位按键式键盘,从S1-S16,对应的控制方式是S1、S2对应秒的俩位,S4、S5对应分的俩位,S7、S8对应时的俩位,S6对应星期,从S9S16对应的依次是日、月、年。调节方式是对应位按键按下,对应时间就自增长,长按的话对应位的数字会一直从0-9循环递增。2.3硬件电路说明整体的硬件电路图如下硬件设计2.3.1按键模块电路按键部分的作用是改变时钟的数值显示,实现实时调节。按键的控制由低位到高位,S1、S2控制秒的数值,S4、S5控制分的数值,S6控制星期的数值,S7、S8控制时的数值,从S9S16控制的依次
31、是日、月、年的数值。按键的去抖动由软件来实现。图36 按键电路2.3.2晶振电路 石英晶体连接在晶振引脚的输入和输出之间,等效为一个并联谐振回路,振荡频率是石英晶体的并联谐振频率。晶体旁边的俩个电容接地,实际上就是电容三点式电路的分压电容,接地点就是分压点。以接地点即分压点为参考点,振荡引脚的输入和输出是反相的,但从并联谐振回路即石英晶体两端来看,形成一个正反馈以保证电路持续振荡。图37 晶振电路2.3.3显示模块电路如图37所示,采用液晶屏HS12864-10A显示,下图为液晶屏的插针式接口,W3为可调式电阻,其余的电阻作为降压、防短路用。图38 显示接口电路软件设计三 软件设计3.1程序流
32、程框图 首先对系统进行初始化,再对日期、时间位进行读取并准备显示,当有按键按下是程序跳入功能子程序,进行功能子程序相应的读取、显示;若没有按键按下就显示系统预定时间00:00:00,并记时。开始初始化读、写时间、日期是否有键按下?按键功能子程序显示时间返回是否图41 主程序流程开 始 控制键有效,进入年调整程序 控制键有效,进入月年调整程序 加键有效 年加1加键有效 月加1等待按键程序 等待按键程序 控制键有效,进入日调整程序控制键有效,进入时调整程序控制键有效,进入星期调整程序 等待按键程序等待按键程序等待按键程序加键有效加键有效加键有效日加1星期加1时加1控制键有效,进入分调整程序等待按键
33、程序加键有效控制键有效,进入秒调整程序等待按键程序加键有效分加1秒加1按键有效,跳出时间调整程序,进入主循环程序 图42 时间调整程序流程图3.2软件简介这次毕设的编译工具是使用了ADS1.2 。ADS1.2是一个使用方便的集成开发环境,全称是ARM Developer Suite v1.2。它是由ARM公司提供的专门应用于ARM相关应用开发和调试的综合性软件功能非常强大。他的前身是SDT,SDT是ARM公司几年前的开发环境软件,目前SDT早已经不再升级。ADS包括了四个模块分别是:SIMULATOR;C 编译器;实时调试器;应用函数库。ADS的编译器调试器较SDT都有了非常大的改观, ADS
34、1.2提供完整的WINDOWS界面开发环境。C编译器效率极高,支持c 以及c+,使工程师可以很方便的使用C语言进行开发。提供软件模拟仿真功能,使没有Emulators的学习者也能够熟悉ARM的指令系统。配合FFT-ICE使用,ADS1.2提供强大的实时调试跟踪功能,片内运行情况尽在掌握。ADS1.2需要硬件支持才能发挥强大功能。目前支持的硬件调试器有Multi-ICE以及兼容Multi-ICE的调试工具如FFT-ICE。ADS主要由以下部件构成:命令行开发工具,ARM运行时库,GUI开发环境(和AXD)3.2.1命令行开发工具这些工具完成将源代码编译,链接成可执行代码的功能。 ADS提供下面的
35、命令行开发工具: armcc armcc是ARM C编译器。这个编译器通过了Plum Hall C Validation Suite为ANSI C的一致性测试。armcc用于将用ANSI C编写的程序编译成32位ARM指令代码。因为armcc是我们最常用的编译器,所以对此作一个详细的介绍。在命令控制台环境下,输入命令: armcc help 可以查看armcc的语法格式以及最常用的一些操作选项armcc最基本的用法为: armcc options file1 file2 . filen 这里的option是编译器所需要的选项,fiel1,file2filen是相关的文件名。这里简单介绍一些最常
36、用的操作选项。 -c:表示只进行编译不链接文件; -C:(注意:这是大写的C)禁止预编译器将注释行移走; -D:定义预处理宏,相当于在源程序开头使用了宏定义语句#define symbol , 这里symbol默认为1; -E:仅仅是对C源代码进行预处理就停止;-g:指定是否在生成的目标文件中包含调试信息表; -I:将directory所指的路径添加到#include的搜索路径列表中去; -J:用directory所指的路径代替默认的对#include的搜索路径; -o:指定编译器最终生成的输出文件名。-O0:不优化; -O1:这是控制代码优化的编译选项,大写字母O后面跟的数字不同,表示的优化
37、级别就不同,-O1关闭了影响调试结果的优化功能; -O2:该优化级别提供了最大的优化功能; -S:对源程序进行预处理和编译,自动生成汇编文件而不是目标文件; -U:取消预处理宏名,相当于在源文件开头,使用语句#undef symbol; -W:关闭所有的或被选择的警告信息; 有关更详细的选项说明,读者可查看ADS软件的在线帮助文件。armcpp armcpp是ARM C+编译器。它将ISO C+ 或EC+ 编译成32位ARM指令代码。tcc tcc是Thumb C 编译器。该编译器通过了Plum Hall C Validation Suite为ANSI 一致性的测试。tcc将ANSI C源代码
38、编译成16位的Thumb指令代码。tcpp tcpp是Thumb C+ 编译器。它将ISO C+ 和EC+ 源码编译成16位Thumb指令代码。armasm armasm是ARM和Thumb的汇编器. 它对用ARM 汇编语言和Thumb 汇编语言写的源代码进行汇编。armlink armlink是ARM连接器。该命令既可以将编译得到的一个或多个目标文件和相关的一个或多个库文件进行链接,生成一个可执行文件,也可以将多个目标文件部分链接成一个目标文件,以供进一步的链接。ARM链接器生成的是ELF格式的可执行映像文件。armsd armsd是ARM 和Thumb的符号调试器。它能够进行源码级的程序调
39、试。用户可以在用C或汇编语言写的代码中进行单步调试,设置断点,查看变量值和内存单元的内容。3.2.2 ARM运行时库1. 运行时库类型和建立选项ADS提供以下的运行时库来支持被编译的C和C+代码:ANSI C库函数: 这个C函数库是由以下几部分组成: 1) 在ISO C标准中定义的函数; 2) 在semihosted环境下(semihosting是针对ARM目标机的一种机制,它能够根据应用程序代码的输入/输出请求,与运行有调试功能的主机通讯。这种技术允许主机为通常没有输入和输出功能的目标硬件提供主机资源)用来实现C库函数的与目标相关的函数; 3) 被C和C+编译器所调用的支持函数。ARM C
40、库提供了额外的一些部件支持C+,并为不同的结构体系和处理器编译代码。C+库函数: C+库函数包含由ISO C+库标准定义的函数。C+库依赖于相应的C库实现与特定目标相关的部分,在C+库的内部本身是不包含与目标相关的部分。这个库是由以下几部分组成的:1) 版本为2.01.01的Rogue Wave Standard C+库; 2) C+编译器使用的支持函数; 3) Rogue Wave库所不支持的其他的C+函数。正如上面所说,ANSI C库使用标准的ARM semihosted 环境提供例如,文件输入/输出的功能。Semihosting是由已定义的软件中断(Software Interrupt)
41、操作来实现的。在大多数的情况下,semihosting SWI是被库函数内部的代码所触发,用于调试的代理程序处理SWI异常。调试代理程序为主机提供所需要的通信。Semihosted被ARMulator ,Angel和Multi-ICE所支持。用户可以使用在ADS软件中的ARM开发工具去开发用户应用程序,然后在ARMulator或在一个开发板上运行和调试该程序。用户可以把C库中的与目标相关的函数作为自己应用程序中的一部分,重新进行代码的实现。这就为用户带来了极大的方便,用户可以根据自己的执行环境,适当的裁剪C库函数。除此之外,用户还可以针对自己的应用程序的要求,对与目标无关的库函数进行适当的裁剪
42、。在C库中有很多函数是独立于其他函数的,并且与目标硬件没有任何依赖关系。对于这类函数,用户可以很容易地从汇编代码中使用它们。在建立自己的用户应用程序的时候,用户必须指定一些最基本的操作选项。例如: 字节顺序,是大端模式(big endian:字数据的高字节存放在低地址,低字节存放在高地址),还是小端模式(little endian:字数据的高字节存放在高地址,低字节存放在低地址); 浮点支持:可能是FPA,VFP,软件浮点处理或不支持浮点运算; 堆栈限制:是否检查堆栈溢出; 位置无关(PID):数据是从与位置无关的代码还是从与位置相关的代码中读/写,代码是位置无关的只读代码还是位置相关的的只读
43、代码。当用户对汇编程序,C程序或C+程序进行链接的时候,链接器会根据在建立时所指定的选项,选择适当的C或C+运行时库的类型。选项各种不同组合都有一个相应的ANSI C库类型。2库路径结构库路径是在ADS软件安装路径的lib目录下的两个子目录。假设,ADS软件安装在e:armadsv1_2目录,则在e:armadsv1_2lib目录下的两个子目录armlib和cpplib是ARM的库所在的路径。armlib 这个子目录包含了ARM C 库,浮点代数运算库,数学库等各类库函数。与这些库相应的头文件在e:armadsv1_2include目录中。cpplib 这个子目录包含了Rogue Wave C
44、+库和C+支持函数库。Rogue Wave C+库和C+支持函数库合在一起被称为ARM C+库。与这些库相应的头文件安装在e:armadsv1_2include目录下。环境变量ARMLIB必须被设置成指向库路径。另外一种指定ARM C和ARM C+库路径的方法是,在链接的时候使用操作选项-libpath directory(directory代表库所在的路径),来指明要装载的库的路径。无需对armlib和cpplib这两个库路径分开指明,链接器会自动从用户所指明的库路径中找出这两个子目录。这里需要让读者特别注意的以下几点: 1). ARM C库函数是以二进制格式提供的; 2). ARM 库函数禁止修改。如果读者想对库函数创建新的实现的话,可以把这个新的函数编译成目标文件,然后在链接的时候把它包含进来。这样在链接的时候,使用的是新的函数实现而不是原来的库函数。3). 通常情况下,为了创建依赖于目标的应用程序,在