《752.基于μCOSⅡ和ARM7的数据采集系统.doc》由会员分享,可在线阅读,更多相关《752.基于μCOSⅡ和ARM7的数据采集系统.doc(39页珍藏版)》请在三一办公上搜索。
1、基于C/OS-和ARM7的数据采集系统目录摘要3ABSTRACT4第一章 概述61 引言61.1 试验机的发展前沿61.2 uC/OS-的特点62 概论93 问题背景10第二章 系统分析122.1系统开发环境及使用工具122.1.1 ARM集成开发工具介绍122.1.2 H-JTAG介绍122.1.3 开发板及周边硬件介绍14第三章 系统设计1731 系统设计思路与实现方法17311 SPI(PDC)模块的设计与实现17312 AD转换模块的设计与实现(CS1180)20313 FLASH存储模块的设计与实现(AT45DB321C)22314 C/OS-实时系统的移植与系统集成243.2 系统
2、及关键代码分析263.2.1 系统测试及分析263.2.2 部分关键代码分析26第四章 系统讨论34第五章 毕业设计小结35致谢36参考文献37摘要本系统是基于C/OS-的数据采集系统,采用以ARM7系列的AT91SAM7X256芯片为处理芯片的开发板,利用板载的A/D转换模块(CS1180芯片)将采集到的模拟信号转换为数字信号,利用SPI以及PDC进行通讯,从而将数据存储在FLASH芯片(AT45DB321C)中。整个系统建立在以C/OS-为平台的实时操作系统上,C/OS-系统为整个系统提供了多任务、多线程工作的环境,通过C/OS-系统,可以实现数据采集与数据处理以及数据存储以及后续版本的网
3、络通讯的同时进行,从而使整个系统具有了高度的实时性与可扩展性。该系统适用于当前的试验机行业、工矿自动化称量(配料)控制等相关行业,属于采用先进的芯片集成技术和专业设计的数据采集放大的过程控制系统; 该系统还适用于各种金属与非金属材料的各项力学性能指标的测试,有着丰富的应用前景。关键词:C/OS-,AT91SAM7X256芯片,A/D转换,数据的采集、处理及存储,多任务、多线程,实时性与可扩展性英文翻译:AbstractThe system is based on C/OS- data acquisition system, used to AT91SAM7X256 series of ARM7
4、 processor chip for the development board, the use of onboard A/D converter module (CS1180 chip) will be collected to the conversion of analog signals to digital signals, PDC and the use of SPI communication, data stored in the chip FLASH (AT45DB321C) in. The whole system in order to establish C/OS-
5、 as a platform for real-time operating system, C/OS- system for the entire system to provide a multi-task, multi-threaded work environment, through C/OS- system, can achieve data acquisition and data processing and data Follow-up version of the storage and network communications at the same time, so
6、 that the whole system has a high degree of real-time performance and scalability.The system applies to the current testing machine industry, mining automation Weighing (ingredients) control, and other related industries, are using advanced chip integration technology and professional design of data
7、 acquisition to enlarge the process control system, the system also applies to all kinds of metal and Non-metallic materials of the mechanical properties of the test, is rich in prospects.KeywordsC/OS-, AT91SAM7X256 chip, A/D conversion, data collection, processing and storage, multi-task, multi-thr
8、eaded, real-time performance and scalability.第一章 概述1 引言1.1 试验机的发展前沿 我国的IT研究领域的试验机行业,已近有五十多年的发展史,其发源地是在我国的东北吉林省长春市。如今,随着各行各业对试验机产品需求的增长,随着我国生产制造水平的不断提高和测试技术的飞速发展,目前生产试验机的公司和企业已遍布全国各地,生产着几百种规格、型号和系列的试验机产品,有的试验机产品已出口到国外,远销到亚洲、欧美市场,具有一定的竞争能力。1.2 C/OS-II的特点 公开源代码源码清晰易读且结构协调。许多商业实时内核的软件是以源代码形式提供的。C/OS-的代码
9、漂亮和谐一致,注解详尽,组织有序。我认为仅给出一个源码是远远不足矣,不能够让我们看清这些代码的工作原理是什么以及这么多段的代码是怎么衔接到一起的。有那么多文件,数千行的程序,如果单从读源码入手,实时内核的整体架构并不是那么容易弄清楚。 可移植性绝大部分C/OS-的源码是用移植性很强的ANSIC写的。跟微处理器硬件相关的那部分是用汇编语言写的。汇编语言写的部分已经压到最低限度,使得C/OS-便于移植到其他微处理器上。如同C/OS 一样,C/OS-可以移植到许许多多微处理器上。条件是,只要该微处理器有堆栈指针,由CPU内部寄存器入栈、出栈指令。另外,使用的C编译器必须支持内嵌汇编(inline a
10、ssembly)或者该C语言可扩展、可连接汇编模块,使得关中断、开中断能在C语言程序中实现。C/OS-可以在绝大多数8位、16位、32位以至64位微处理器、微控制器、数字信号处理器(DSP)上运行。 可固化 C/OS-是为嵌入式应用而设计的,这就意味着,只要有固化手段(C编译、连接、下载和固化),C/OS-可以嵌入到设计的产品中成为产品的一部分。 可裁剪 可以只使用C/OS-中应用程序需要的那些系统服务。这样可以减少产品中的C/OS-所需的存储空间(RAM和ROM),这种可裁剪性是靠条件编译实现的。只要在用户的应用程序中(用#define constants 语句)定义哪些C/OS-中的功能是
11、应用程序需要的即可。 占先式 C/OS-完全是抢占式的实时内核。这意味着C/OS-总是运行就绪条件下优先级最高的任务。 多任务 C/OS-可以管理64个任务,然而,目前这一版本保留8个给系统。应用程序最多可以有56个任务。赋予每个任务的优先级必须是不同的,这意味着C/OS-不支持时间片轮转调度法(Round-robin Scheduling)。该调度法适用于调度优先级平等的任务。 可确定性 全部C/OS-的函数调用与服务的执行时间具有其可确定性。也就是说,全部C/OS-的函数调用与服务的执行时间是可知的。进而言之,C/OS系统服务的执行时间不依赖于应用程序任务的多少。 任务栈每个任务有自己单独
12、的栈,C/OS-允许每个任务有不同的栈空间。以便压低应用程序对RAM的需求。使用C/OS-的栈空间校验函数,可以确定每个任务到底需要多少栈空间。 系统服务 C/OS-提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。 中断管理 中断可以使正在执行的任务暂时挂起。如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255层。 稳定性与可靠性 C/OS-是基于C/OS的,C/OS自1992年以来已经有好几百个商业应用。C/OS-与C/OS的内核是一样的,只不过提供了更多的功能。2 概论基于ARM7嵌入式控制的试验
13、机系统,适用于当前的试验机行业、工矿自动化称量(配料)控制等相关行业,属于采用先进的芯片集成技术和专业设计的数据采集放大的过程控制系统。 该系统适用于各种金属与非金属材料的各项力学性能指标的测试,有着丰富的应用前景,本数据采集系统就是试验机系统中的一个分支,利用ARM7嵌入式控制器以及实时的C/OS-II操作系统来实现高效,实时的数据采集工作,并附带数据的存储、处理工作。由于数据采集的实际工作环境十分复杂,因此本系统要求高度的实时性与稳定性,同时为了进行数据的存储,处理工作,可擦写的存储器也是不可或缺的。因此,我们采用了通过NASA鉴定,其稳定性足以在航天器上利用的C/OS-II系统作为我们的
14、操作系统,同时采用了ATMEL的AT45DB321C芯片作为我们的存储介质,从而实现稳定、高效的数据采集、存储处理工作。其重点是数据的采集存储过程以及C/OS-II的移植。3 问题背景 之所以采用 C/OS-II实时操作系统,是因C/OS-II属于可剥夺型内核,可移植,可裁剪,可管理多个任务,最多可管理64个,其每个任务都拥有自己独立的堆栈。C/OS-II提供了非常丰富的系统服务功能,比如信号量、消息邮箱、消息队列、事件标志、内存管理、时间管理等,这些功能可以帮助我们实现非常复杂的应用。C/OS-II已经在2000年7月经过了美国联邦航空管理局(Federal Aviation Adminis
15、tration)的认证,该认证表明:C/OS-II具有足够的稳定性和安全性,可以用于航天器这样的要求极为苛刻的复杂系统。 正是在有着丰厚的实力背景下,提出该试验机测控系统项目的开发设计,该系统主要是采用先进的测试手段、嵌入式ARM控制系统、20(24)位AD、结合复杂分析软件的高精度测量控制系统,以试验机为主机,配以传感器、引伸仪和计算机,同时在传统行业基础上,增加控制功能、网络传输和管理功能、兼带USB传输以及CAN总线传输方式,把采集到的数据,传给PC机,进行处理数据,用微机对主机进行控制。这样与老式试验机系统相比较,它的主要优点是把试验结果数字化,能够给出定量结果,并能够通过PC机模拟出
16、测量曲线,为材料的结构分析提供了很好的参考借鉴,提升了试验机这一传统产业,同时该系统在动态数据采集和高精度智能配料系统中, 也有很好的应用前景。本系统是基于ARM7嵌入式控制的试验机系统的一个具体实现。基于ARM7嵌入式控制的试验机系统,适用于当前的试验机行业、工矿自动化称量(配料)控制等相关行业,外部可以采用步进电机或伺服电机及其调整系统,结合当前市面产品,属于采用先进的芯片集成技术和专业设计的数据采集放大的过程控制系统。本系统采用了C/OS-作为实时嵌入式操作系统,作为通过NASA认证,其稳定性足以运用在航天器上的实时操作系统,C/OS-在稳定性与实时性方面的表现是有目共睹的,而其用于研究
17、的话完全免费的,感谢Jean J. Labrosse 先生,为我们提供了这么好的操作系统,才使得我们站在巨人的肩膀上站的更高,看得更远。第二章 系统分析 2.1系统开发环境及使用工具 本系统在windows2000 sp1环境下开发,使用了ARM集成开发工具开发,使用H-JTAG作为仿真调试软件。 硬件方面,使用了ARM7系列的AT91SAM7X256芯片,AD转换模块使用了深圳芯海公司的CS11 80芯片,flash存储芯片采用了ATMEL公司的AT45DB321C,使用了光栅尺与压力传感器做为信号输入以测试系统,各组件的详细内容将在接下来的章节里详细介绍。 2.1.1 ARM集成开发工具介
18、绍ARM集成开发工具(ARM Developer Suite),简称ADS,是一套集IDE,仿真调试功能于一身的集成工具,本系统的开发过程中使用的是其1.2版本,该版本可以在windowsNT,windows2000,windowsXP等多个操作系统下使用。2.1.2 H-JTAG介绍 当我们编写的程序运行出错,执行结果不是预想的那样时,仿真器可以给我们的程序调试带来很大的帮助。通过仿真器,可以在调试主机上控制目标板实现单步运行、全速运行、停止、断点等功能,可以观察芯片内部的每个寄存器的值和存储器的内容。使用仿真器,使查找错误变得十分方便,有利于编写出可靠的程序,可以极大地提高工作效率。 JT
19、AG (Joint Test Action Group,联合测试行动小组)是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试和系统仿真调试,通过JTAG接口,可以访问芯片内部所有部件,而不占用其它任何片上资源,属于完全非插入式调试。这种调试方法,目标程序仍然在目标板上执行,仿真时的硬件结构和实际运行时一致,因此,这种仿真方法最接近于系统实际运行时的状况,不会由于仿真器的插入带来线路板物理参数的改变,程序在仿真调试下执行的结果就是实际运行时的结果。ARM的JTAG接口是由5条信号线:TRST、TMS、TCK、TDI、TDO,分别为测试复位输入信号、模式选择、时钟、数据输入
20、和数据输出线。JTAG 仿真器是通过 ARM 芯片的 JTAG 接口进行调试的一种设备。它的一个端口和被仿真ARM芯片的JTAG端口连接,另一端则和调试主机相连,运行于调试主机上的调试软件向仿真器发送命令和数据,仿真器在这里起到一个协议转换的作用,利用JTAG协议与被仿真ARM通讯,完成调试主机和被仿真ARM间的数据传送。基于JTAG仿真的种种优点,现在普遍均采用JTAG 仿真器进行开发。 而目前市面上的商业仿真器,性能优良,但是价格比较昂贵,因此我们选择了wiggler仿真器,使用 WIGGLER JTAG 仿真器,需要在计算机上运行一个 JTAG 调试代理软件。调试主机上运行的集成开发环境
21、(例如 ADS)发出的调试命令经过一个调试代理进行协议转换,将符合JTAG协议的数据通过PC机并口输出,通过并口的信号线调试代理软件模拟JTAG的时序,达到与被调试ARM芯片通讯的目的。配合优秀的JTAG调试代理软件,功能完全可以媲美各种商业仿真器。H-JTAG 就是这样一款仿真驱动软件,由TWENTYONE大虾编写,支持大多数主流调试环境,我们的ADS1.2就是其中之一,同时它能支持所有的ARM7/ARM9处理器。2.1.3 开发板及周边硬件介绍本系统使用的开发板采用了基于ARM7TDMI的AT91SAM7X256芯片,ARM7系列为低功耗32位核,最适用于对价位和功耗敏感的消费类应用。AR
22、M7系列的主要特点如下: 1.嵌入式ICE-RT逻辑,该部分被集成进了所有的ARM处理器中,用于跟踪、调试程序;2. 极低功耗; 3. 能提供0.9MIPS/MHz(实际上就是1微秒处理0.9条指令)的三级流水线(取指、译码、执行)和冯诺依曼结构; ARM7TDMI是世界上广泛使用的32位嵌入式RISC处理器。它是目前用于低端的ARM处理器核,应用范围非常广。 ARM7TDMI的含义如下: 1. T 16位压缩指令集Thumb; 2. D 支持片上调试,处理器可以响应调试指令以暂停程序的运行; 3. M 增强型乘法器(multiplier),与以前的处理器相比性能更高,其能够产生全64位结果;
23、 4. I 嵌入式ICE逻辑,支持片上断点和调试点。开发板同时使用了ATMEL的AT45DB321C FLASH芯片作为存储介质,使用了深圳芯海公司的CS1180芯片作为A/D转换模块,同时有LED,数码管,4*4键盘灯周边设备。开发板通过并口线与仿真器相连接同时通过PC的并口线进行与PC之间的通讯工作,其原理图如下。(图4.1.3.1)开发板AD,SPI,FLASH原理图下面是实物图:(图4.1.3.2)开发板实物图同时开发板可以外接光栅尺以及压力传感器,以提供信号输入测试整个系统,同时系统的测试过程中我们还用到了万用表,示波器等辅助工具。 (图4.1.3.3)光栅尺 (图4.1.3.4)压
24、力传感器(图4.1.3.5)示波器 第三章 系统设计31 系统设计思路与实现方法 本系统采用了模块化,结构化面向对象的设计方式,整个系统主要分为SPI(PDC)模块,AD转化模块,FLASH存储模块以及C/OS-的移植。下面的章节中将分别进行说明。具体系统设计,如下:311 SPI(PDC)模块的设计与实现有一位嵌入式方面的前辈曾经跟我们说过:驱动的编写过程其实就是寄存器的操作过程。这句话可谓切中要害,SPI(PDC)驱动的编写过程正是一系列寄存器操作的集合。首先是SPI的初始化配置过程,主要是四个引脚的配置,其数据手册的描述如下:The SPI system consists of two
25、data lines and two control lines: Master Out Slave In (MOSI): This data line supplies the output data from the master shiftedinto the input(s) of the slave(s). Master In Slave Out (MISO): This data line supplies the output data from a slave to the inputof the master. There may be no more than one sl
26、ave transmitting data during any particulartransfer. Serial Clock (SPCK): This control line is driven by the master and regulates the flow of thedata bits. The master may transmit data at a variety of baud rates; the SPCK line cycles oncefor each bit that is transmitted. Slave Select (NSS): This con
27、trol line allows slaves to be turned on and off by hardware.中文翻译:SPI 系统包括两条数据线及两条控制线: 主机输出从机输入(MOSI):该数据线将主机输出数据作为从机输入移入。 主机输入从机输出(MISO):该数据线将从机输出作为主机输入。传输时,只有单从机传输数据。 串行时钟(SPCK):该控制线由主机驱动,用来调节数据流。主机传输数据波特率可变;每传输一位,产生一个SPCK 周期。 从机选择(NSS):该控制线允许硬件开关从机。我们根据数据手册配置这四个引脚,之后是初始化SPI的寄存器,我们把要发送的数据或者要接的数据放在寄
28、存器里面,然后使能SPI,SPI就可以发送和接收数据了,这样,外设如:FLASH、A/D 调用SPI驱动就可以和CPU进行通讯了。在这里需要说明的是,我们不使用SPI的寄存器,而是SPI的另一组寄存器PDC,用SPI的寄存器进行数据传输,需要CPU的干预,这样,极大地降低了CPU的工作效率,用PDC传输则不用,我们只需把要发送或者要接收的首地址写入PDC,PDC就可以自行发送和接收数据,整个过程不需要CPU干预,发送和接收完毕,SPI会引发中断,通知CPU数据传输完成。PDC的简介如下:外设数据控制器(PDC) 在诸如UART、USART、SSC、SPI、MCI 等片上外设与片内或片外存储器间
29、传输数据。使用外设数据控制器避免处理器干涉并减去了处理器中断处理开销。这显著减少了数据传输所需时钟周期数并提高了微控制器性能,使其更加高效。SPI的方框图如下:312 AD转换模块的设计与实现(CS1180)CS1180 是高精度、低功耗模数转换芯片。其分辨率为20bit,有效分辨率可达19 位。可以广泛使用在工艺控制、量重、液体/气体化学分析、血液分析、智能发送器、便携测量仪器领域。串行总线接口( SPI )CS1180 通过SPI 总线与外部的控制器进行通讯。CS1180 只能用于从模式。总线接口是标准的四线SPI 总线,包括CS,SCLK,SDI 和SDO。片选信号( CS )在与CS1
30、180 进行通讯前,外部的控制器必须先发出CS 片选信号。在整个通讯期间,CS信号必须维持为低。当CS 信号变高后,整个SPI 总线会被复位。CS 信号也可以被接为常低。当CS 信号被拉为常低时,SPI 总线可以工作在三线模式,这种情况比较适合于CS1180 和外部的微控制器进行通讯。串行时钟( SCLK )SCLK 为施密特触发,用来对SDI 和SDO 信号进行采样。为了防止错误的采样数据,SCLK 必须十分干净。如果在3 个DRDY 周期内都没有SCLK 时钟出现,那么在下一个SCLK来临时,SPI 总线将被复位,进而开始下一个通讯周期。SCLK 上的一个特定的波形可以复位整个芯片。数据输
31、入( SDI )和数据输出( SDO )SDI 和SDO 引脚分别用来输入和输出数据。在没有使用时,SDO 为高阻态,这样就允许将SDI 和SDO 接在一起然后通过一个双向的总线来驱动它。数据准备就绪 ( DRDY )DRDY 信号用来表示内部数据寄存器的状态。当内部数据寄存器DOR 内新的数据准备就绪时,DRDY 信号会变低。当执行完一个从内部数据寄存器DOR 读取数据的读操作后,DRDY 信号将变高。在DOR 寄存器的数据准备更新时DRDY 信号也会变高,表示此时DOR寄存器内的数据不可用,防止在DOR 寄存器进行更新时从DOR 寄存器内读取数据。DRDY 的信号也可以从ACR 寄存器的b
32、it 7 来获得。上电复位及芯片的复位(RESET)CS1180 在上电过程中会自动产生复位信号。在正常工作时,有两种方法可以对CS1180 进行复位:发送RESET 指令,在SCLK 上发送特定的波形 。指令操作CS1180 使用了一系列指令,指令完成对芯片的工作模式控制、工作速度控制、误差校正等。这些指令中有些是单条的(比如RESET),有些则需要另外的操作数(比如WREG等)。基本实现过程通过向SPI的读写驱动发送不同的指令实现对CS1180的控制(如CS1180初始化)。通过传感器发送的模拟信号经过CS1180的A/D转换,转换成数字信号,并将数据保存在CS1180的数据寄存器DOR(
33、DOR0-DOR2,其中DOR0的低四位为无效位)中。在读取DOR中的A/D转换数据时,要通过SPI的写驱动发送给CS1180一条读DOR寄存器的指令,然后通过SPI的读驱动将数据读到我们指定的位置当中以供上层应用程序调用。(具体代码参见关键代码分析部分,下同)。其他的各项操作也是大同小异,只需熟读数据手册同时按照规定的时序进行编码即可。313 FLASH存储模块的设计与实现(AT45DB321C) FLASH存储模块的存储过程,主要分为缓冲区读写,存储页面读写,读状态寄存器几个过程,按照面向对象,结构化的设计思想,我们将其封装为独立的模块,各模块之间的实际实现方式相差并不是很大,下面我们就缓
34、冲区的读操作来阐述一下主要的实现方法。通过阅读FLASH芯片的数据手册我们可以知道,对于FLASH的操作,完全是通过操作码传递的方式来进行的,比方说缓冲区的的读取,数据手册上有如下的描述:“Data can be read from either one of the two buffers, using different opcodes to specify which buffer to read from. An opcode of D4H is used to read data from buffer 1, and an opcode of D6H is used to read
35、data from buffer 2. To perform a buffer read, the opcode must be clocked into the device followed by three address bytes comprised of 14 dont care bits and 10 buffer address bits (BFA9-BFA0). Following the three address bytes, an additional dont care byte must be clocked in to initialize the read op
36、eration. Since the buffer size is 528 bytes, 10 buffer address bits are required to specify the first byte of data to be read from the buffer. The CS pin must remain low during the loading of the opcode, the address bytes, the dont care bytes, and the reading of data. When the end of a buffer is rea
37、ched, the device will continue reading back at the beginning of the buffer. A low-to-high transition on the CS pin will terminate the read operation and tristate the output pin (SO).”这段话翻译过来大体是这样的:“可以通过两块缓冲区中的任意一块来读取数据,不同的是使用不同的缓冲区要使用不同的操作码,选择缓冲区1的话操作码应该为D4H,缓冲区2的话应该为D6H,要完成数据的读取工作,操作码后应该紧跟3个字节的地址码,
38、先是14位的无效位,然后的10位来表示buffer的地址,在这3个字节的数据后,一个无效字节被需要以初始化读操作。在整个数据读取过程包括操作码的传递,数据的读取,cs引脚必须被置低,cs脚从低到高的变换将会终止读操作。”(翻译水平有限,但确切地操作步骤应该是这样的)。看起来很复杂,但是经过有选择的删减后我们可以将其精简为下面的几句话:整个过程分为写操作码及地址与读取数据两部分,24位的地址的低10位为有效数据表示缓冲区的地址,整个过程中要维持CS的低电平。 明确了以上几点,我们的工作就相对简单多了,我们只需编写代码按照规定的时序通过SPI(PDC)来发送接受数据即可,而实际的结果也正如我们所料
39、,按照这样的思路编写的代码正确的读出了缓冲区的内容。(详细代码请参阅附件中的工程代码及代码分析部分,下同)。其他的各项操作也是大同小异,只需熟读数据手册同时按照规定的时序进行编码即可。314 C/OS-实时系统的移植与系统集成C/OS-属于可剥夺型内核,可移植,可裁剪,最多可管理64个任务,其每个任务都拥有自己独立的堆栈。C/OS-提供了非常丰富的系统服务功能,比如信号量、消息邮箱、消息队列、事件标志、内存管理、时间管理等,这些功能可以帮助我们实现非常复杂的应用,要使用这些功能,我们首先要做的就是把C/OS-移植到我们的AT91SAM7X256上来。C/OS-的源码在 网站注册之后就可以下载的
40、到,下载之后就进入了实际的移植过程。移植过程分为处理器移植与编译器移植2部分,具体的移植过程我们通过阅读官方发布的AN-1014文档发现,处理器移植要做的仅仅是要我们建立一个包含C/OS-源码的工程,并实现OS_CPU.H、OS_CPU_C.C、OS_CPU_A.S 3个文件即可。在这3个文件里面我们主要完成一些宏,数据类型的定义,设置堆栈增长方向,函数的声明及定义工作。(具体代码参见关键代码分析部分,下同)。完成了这3个文件之后,处理器移植就算大功告成了,接下来要进行的就是编译器移植。其实所谓的编译器移植,说白了就是更改由于编译器的不同出现的一些错误而已,因此,只要更改编译时出现的错误直到错
41、误完全消失就ok了。(虽然说起来很简单,但是编译器移植这一部分在实际开发中占用了大量时间,甚至超过了处理器移植,理论跟实践之间的差距仍然还是很大的-).剩下的就是系统集成过程了。所谓系统集成,就是将我们的各个功能模块按照我们预期的设计集成到我们的C/OS-系统平台上来,从而使其能够高效,实时,多线程的运行。由于我们采用了模块化,结构化的代码编写方式,因此系统集成这一块内容实现起来就比较简单了,只要将要用到的各个模块组合起来,给任务分配合适的优先级,同时加入临界处理就可以了。最后就是系统的启动部分了,一个系统能否正常运行,最开始的肯定是启动要正确,因此启动代码的重要性是不可忽视的。根据不同的需要
42、,我们可以编写不同的启动代码,在本系统的启动代码里,我们主要实现关中断,设置异常向量表,设置时钟等几个功能,如果以后系统有扩展需要的话,随时根据需要来增减相应的功能代码即可。3.2 系统及关键代码分析3.2.1 系统测试及分析本数据采集系统安装调试后,各项性能与技术指标均能达到设计要求。在大量的数据采集,数据处理与存储过程测试中,都有优异的表现。本系统的实时性,精确性,都达到了预期目标及相关标准的规定,具有一定的推广及应用价值。3.2.2 部分关键代码分析 . 在C/OS-系统中,我们加入了互斥信号量的操作,这样可以使我们的系统,使得FLASH或者SPI在调用时,其使用时的优先权不被剥夺,保证
43、了一方在使用时不会让另一方抢占其优先使用权。(具体代码体现见FLASH,CS1180。) 具体在FLASH中的代码,如下:OSMutexPend(hSPI0, 0, &_u8Err); _SendOptFlashCode(_bCmd, 4, _bFBuf, u16DataLen, NULL, NULL); macWaitSPIRecvEnd(); while(!(_GetFlashStatus() & FLASH_IS_RDY); OSMutexPost(hSPI0); . 写入FLASH的操作 当C/OS-在采集到的数据需要写入FLASH中的时候,此时需执行该任务切换,即FLASH接下来做的
44、重要工作就是擦除页面进行写入数据的操作。具体擦除页面并写入数据的FLASH操作代码,如下: BOOLEAN FlashWrite(INT16U u16PageIdx, INT16U u16ByteAddr, INT8U *pbData, INT16U u16DataLen)_align(4) INT8U _bCmd4;INT8U _bFBufFLASH_BUF_SIZE;U_FLASH_OPT_CODE _uFOptCode;INT16Ui;INT8U _u8Err;if(u16DataLen FLASH_BUF_SIZE)return OS_FALSE;memcpy(_bFBuf, pbDa
45、ta, u16DataLen); /* 首先进行页面擦除if(!_FlashErase(u16PageIdx)return OS_FALSE;/* 向FLASH写入数据memset(_bCmd, 0, sizeof(_bCmd); /* 按照严格的格式组装操作指令_uFOptCode.bstOptCode.bitByteAddr = u16ByteAddr;_uFOptCode.bstOptCode.bitPageAddr = u16PageIdx; _uFOptCode.bstOptCode.bitReserved = 0; _uFOptCode.bstOptCode.bitCmd = FL
46、ASH_CMD_PAGE_WRITE; *(unsigned int*)&_bCmd0) = macHighToLowSwitch(_uFOptCode.u32OptCode); OSMutexPend(hSPI0, 0, &_u8Err);_SendOptFlashCode(_bCmd, 4, _bFBuf, u16DataLen, NULL, NULL); macWaitSPIRecvEnd(); while(!(_GetFlashStatus() & FLASH_IS_RDY);OSMutexPost(hSPI0); FlashRead(u16PageIdx, u16ByteAddr, _bFBuf, sizeof(_bFBuf); for(i=0; iu16DataLen; i+)