毕业设计(论文)-电能智能采集终端器设计.doc_第1页
毕业设计(论文)-电能智能采集终端器设计.doc_第2页
毕业设计(论文)-电能智能采集终端器设计.doc_第3页
毕业设计(论文)-电能智能采集终端器设计.doc_第4页
毕业设计(论文)-电能智能采集终端器设计.doc_第5页
免费预览已结束,剩余69页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

辽 宁 科 技 学 院(20 届)本科毕业论文题目:专题:专 业:班 级:姓 名:学 号:指导教师:论文共 页,其中:专题 页,译文 页辽 宁 科 技 学 院(20 届)本科毕业设计题目:电能智能采集终端器设计专题:软件设计专 业:自动化班 级:自bg071姓 名:李健学 号:1031107109指导教师:赵双元说明书 页,图纸 张,专题 页,译文 页电能智能采集终端器设计摘要随着市场经济的不断发展,人们生活水平的日益提高,用电量也持续上升。电能已经成为人们十分关心的问题。作为电能量的计量工具电能表已成为各行各业不可缺少且非常重要的仪表。由于人工抄表费时费力、统计繁琐等,研究电能智能采集已是明显的趋势。嵌入式系统技术是近几年电子产品设计领域最为热门的技术之一。目前已广泛的应用于工业控制、智能交通、信息家电、公共服务等领域。嵌入式系统正对人类后pc时代产生着深远的影响。本文结合嵌入式系统技术和网络技术,研究并设计了一套基于arm7处理器,c/os-ii嵌入式操作系统。本系统的硬件部分采用了philips的lpc2214作为中央处理器,lpc2214处理器是一款16/32位risc微处理器,采用arm公司的arm7tdmi-s内核。采用lpc2214处理器不但降低整个系统的设计成本,而且大大的减少了额外的接口电路。论文主要研究基于arm处理器和c/os-ii操作系统的嵌入式电能智能采集终端设计,主要包括以下几方面:数据采集:电能表数据采集,状态量采集;数据处理:实时数据,历史日数据,历史月数据,电能表运行状态,电能质量统计;参数设置和查询:时钟召测和对时,ta、tv和电表脉冲常数,控制参数,终端参数;控制:主站远方控制;事件记录:一般事件记录,重要事件记录;数据传输:与主站通讯,与电表通讯;本地功能:显示相关信息,用户数据接口;终端维护:自检自恢复,终端初始化;关键词:电能,嵌入式系统,arm7,c/os-iienergy smart design collection terminalabstractwith the continuous development of market economy, rising living standards, electricity consumption has continued to grow. energy has become very concerned about the issue. measurement tools, as electric energy meter all walks of life have become an indispensable and very important instrument. as time-consuming manual meter reading, statistics, and complicated to study the energy smart is a clear trend acquisition.embedded systems technology is the design of electronic products in recent years, the most popular technologies. has been widely used in industrial control, intelligent transportation, information appliances, public services and other fields. embedded systems are produced for human post-pc era with profound impact.this combination of embedded system technology and network technology, research and design a processor based arm7, c / os-ii embedded operating system. hardware of the system used as the central processor philipss lpc2214, lpc2214 processor is a 16/32-bit risc microprocessors, the use of arms arm7tdmi-s core. using lpc2214 processor not only reduces the overall system design costs, but also greatly reduces the additional interface circuit.thesis research is based on arm processor and c / os-ii operating system, intelligent collection of embedded power terminal design, including the following: data collection: energy meter data collection, state the amount of acquisition; data processing: real-time data, historical daily data, historical monthly data, meter running, power quality statistics; and query parameters: measurement and response time clock, ta, tv and meter pulse constant control parameters, terminal parameters; control: remote control master station; event log: general event records, records of important events; data transfer: communicate with the master station, communication with the meter; local features: display relevant information, user data interface; terminal maintenance: self-self-recovery, terminal initialization.key words: power , embedded systems , arm7,c/os-ii目录1 绪论11.1研究背景11.2国内外电能采集设备的发展现状31.2本论文主要研究的工作32 实验部分521 仪器、材料与试剂 5211 仪器5212 材料5213 试剂5结论24 致谢25 参考文献26附录281 绪 论1.1 研究背景计算机技术的普及应用,为现代化用电管理打下了坚实的基础。计算机管理系统容量大,检索、查询方便,可节省大量的人工,减少差错,提高工作效率。低压电力用户由于数量多,地域分布广,仍然按照一般的点对点抄表方式,将受到设备数量和传输信道的限制,同时电能计量是现代电力营销系统中的一个重要环节,传统的电能量结算是依靠人工定期到现场抄读数据,在实时性,准确性和应用性等方面都存在不足,因此提高电力部门电费实时性结算水平,建立一种新型的电能采集方式已成为所有电力部门的共识。再加上供电部门对窃电技术也提出了更高的要求。所以,由数据采集终端,经电力线传输,将各种终端的数据送至集中器,再利用gprs数据通道,传输至管理中心的总站,即将电能计量数据和电网采集数据自动采集、传输和处理的电能计量自动抄表系统会克服传统管理模式的低效率和不确定性,这必将大大推进电能管理现代化的发展进程,是一种很有前景的发展方向。根据电能表的发展趋势,实现智能采集主要有两种方式:一是通过电能表本身来解决。即是采用ic卡形式的电能表,用户在售电机上买电后将卡插入自己的表中即可用电,预先将使用的电量记录在售电机内,实现先买电后使用;另一种就是利用自动抄表系统来解决。目前,世界上大多数国家都以后者的发展为主。许多国家和地区都都已广泛采用自动抄表系统代替传统的人工抄表。具不完全统计,目前我国实现了电能智能采集的用户大约有260万户家庭,在具体实施电能智能采集上所采用的技术多种多样,且随着技术水平的不断提高,电能智能采集系统的功能逐步完善。但受硬件设施、通信技术等制约目前电能智能采集系统的普及率仍不高。因此,如何改进电能智能采集系统、发展电能采集技术具有十分重要的现实意义。1.2国内外电能采集设备的发展现状1.2.1 电能表传感器、自动化仪表以及集成电路技术的发展,使得无论是机电脉冲式还是电子式电能表已能够较好地满足当今电能计量自动抄表技术的需要。预计今后相当一段时间内,电能计量自动抄表系统的终端采集装置将以机电脉冲式电能表和电子式电能表两种仪表为主。1.2.2 采集器和集中器采集器和集中器是汇聚电能表电量数据的装置,由单片机、存储器和接口电路等构成,现在已经出现了较成熟的产品。1.2.3 通信信道通信子系统是电能计量自动抄表技术中的关键。数据通信方式的选取要综合考虑地理环境特点、用户用电行为、技术水平、管理体制和投资成本等因素。国内外对于不同通信方式各有侧重,在西方发达国家,对于电能计量自动抄表技术的研究起步较早,电力系统包括配电网络较规范、完备,所以低压电力线载波技术被广泛应用;在我国,受条件所限,较多使用电话线通信。近来,随着对扩频技术研究的深入,低压电力线载波中干扰大的问题逐步得到解决,因此,低压电力线载波通信方式在电能计量自动抄表技术中的应用有逐步推广的趋势。1.3本论文主要研究的工作本文是对电能采集行业进行了广泛调研,参阅了大量的国内外文献资料基础上,设计并实现了电能智能采集终端器的设计。其主要内容如下:1. 构建嵌入式模块。首先对arm平台进行介绍,然后详细分析嵌入式操作系统c/os-ii的结构特点,最后实现移植嵌入式操作系统c/os-ii到arm平台上。2. 电能智能采集终端的设计(软件部分)。利用adsv1.2编译软件和j-link仿真器等对软件程序进行仿真调试。3. 对电能智能采集终端器进行检验。包括:功能检验、电气性能、气候环境影响、结构及机械性能、安全性能、电磁兼容性等。2 嵌入式系统的简介2.1嵌入式系统简介 虽然嵌入式系统是近几年才风靡起来的,但是这个概念并非新近才出现。从20世纪七十年代单片机的出现到今天各式各样的嵌入式微处理器,微控制器的大规模应用,嵌入式系统已经有了近30年的发展历史。 作为一个系统,往往是在硬件和软件交替发展的双螺旋的支撑下逐渐趋于稳定和成熟,嵌入式系统也不例外。 嵌入式系统的出现最初是基于单片机的。70年代单片机的出现,使得汽车、家电、工业机器、通信装置以及成千上万种产品可以通过内嵌电子装置来获得更佳的使用性能:更容易使用、更快、更便宜。这些装置已经初步具备了嵌入式的应用特点,但是这时的应用只是使用位的芯片,执行一些单线程的程序,还谈不上“系统”的概念。 提示:最早的单片机是intel公司的 8048,它出现在1976年。motorola同时推出了68hc05,zilog公司推出了z80系列,这些早期的单片机均含有256字节的ram、4k的rom、4 个8位并口、1个全双工串行口、两个16位定 时 器。之后在80年代初,intel又进一步完善了8048,在它的基础上研制成功了8051,这在单片机的历史上是值得纪念的一页,迄今为止,51系列的单片机仍然是最为成功的单片机芯片,在各种产品中有着非常广泛的应用。 从80年代早期开始,嵌入式系统的程序员开始用商业级的“操作系统”编写嵌入式应用软件,这使得可以获取更短的开发周期,更低的开发资金和更高的开发效率,“嵌入式系统”真正出现了。确切点说,这个时候的操作系统是一个实时核,这个实时核包含了许多传统操作系统的特征,包括任务管理、任务间通讯、同步与相互排斥、中断支持、内存管理等功能。其中比较著名的有ready system 公司的vrtx、integrated system incorporation (isi)的psos和img的vxworks、qnx公司的qnx 等。这些嵌入式操作系统都具有嵌入式的典型特点:它们均采用占先式的调度,响应的时间很短,任务执行的时间可以确定;系统内核很小,具有可裁剪,可扩充和可移植性,可以移植到各种处理器上;较强的实时和可靠性,适合嵌入式应用。这些嵌入式实时多任务操作系统的出现,使得应用开发人员得以从小范围的开发解放出来,同时也促使嵌入式有了更为广阔的应用空间。 90年代以后,随着对实时性要求的提高,软件规模不断上升,实时核逐渐发展为实时多任务操作系统(rtos),并作为一种软件平台逐步成为目前国际嵌入式系统的主流。这时候更多的公司看到了嵌入式系统的广阔发展前景,开始大力发展自己的嵌入式操作系统。除了上面的几家老牌公司以外,还出现了palm os,wince,嵌入式linux,lynx,nucleux,以及国内的hopen,delta os等嵌入式操作系统。随着嵌入式技术的发展前景日益广阔,相信会有更多的嵌入式操作系统软件出现。在中国嵌入式系统领域,比较认同的嵌入式系统概念是:嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。它一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成,用于实现对其他设备的控制、监视或管理等功能。2.2嵌入式系统的定义 定义可从几方面来理解嵌入式系统: 嵌入式系统是面向用户、面向产品、面向应用的,它必须与具体应用相结合才会具有生命力、才更具有优势。因此可以这样理解上述三个面向的含义,即嵌入式系统是与应用紧密结合的,它具有很强的专用性,必须结合实际系统需求进行合理的裁减利用。 嵌入式系统是将先进的计算机技术、半导体技术和电子技术和各个行业的具体应用相结合后的产物,这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。所以,介入嵌入式系统行业,必须有一个正确的定位。例如palm之所以在pda领域占有70以上的市场,就是因为其立足于个人电子消费品,着重发展图形界面和多任务管理;而风河的vxworks之所以在火星车上得以应用,则是因为其高实时性和高可靠性。 嵌入式系统必须根据应用需求对软硬件进行裁剪,满足应用系统的功能、可靠性、成本、体积等要求。所以,如果能建立相对通用的软硬件基础,然后在其上开发出适应各种需要的系统,是一个比较好的发展模式。目前的嵌入式系统的核心往往是一个只有几k到几十k微内核,需要根据实际的使用进行功能扩展或者裁减,但是由于微内核的存在,使得这种扩展能够非常顺利的进行。 实际上,嵌入式系统本身是一个外延极广的名词,凡是与产品结合在一起的具有嵌入式特点的控制系统都可以叫嵌入式系统,而且有时很难以给它下一个准确的定义。现在人们讲嵌入式系统时,某种程度上指近些年比较热的具有操作系统的嵌入式系统,本文在进行分析和展望时,也沿用这一观点。一般而言,嵌入式系统的构架可以分成四个部分:处理器、存储器、输入输出(i/o)和软件(由于多数嵌入式设备的应用软件和操作系统都是紧密结合的,在这里我们对其不加区分,这也是嵌入式系统和windows系统的最大区别)。嵌入式系统中有许多非常重要的概念:1、 嵌入式处理器 嵌入式系统的核心,是控制、辅助系统运行的硬件单元。范围极其广阔,从最初的位处理器,目前仍在大规模应用的位单片机,到最新的受到广泛青睐的32位,64位嵌入式cpu。2、 实时操作系统 实时操作系统 (rtos-real time operating system): 嵌入式系统目前最主要的组成部分。根据操作系统的工作特性,实时是指物理进程的真实时间。实时操作系统具有实时性,能从硬件方面支持实时控制系统工作的操作系统。其中实时性是第一要求,需要调度一切可利用的资源完成实时控制任务,其次才着眼于提高计算机系统的使用效率,重要特点是要满足对时间的限制和要求。3、 分时操作系统 对于分时操作系统,软件的执行在时间上的要求,并不严格,时间上的错误,一般不会造成灾难性的后果。目前分时系统的强项在于多任务的管理,而实时操作系统的重要特点是具有系统的可确定性,即系统能对运行情况的最好和最坏等的情况能做出精确的估计。4、 多任务操作系统 系统支持多任务管理和任务间的同步和通信,传统的单片机系统和dos系统等对多任务支持的功能很弱,而目前的windows是典型的多任务操作系统。在嵌入式应用领域中,多任务是一个普遍的要求。5、 实时操作系统中的重要概念 系统响应时间(system response time):系统发出处理要求到系统给出应答信号的时间。 任务换道时间(context-switching time):任务之间切换而使用的时间。 中断延迟(interrupt latency):计算机接收到中断信号到操作系统作出响应,并完成换道转入中断服务程序的时间。6、 实时操作系统的工作状态 实时系统中的任务有四种状态:运行(executing),就绪(ready),挂起(suspended),冬眠(dormant)。 运行:获得cpu控制权。 就绪:进入任务等待队列,通过调度转为运行状态。 挂起:任务发生阻塞,移出任务等待队列,等待系统实时事件的发生而唤醒,从而转为就绪或运行。 冬眠:任务完成或错误等原因被清除的任务,也可以认为是系统中不存在的任务。 任何时刻系统中只能有一个任务在运行状态,各任务按级别通过时间片分别获得对cpu的访问权。2.3 arm平台简介 arm(adanced risc machines),是一个公司名字,也是一种处理器的通称,还可以认为是一种技术名字。1991年arm公司成立于英国cambridge,主要销售晶片设计技术的授权。目前,采用arm技术知识产权(ip)核的微处理器,即我们通常说的arm微处理器,已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场,基于arm技术的微处理器应用约占据了32位risc微处理器75%以上的市场份额,arm技术正在逐步渗入到我们生活的各方面。arm(advanced risc machines)是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的risc处理器、相关技术及软件。技术具有性能高、成本低和能耗省的特点。适用于多种领域,比如嵌入控制、消费/教育类多媒体、dsp和移动式应用等。2.4嵌入式微处理器lpc2214简介lpc2214 是基于一个支持实时仿真和跟踪的16/32 位arm7tdmi-stmcpu 的微控制器,并带有128/256 k 字节(kb)嵌入的高速flash 存储器。128 位宽度的存储器接口和独特的加速结构使32 位代码能够在最大时钟速率下运行。对代码规模有严格控制的应用可使用16 位thumb 模式将代码规模降低超过30%,而性能的损失却很小。由于 lpc2114/2124/2212/2214 较小的64 和144 脚封装、极低的功耗、多个32 位定时器、4 路10 位adc 或8 路10 位adc(64 脚和144 脚封装)以及多达9 个外部中断使它们特别适用于工业控制、医疗系统、访问控制和pos 机。在 64 脚的封装中,最多可使用46 个gpio。在144 脚的封装中,可使用的gpio 高达76(使用了外部存储器)112 个(单片应用)。由于内置了宽范围的串行通信接口,它们也非常适合于通信网关、协议转换器、嵌入式软modern 以及其它各种类型的应用。2.4.1lpc2214特性l 16/32 位64/144 脚arm7tdmi-s 微控制器。l 16k 字节静态ram。l 128/256k 字节片内flash 程序存储器(在工作温度范围内,片内flash 存储器至少可擦除和写10,000 次)。128 位宽度接口/加速器实现高达60mhz 的操作频率。l 外部8、16 或32 位总线(144 脚封装)。l 片内boot 装载程序实现在系统编程(isp)和在应用中编程(iap)。flash 编程时间:1ms 可编程512 字节,扇区擦除或整片擦除只需400ms。l embeddedice-rt 接口使能断点和观察点。当前台任务使用片内realmonitor 软件调试时,中断服务程序可继续执行。l 嵌入式跟踪宏单元(etm)支持对执行代码进行无干扰的高速实时跟踪。l 4/8 路(64/144 脚封装)10 位a/d 转换器,转换时间低至2.44us。l 2 个32 位定时器(带4 路捕获和4 路比较通道)、pwm 单元(6 路输出)、实时时钟和看门狗。l 多个串行接口,包括2 个16c550 工业标准uart、高速i2c 接口(400 kbit/s)和2 个spi 接口。l 通过片内pll 可实现最大为60mhz 的 cpu 操作频率。l 向量中断控制器。可配置优先级和向量地址。l 多达46 个(64 脚封装)或112 个(144 脚封装)通用i/o 口(可承受5v 电压),12 个独立外部中断引脚(ein 和cap 功能)。l 片内晶振频率范围:130 mhz。l 2 个低功耗模式:空闲和掉电。l 通过外部中断将处理器从掉电模式中唤醒。l 可通过个别使能/禁止外部功能来优化功耗。l 双电源l cpu 操作电压范围:1.651.95 v(1.8 v+/ 8.3%)l i/o 操作电压范围:3.03.6 v(3.3 v+/ 10%) lpc2214 包含一个支持仿真的arm7tdmi-s cpu、与片内存储器控制器接口的arm7 局部总线、与中断控制器接口的amba 高性能总线(ahb)和连接片内外设功能的vlsi 外设总线( vpb , arm amba 总线的兼容超集)。lpc2214 将arm7tdmi-s 配置为小端(little-endian)字节顺序。ahb 外设分配了2m 字节的地址范围,它位于4g 字节arm 存储器空间的最顶端。每个ahb 外设都分配了16k 字节的地址空间。lpc2214 的外设功能(中断控制器除外)都连接到vpb 总线。ahb 到vpb 的桥将vpb 总线与ahb 总线相连。vpb 外设也分配了2m 字节的地址范围,从3.5gb 地址点开始。每个vpb 外设在vpb 地址空间内都分配了16k 字节地址空间。片内外设与器件管脚的连接由管脚连接模块控制。该模块必须由软件进行控制以符合外设功能与管脚在特定应用中的需求。 arm7tdmi-s 是通用的32 位微处理器,它具有高性能和低功耗的特性。arm 结构是基于精简指令集计算机(risc)原理而设计的。指令集和相关的译码机制比复杂指令集计算机要简单得多。这样使用一个小的、廉价的处理器核就可实现很高的指令吞吐量和实时的中断响应。 由于使用了流水线技术,处理和存储系统的所有部分都可连续工作。通常在执行一条指令的同时对下一条指令进行译码,并将第三条指令从存储器中取出。 arm7tdmi-s 处理器使用了一个被称为thumb 的独特结构化策略,它非常适用于那些对存储器有限制或者需要较高代码密度的大批量产品的应用。 在 thumb 后面一个关键的概念是“超精简指令集”。基本上,arm7tdmi-s 处理器具有两个指令集: 标准32 位arm 指令集 16 位thumb 指令集thumb 指令集的16 位指令长度使其可以达到标准arm 代码两倍的密度,却仍然保持arm 的大多数性能上的优势,这些优势是使用16 位寄存器的16 位处理器所不具备的。因为thumb 代码和arm 代码一样,在相同的32 位寄存器上进行操作。thumb 代码仅为arm 代码规模的65%,但其性能却相当于连接到16 位存储器系统的相同arm 处理器性能的160%。2.4.2片内flash 程序存储器 lpc2214 集成了256k 的flash 存储器系统。该存储器可用作代码和数据的存储。对flash 存储器的编程可通过几种方法来实现:通过内置的串行jtag 接口,通过在系统编程(isp)和uart0,或通过在应用编程(iap)。使用在应用编程的应用程序也可以在应用程序运行时对flah 进行擦除和/或编程,这样就为数据存储和现场固件的升级都带来了极大的灵活性。2.4.3片内静态ram lpc2214 含有16kb 的静态ram,可用作代码和/或数据的存储。sram支持8 位、16 位和32 位访问。sram 控制器包含一个回写缓冲区,它用于防止cpu 在连续的写操作时停止运行。回写缓冲区总是保存着软件发送到sram 的最后一个字节。该数据只有在软件请求下一次写操作时才写入sram(数据只有在软件执行另外一次写操作时被写入sram)。如果发生芯片复位,实际的sram 内容将不会反映最近一次的写请求(即:在一次“热”芯片复位后,sram 不会反映最后一次写入的内容)。任何在复位后检查sram 内容的程序都必须注意这一点。通过对一个单元执行两次相同的写操作可保证复位后数据的写入。或者,也可通过在进入空闲或掉电模式前执行虚写(dummy write)操作来保证最后的数据在复位后被真正写入到sram。2.5c/os-ii操作系统2.5.1c/os-ii简介c/os-ii是一种可移植的,可植入rom的,可裁剪的,抢占式的,实时多任务操作系统内核。它被广泛应用于微处理器、微控制器和数字信号处理器。 c/os-ii 的前身是c/os,最早出自于1992 年美国嵌入式系统专家jean j.labrosse 在嵌入式系统编程杂志的5 月和6 月刊上刊登的文章连载,并把c/os 的源码发布在该杂志的b b s 上。 c/os 和c/os-ii 是专门为计算机的嵌入式应用设计的, 绝大部分代码是用c语言编写的。cpu 硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的cpu 上。用户只要有标准的ansi 的c交叉编译器,有汇编器、连接器等软件工具,就可以将c/os-ii嵌人到开发的产品中。c/os-ii 具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点, 最小内核可编译至 2kb 。c/os-ii 已经移植到了几乎所有知名的cpu 上。严格地说uc/os-ii只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理,内存管理和任务间的通信和同步等基本功能。没有提供输入输出管理,文件系统,网络等额外的服务。但由于uc/os-ii良好的可扩展性和源码开放,这些非必须的功能完全可以由用户自己根据需要分别实现。 uc/os-ii目标是实现一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务,如信号量,邮箱,消息队列,内存管理,中断管理等。 uc/os-ii以源代码的形式发布,但并不意味着它是开源软件。你可以将其用于教学和私下研究(peaceful research);但是如果你将其用于商业用途,那么你必须通过micrium获得商用许可。2.5.2任务管理uc/os-ii 中最多可以支持64 个任务,分别对应优先级063,其中0 为最高优先级。63为最低级,系统保留了4个最高优先级的任务和4个最低优先级的任务,所有用户可以使用的任务数有56个。 uc/os-ii提供了任务管理的各种函数调用,包括创建任务,删除任务,改变任务的优先级,任务挂起和恢复等。系统初始化时会自动产生两个任务:一个是空闲任务,它的优先级最低,该任务仅给一个整形变量做累加运算;另一个是系统任务,它的优先级为次低,该任务负责统计当前cpu的利用率。2.5.3时间管理uc/os-ii的时间管理是通过定时中断来实现的,该定时中断一般为10毫秒或100毫秒发生一次,时间频率取决于用户对硬件系统的定时器编程来实现。中断发生的时间间隔是固定不变的,该中断也成为一个时钟节拍。uc/os-ii要求用户在定时中断的服务程序中,调用系统提供的与时钟节拍相关的系统函数,例如中断级的任务切换函数,系统时间函数。2.5.4内存管理在ansi c中是使用malloc和free两个函数来动态分配和释放内存。但在嵌入式实时系统中,多次这样的操作会导致内存碎片,且由于内存管理算法的原因,malloc和free的执行时间也是不确定。uc/os-ii中把连续的大块内存按分区管理。每个分区中包含整数个大小相同的内存块,但不同分区之间的内存快大小可以不同。用户需要动态分配内存时,系统选择一个适当的分区,按块来分配内存。释放内存时将该块放回它以前所属的分区,这样能有效解决碎片问题,同时执行时间也是固定的。2.5.5任务间通信与同步对一个多任务的操作系统来说,任务间的通信和同步是必不可少的。uc/os-ii中提供了4种同步对象,分别是信号量,邮箱,消息队列和事件。所有这些同步对象都有创建,等待,发送,查询的接口用于实现进程间的通信和同步。2.5.6任务调度uc/os-ii 采用的是可剥夺型实时多任务内核。可剥夺型的实时内核在任何时候都运行就绪了的最高优先级的任务。uc/os-ii的任务调度是完全基于任务优先级的抢占式调度,也就是最高优先级的任务一旦处于就绪状态,则立即抢占正在运行的低优先级任务的处理器资源。为了简化系统设计,uc/os-ii规定所有任务的优先级不同,因为任务的优先级也同时唯一标志了该任务本身。2.5.7任务调度将在以下情况下发生:1) 高优先级的任务因为需要某种临界资源,主动请求挂起,让出处理器,此时将调度就绪状态的低优先级任务获得执行,这种调度也称为任务级的上下文切换。 2) 高优先级的任务因为时钟节拍到来,在时钟中断的处理程序中,内核发现高优先级任务获得了执行条件(如休眠的时钟到时),则在中断态直接切换到高优先级任务执行。这种调度也称为中断级的上下文切换。 这两种调度方式在uc/os-ii的执行过程中非常普遍,一般来说前者发生在系统服务中,后者发生在时钟中断的服务程序中。调度工作的内容可以分为两部分:最高优先级任务的寻找和任务切换。其最高优先级任务的寻找是通过建立就绪任务表来实现的。u c / o s 中的每一个任务都有独立的堆栈空间,并有一个称为任务控制块tcb(task control block)的数据结构,其中第一个成员变量就是保存的任务堆栈指针。任务调度模块首先用变量ostcbhighrdy 记录当前最高级就绪任务的tcb 地址,然后调用os_task_sw()函数来进行任务切换。2.5.8c/os-ii的组成部分c/os-ii可以大致分成核心、任务处理、时间处理、任务同步与通信,cpu的移植等5个部分。 1) 核心部分(oscore.c) 是操作系统的处理核心,包括操作系统初始化、操作系统运行、中断进出的前导、时钟节拍、任务调度、事件处理等多部分。能够维持系统基本工作的部分都在这里。2) 任务处理部分(ostask.c) 任务处理部分中的内容都是与任务的操作密切相关的。包括任务的建立、删除、挂起、恢复等等。因为c/os-ii是以任务为基本单位调度的,所以这部分内容也相当重要。3) 时钟部分(ostime.c) c/os-ii中的最小时钟单位是timetick(时钟节拍)。任务延时等操作是在这里完成的。4) 任务同步和通信部分 为事件处理部分,包括信号量、邮箱、邮箱队列、事件标志等部分;主要用于任务间的互相联系和对临界资源的访问。 5) 与cpu的接口部分 是指c/os-ii针对所使用的cpu的移植部分。由于c/os-ii是一个通用性的操作系统,所以对于关键问题上的实现,还是需要根据具体cpu的具体内容和要求作相应的移植。这部分内容由于牵涉到sp等系统指针,所以通常用汇编语言编写。主要包括中断级任务切换的底层实现、任务级任务切换的底层实现、时钟节拍的产生和处理、中断的相关处理部分等内容。2.6c/os-ii移植到lpc22142.6.1编译器的选择目前,针对arm 处理器核的 c 语言编译器有很多,如 sdt、ads、iar、tasking和gcc 等。据了解,目前在国内最流行的是 sdt、ads 和 gcc。sdt 和 ads 均为 arm公司自己开发,ads 为 sdt 的升级版,以后 arm 公司不再支持 sdt,所以不选择 sdt。gcc 虽然支持广泛,很多开发套件使用它作为编译器,与 ads 比较其编译效率较低,这对充分发挥芯片性能很不利,所以最终使用ads 编译程序和调试。2.6.2任务模式的取舍arm7 处理器核具有用户、系统、管理、中止、未定义、中断和快中断七种模式,其中除用户模式外其它均为特权模式。关于arm7 处理器核的详细情况参考参考文献11。由参考文献11可知,管理、中止、未定义、中断和快中断与相应异常相联系,任务使用这些模式不太不适合。而系统模式除了是特权模式外,其它与用户模式一样,因而可选的给任务使用的模式只有用户模式和系统模式。为了尽量减少任务代码错误对整个程序的影响,缺省的任务模式定为用户模式,可选为系统模式,同时提供接口使任务可以在这两种模式间切换。2.6.3支持的指令集带t 变量的 arm7 处理器核具有两个指令集:标准 32 位 arm指令集和16 位 thumb 指令集,两种指令集有不同的应用范围。为了最大限度地支持芯片的特性,任务应当可以使用任意一个指令集并可以自由切换,而且不同的任务应当可以使用不同的指令集,这次移植的代码已经实现了这一点。2.6.4移植 c/os-ii概述要移植一个操作系统到一个特定的cpu 体系结构上并不是一件很容易的事情,它对移植者有以下要求:1 对目标体系结构要有很深了解;2 对 os 原理要有较深入的了解;3 对所使用的编译器要有较深入的了解;4 对需要移植的操作系统要有相当的了解;5 对具体使用的芯片也要一定的了解。因此,在移植c/os-ii 到 arm7 时,我们必须先把上面几个方面的知识了解得比较透彻。这不单单是阅读资料就可以实现的,还需要不断地实践和实验。关于第1 点的参考资料最权威的是参考文献11,ads1.2 已经自带这个文档的电子版。关于第 2 点和第 4 点可以参考参考文献9。关于第 3 点需要参考 ads 自带的编译器和连接器的手册,安装 ads1.2时都附带了它们的电子版。关于第5 点,参考资料为具体芯片的数据手册和使用手册。这里着重说明一下第4 点,因为这一点的影响是全局性的的,决定移植代码的框架和功能。其它部分也很重要,它们在细节上影响代码,并最终影响代码的正确性、可靠性和健壮性。c/os-ii中要移植的部分见 表 5.1。根据c/os-ii的要求,移植c/os-ii到一个新的体系结构上需要提供2 个或 3 个文件:os_cpu.h(c语言头文件)、os_cpu_c.c(c程序源文件)及os_cpu_a.asm(汇编程序源文件),其中os_cpu_a.asm在某些情况下不需要,但极其罕见。不需要os_cpu_a.asm的必须满足以下苛刻条件:1 可以直接使用 c 语言开关中断;2 可以直接使用 c 语言编写中断服务程序;3 可以直接使用 c 语言操作堆栈指针;4 可以直接使用 c 语言保存 cpu 的所有寄存器。同时支持以上4 点的c语言编译器几乎不存在,即使存在,移植代码往往也会使用部分汇编语言来提高移植代码的效率。由 表5.1 可以看出,移植c/os-ii需要在os_cpu.h包含几个类型的定义和几个常数的定义;在os_cpu_c和os_cpu_a.asm中包含几个函数的定义和时钟节拍中断服务程序的代码。实际上,还有一个includes.h文件需要关注,因为每一个应用都包含独特的includes.h文件。而笔者的移植也包含os_cpu.h、os_cpu_c.c 及 os_cpu_a.s 三个文件。将 os_cpu_a.asm 更名为 os_cpu_a.s 是遵照编译器的惯例。实际上,还有一个文件很重要,它就是irq.inc,它定义了一个汇编宏,它是 c/os-ii for arm7 通用的中断服务程序的汇编与c 函数接口代码。时钟节拍中断服务程序也没有移植,因为其与芯片和应用都紧密相关,需要用户自己编写,不过可以通过irq.inc 简化用户代码的编写。表5.1 c/os-ii 需要移植的代码*某些情况可在 os_cpu_c.c 中实现。移植内容类型所属文件描述boolean、int8u、int8s、int16u、int16s、int32u、int32s、fp32、fp64数据类型os_cpu.h与编译器无关的数据类型os_stk数据类型os_cpu.h堆栈的数据类型os_enter_critical()和os_exit_critical()宏os_cpu.h开关中断的代码os_stk_growth常量os_cpu.h定义堆栈的增长方向os_task_sw函数os_cpu.h任务切换时执行的代码ostaskstkinit()函数os_cpu_c.c任务堆栈初始化函数osinithookbegin()、osinithookend()、ostaskcreatehook()、ostaskdelhook()、ostaskswhook()、ostaskstathook()、ostcbinithook()、ostimetickhook()、ostaskidlehook()函数os_cpu_c.cc/os-ii 在执行某些操作时调用的用户函数,一般为空osstarthighrdy()函数*os_cpu_a.asm进入多任务环境时运行优先级最高的任务osintctxsw()函数*os_cpu_a.asm中断退出时的任务切换函数ostickisr()中断服务程序*os_cpu_a.asm时钟节拍中断服务程序关于头文件includes.h 和 config.hc/os-ii 要求所有.c 文件的都要包含头文件 includes.h,这样使得用户项目中的每个.c文件不用分别去考虑它实际上需要哪些头文件。使用includes.h 的缺点是它可能会包含一些实际不相关的头文件,这意味着每个文件的编译时间可能会增加,但却增强了代码的可移植性。在本移植中另外增加了一个头文件config.h,我们要求所有用户程序必须包含 config.h,在config.h 中包含 includes.h 和特定的头文件和配置项。而 c/os-ii 的系统文件依然只是包含includes.h,即 c/os-ii 的系统文件完全不必改动。所有的配置改变包括头文件的增减均在config.h 中进行,而 includes.h 定下来后不必改动(c/os-ii 的系统文件需要包含的东西是固定的)。这样,c/os-ii 的系统文件需要编译的次数大大减少,编译时间随之减少。2.6.5编写os_cpu.h1 不依赖于编译的数据类型c/os-ii不使用c语言中的short、int、long等数据类型的定义,因为它们与处理器类型有关,隐含着不可移植性。代之以移植性强的整数数据类型,这样

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论