毕业设计(论文)基于ARM的应用开发—LCD显示波形.doc

上传人:仙人指路1688 文档编号:4149668 上传时间:2023-04-07 格式:DOC 页数:39 大小:460.50KB
返回 下载 相关 举报
毕业设计(论文)基于ARM的应用开发—LCD显示波形.doc_第1页
第1页 / 共39页
毕业设计(论文)基于ARM的应用开发—LCD显示波形.doc_第2页
第2页 / 共39页
毕业设计(论文)基于ARM的应用开发—LCD显示波形.doc_第3页
第3页 / 共39页
毕业设计(论文)基于ARM的应用开发—LCD显示波形.doc_第4页
第4页 / 共39页
毕业设计(论文)基于ARM的应用开发—LCD显示波形.doc_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《毕业设计(论文)基于ARM的应用开发—LCD显示波形.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于ARM的应用开发—LCD显示波形.doc(39页珍藏版)》请在三一办公上搜索。

1、摘要随着现代计算机技术的飞速发展和互联网技术的广泛应用,从PC时代过渡到了以个人数字处理、手持个人电脑和信息家电为代表的3C(计算机、通信、消费电子)一体的后PC时代。后PC时代里,嵌入式系统扮演了越来越重要的角色,被广泛应用于信息电器、移动设备、网络设备和工控仿真等领域。本文讨论了基于ARM微处理器和嵌入式系统的应用开发,主要以波形采集、LCD显示和嵌入式系统C/OS-II为主要研究对象。描述了三星S3C44B0X微处理器及C/OS-II实时操作系统的特点,搭建了一个以S3C44B0X处理器为核心的通用嵌入式系统平台,并在此平台基础上实现了LCD显示波形、GUI绘图、多任务系统等典型应用。对

2、ARM微处理器和嵌入式系统的进一步教学和研究开发有一定的指导价值。关键词:ARM微处理器 嵌入式系统C/OS-II GUI绘图 多任务系统Based on ARM Applications DevelopmentLCD Show WaveformAbstractWith the development of the modern computer technology and the widely application of the Internet technology, We transited from the PC time to the latter PC time which i

3、s taking individual digital processing,grasping the personal computing and the information electrical appliances as representatives 3C (computer, correspondence, expense electron) a body .In the latter PC time, the inserted type system which acts the more and more important role, is widely applied i

4、n the information electric appliance, the mobile equipment, the network equipment and the labor controls domain and so on.This article discussed the application development based on the inserted type system and the ARM microprocessor, mainly by profile gathering, LCD demonstrated and the inserted ty

5、pe system C/OS-II is the main research object. Described the Sumsang S3C44B0X microprocessor and The characteristic of the real-time operating system C/OS-II. build a general inserted system platform take the S3C44B0X processor as the core, and has realized LCD model application, GUI cartography, mu

6、lti- duties system and so on in this platform foundation. The further teaching and the research development of the inserted type system and the ARM microprocessor has the certain instruction value.Keywords:ARM microprocessor The inserted type system C/OS-II GUI cartography Multi- duties system目录摘要IA

7、bstractII目录III1 前言11.1 研究的目的、意义1 1.2 国内外研究概况1 1.3 研究的主要内容3 2 总体方案设计4 2.1 嵌入式系统的定义及特点4 2.2 基于ARM核的微处理器S3C44B0X简介4 2.3 硬件系统的设计5 3 硬件单元电路的设计实现6 3.1 CPU核心板的硬件资源6 3.1.1 电源模块6 3.1.2 JTAG单元6 3.2 存储器单元7 3.2.1 线形flash存储器单元7 3.2.2 NAND_FLASH海量存储器单元7 3.2.3 同步动态存储器单元。7 3.3 LCD单元8 3.4 A/D转换单元9 3.5 信号调理单元10 3.6 C

8、PLD扩展单元11 3.7 44键盘12 4 嵌入式系统C/OSII在ARM上的移植14 4.1 移植前的准备工作14 4.2 C/OS的移植14 4.3 移植的具体实现15 4.3.1 设置OS_ CPU.h中与处理器和编译器相关的代码15 4.3.2 用汇编语言编写4 个与处理器相关的函数16 4.3.3 用C语言编写6个操作系统相关的函数(OS_ CPU_ C.C)18 4.3.4 测试移植是否成功20 5 嵌入式系统C/OS-II的具体应用实现21 5.1 多任务系统21 5.1.1 多任务21 5.1.2 任务21 5.1.4 空闲任务(Idle Task)22 5.1.4 任务切换

9、(Context Switch or Task Switch)22 5.1.5 任务调度(Task Scheduling)23 5.1.6 任务优先级及分配23 5.1.7 任务间的通讯(Intertask Communication)23 5.2 任务管理24 5.2.1 建立任务24 5.2.2 任务堆栈24 5.2.3 删除任务24 5.2.5 恢复任务24 5.3 时间管理25 5.3.1 任务延时函数25 5.3.2 任务延时函数25 6 图形用户界面GUI的具体实现26 6.1 图形设备接口26 6.2 内存管理26 6.3 窗体管理27 6.4 事件管理27 7 软件流程与算法分

10、析28 7.1 主程序流程图28 7.2 主要算法分析29 7.2.1 算法原理29 7.2.2 画圆算法的具体实现30 8 总结31 参考文献32 附录 主电路原理图34 1 前言1.1 研究的目的、意义随着现代计算机技术的飞速发展和互联网技术的广泛应用,从PC时代过渡到了以个人数字处理、手持个人电脑和信息家电为代表的3C(计算机、通信、消费电子)一体的后PC时代。嵌入式系统的快速发展使之成为当前微电子与计算机技术中的一个重要分支。嵌入式系统的应用遍及航天、电信、网络、信息家电、医疗、工业控制等各个领域。嵌入式系统由硬件和软件两大部分组成。从硬件方面来讲,嵌入式系统的核心部件是各类嵌入式微处

11、理器;对软件而言,嵌入式系统的软件一般由嵌入式操作系统和应用软件组成,而嵌入式系统的功能软件则集成于硬件系统中,系统的应用软件与硬件一体化。就目前的嵌入式微处理器而言,主要有PowerPC、X86、MIPS、ARM/Strong、ARM等系列,其中ARM处理器以其低成本、低功耗、高性能成为嵌入式系统设计的首选。一般地,一个嵌入式系统可能同时控制/监视很多外设,要求实时响应,有很多任务要处理,各任务之间有很多消息传递,采用原有的程序设计不能满足要求。因此,实时多任务操作系统(RTOS)就成为嵌入式系统的一个基本要求。在诸如pSOS、Linux、Windows CE、VxWorks、EPOC、C/

12、OS-II等众多知名RTOS中,C/OS-II以其源码公开、可移植性好、简单易学等优点可作为高校指导教学和初学者的首选。1.2 国内外研究概况国外实时操作系统已经从简单走向成熟,有代表性的产品主要有VxWorks,ONX,Palm OS,Windows CE等,它占据了机顶盒、PDA等绝大部分市场。20世纪80年代,商业化的嵌入式操作系统开始得到蓬勃发展。目前国内外已有几十种商业操作系统可供选择,如VxWorks、pSOS、Palm OS、Neculeus、WindowsCE 和“女娲Hopen”等。在中国,嵌入式操作系统可分为两大类型:一类是自主版权的操作系统,另一类是基于Linux 的操作

13、系统。自主版权的操作系统方面,国内有“女娲Hopen”操作系统、桑夏2000 操作系统和DeltaOS 操作系统等。“女娲Hopen”是凯思集团推出的产品,目前已进入产业化阶段,它能支持所有主流的嵌入式芯片。凯思与联想、TCL、Motorola、Winbond、上海贝尔等国内外知名厂商合作开发出了多种产品:联想“天玑810”、天玑e卡通、“天玑911”、TCL 集团家庭信息显示器HiD、天亿股票机顶盒、VOD 视频点播机顶盒等。桑夏2000操作系统是深圳桑夏公司推出的产品,是一个面向嵌入式应用的实时操作系统,具备文件系统和嵌入式数据库引擎,提供了基本的图形用户接口,支持层次化、模块化的软件模型

14、,可运行在“龙珠等三种系列的CPU上,支持包括TCP/IP 协议在内的网络通讯协议。DeltaOS 是北京科银京成公司开发的嵌入式实时操作系统,它主要包括:内核DeltaCORE 、嵌入式TCP/IP嵌入式文件系统DeltaFILE 以及嵌入式图形接口DeltaGUI。DeltaOS支持ARM7、Strong ARM、PPC8XX、PPC4XX、X 8 6、MIPS 等多种嵌入式微处理器,可应用于消费电子产品、通信产品、工业控制及军用电子产品中。近年来,嵌入式Linux 进展较快。在中国,以Linux为基础的嵌入式操作系统比较活跃,其中,中软Linux、红旗Linux、东方Linux 是业界的

15、代表。中软总公司以数控平台为背景, 推出了中软Linux3.0。中软嵌入式Linux是实时系统,这套基于Linux的嵌入式系统不仅满足了数控机床的需求,同时也可以应用于其他工业控制领域。红旗Linux 把工控和信息家电作为主要的发展领域。红旗Linux 为用户提供了Windows 风格的控件集、图形中文环境和嵌入式数据库的开发工具。中科红旗公司开发出了针对工控领域的嵌入式Linux 系统。东方Linux 是凯思集团推出的产品。凯思通过与中芯微合作,已经推出了网络计算机(NC)。采用东方Linux的NC 系列产品除具有传统终端的功能之外,还具有本地计算能力,用户可以通过NC 使用安装在服务器上的

16、应用程序,并可以使用多种本地软件。该产品工作方式基于集中与开放网络服务的运算模式,兼容多种网络协议标准,用户可以在任意地点通过网络连接设备,实时访问服务器端的应用程序。该产品可应用于政府、国防、教育、商业、金融等领域。在国内的嵌入式产品的市场,嵌入式系统也逐渐地崭露头角。智能手机:2004 年中国手机产量为1. 7 亿部,出口上升到1. 05 亿部。据测算,智能手机市场每年以300 %的速度快速增长,预计到2006 年,智能手机的保有量将达到2500 万台。2006 年之后,由于3G网络商用的推动作用,智能手机仍将快速增长。数码相机:2004 年中国数码相机市场也开始呈现强劲的增长势头,并且需

17、求开始集中到320 万像素以上数码相机。根据CCID 的市场调查报告,2004 年全年中国数码相机市场销量达到了264. 7 万台,销售额达到了49. 52 亿元,同比增长95. 49 %和69. 0 %。数字电视:2004 年中国数字电视用户达到了120 多万户。CCID 的预测数据显示,2008 年中国数字有线电视用户为3373 万,普及率将达到24 %。近期来, IPTV 备受关注。IPTV 是一种集互联网、多媒体、通讯等多种技术于一体,向用户提供包括数字电视在内的多种交互式服务的新技术。来自IDC(中国) 的数字显示,近年我国的IPTV STB 用户年复合增长率将达到245 % ,到2

18、008 年将达到855 万。目前,国内已有十八个城市试点IPTV。汽车电子:随着汽车电子化程度的不断提高,汽车电子产值增长迅速。2004 年全球汽车电子总产值为1240 亿美元,预计2005 年将达到1340 亿美元。中国的汽车产值正以每年30 %的速度增长,2004 年全国汽车产量超过500 万辆。据CCID - MRD 统计,汽车电子的增长率将达到20 % ,到2005年,中国汽车电子市场的规模将突破2500 亿元。联想控股、康佳集团、创维、新科电子、TCL、长虹都开始或已经进入汽车电子领域。可见,随着汽车产业的快速发展,汽车电子产业将成为支持制造业发展的大产业。1.3 研究的主要内容本文

19、基于S3C44B0X微处理器和嵌入式实时操作系统建立的平台实现如下应用设计:1、 建立图形化界面,实现嵌入式多任务系统;2、 采集模拟信号并通过LCD实时显示波形,信号频率范围:10Hz10kHz;3、 在LCD实现GUI绘图;2 总体方案设计2.1 嵌入式系统的定义及特点嵌入式系统是嵌入到对象体系中的专用计算机系统。以嵌入式计算机为核心的嵌入式系统是继IT网络技术之后,又一个新的发展方向。IEEE(国际电气和电子工程师协会)对嵌入式系统的定义为:嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置”(原文为Devices Used to Control,Monitor or Assist

20、 the Operation of Equipment,Machinery or Plants)。这主要是从应用对象上加以定义,涵盖了软硬件及辅助机械设备。国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。嵌入式系统有如下显著特点:(1)嵌入式系统是面向特定任务的,不同于一般通用PC计算平台,是“专用”的计算机系统;(2)嵌入式系统运行环境差异很大;(3)嵌入式系统比通用PC系统资源少;(4)嵌入式系统功耗低、体积小、集成度高、成本低;(5)嵌入式系统具有系统测试和可靠性评估体系;(6)嵌入式

21、系统具有较长的生命周期;(7)嵌入式系统具有固化在非易失性存储器中的代码;(8)嵌入式系统使用的操作系统一般是实时操作系统RTOS;(9)嵌入式系统需要专用开发工具和方法进行设计。C/OS是一种源码公开的实时嵌入式操作系统。它完全是占先式的实时内核,是基于优先级的,即总是让就绪态中优先级最高的任务先运行,因此实时性比非占先式的内核要好。它包含了实时内核、任务管理、时间管理、任务间通信同步(信号量、邮箱、消息队列)和内存管理等功能;它的绝大部分代码是用C语言编写的,可移植性强。目前,C/OSII绝大多数可以在8位、16位、32位以至64位微处理器、微控制器、数字信号处理器DSP上运行。2.2 基

22、于ARM核的微处理器S3C44B0X简介S3C44B0X微处理器是三星公司专门为手持设备和一般应用提供的高性价比和高性能的微处理器解决方案,它使用ARM公司的16/32位ARM7TDMI RISC核,采用0.25m CMOS工艺制造,最大工作频率为66MHz。这款芯片内部集成了8KB Cache、内部SRAM、LCD控制器、带自动握手的2通道UART、4通道DMA、系统管理器(片选逻辑,FP/EDO/SDRAM控制器)、带PWM功能的5通道定时器和一个内部定时器,I/O端口,RTC,8通道10位ADC,IIC总线接口,IIS总线接口,同步SIO接口和PLL倍频器。这些都起到了降低系统总成本和减

23、少外围器件的作用。ARM7TDMI RISC处理器(66MHz),包括了Thumb代码压缩器、片上ICE断点调试支持和32位的硬件乘法器。2.3 硬件系统的设计整体系统的硬件框图如图2-1所示,系统主要包括以下几个模块:图2-1 系统结构Fig.2-1 Configuration of the system整个硬件系统主要分为CPU单元、存储器单元、LCD单元、A/D转换单元、信号调理单元、CPLD扩展单元、键盘等七个单元。3 硬件单元电路的设计实现3.1 CPU核心板的硬件资源核心CPU板上主要包括以下单元和芯片,32位ARM7TDMI的处理器,即三星的S3C44B0X芯片,一个UART接口

24、,完成串口通信,最高波特率为115200bps,一个RTC实时时钟,一个5V转3.3V和2.5V的电源管理模块,一个20针的JTAG调试接口。3.1.1 电源模块在S3C44B0X CPU板上由于其内核采用2.5V,I/O接口采用采用3.3V供电,因此需要将通用的5V转换成2.5V和3.3V。下图为使用LM117电源转换芯片把5V转换成3.3V和2.5V的转换电路。图3-1 电源转换电路Fig.3-1 Power conversion circuits3.1.2 JTAG单元JTAG(Joint Test Action Group,联合测试行动小组)是一种国际标准测试协议,主要用于芯片内部测试

25、及对系统进行仿真、调试,JTAG技术是一种嵌入式调试技术,它在芯片内部封装了专门的测试电路TAP(Test Access Port,测试访问口),通过专用的JTAG测试工具对内部节点进行测试。目前大多数比较复杂的器件都支持JTAG协议,如ARM、DSP、FPGA器件等。标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为测试模式选择、测试时钟、测试数据输入和测试数据输出。表3-1 JTAG接口定义Tab3-1 The JTAG of Interface definition引 脚名 称描 述1VTref目标板参考电压、接电源2VCC接电源3nTRST测试系统复位信号4、6、8、10

26、、12、14、16、18、20GND接地5TDI测试数据串行输入7TMS测试模式选择9TCK测试时钟11RTCK测试时钟返回信号13TDO测试数据串行输出15nRESET目标系统复位信号17、19NC未连接3.2 存储器单元存储器单元主要由三部分组成:线形flash存储器单元、NAND_FLASH海量存储器单元和同步动态存储器单元。3.2.1 线形flash存储器单元该存储器单元选用2MB字节的SST39VF160,16位数据总线,片连接NGCS0,CPU分配给它的地址空间为0x000000000x001fffff,也就是S3C44B0CPU的bank0区。启动代码部分则放在从0x000000

27、00开始的地址空间内。程序代码可以在里面执行。3.2.2 NAND_FLASH海量存储器单元该存储单元选用16MB芯片K9F2808。8位数据总线传输,GPC9接其片选信号,CPU分配给它的地址空间为0x040000000x005fffff,也就是S3C44B0CPU的bank2区。GPE0接NAND_FLASH的状态监测脚,GPC14接ALE地址锁存器使能,GPC15接CLE命令锁存使能。NECS2也接入该单元。3.2.3 同步动态存储器单元。该存储单元选用两片8MB字节的HY57V641620,16位数据总线。片选NSCS0和NSCS1分别接U10和U11两个单元,CPU分配给U10单元的

28、地址空间为0x0C0000000x0C7fffff,也就是S3C44B0CPU的bank6区。CPU分配给U11单元的地址空间为0x0E0000000x0E7fffff,也就是S3C44B0CPU的bank7区。3.3 LCD单元LCD液晶屏选用的是5.7寸,320240像素,256色的彩屏,其电源范围宽(2.7V to 5.5V),低功耗可满足产品的省电要求。由于S3C44B0X上的LCD控制器可以支持这种类型的LCD显示屏,所以可以大大节省外围电路,直接通过VFRAME、VLINE、VCLK、VM、VD等信号线与LCD相接进行视频数据的传输和产生必要的控制信号。硬件结构图如下:图3-2 L

29、CD硬件结构图Fig.3-2 The Hardware chart of LCD关于S3C44B0X的LCD控制器的几点说明:1、S3C44B0X的外部接口信号VFRAME是LCD控制器和LCD驱动器之间的帧同步信号端;VLINE是控制LCD控制器和LCD驱动器之间的行同步信号端;VCLK是LCD控制器和LCD驱动器之间的像素时钟信号端;VM是LCD驱动器所使用的交流信号;VD7:0是LCD像素数据输入端口。2、LCDCON1/2控制寄存器主要配置VFRAME、VCLK、VLINE和VM控制信号,LCDCON3控制LCD刷新模式。3、LCDADDR1/2/3为帧缓冲区起始地址寄存器,主要是用来

30、选择黑白、灰度、彩色模式,指定视频缓冲区在系统存储器内的Bank地址和指示帧缓冲区或在扫描LCD时的上帧缓冲区的开始地址。4、红绿蓝查找表寄存器分别为REDVAL、GREENVAL、BLUEVAL,分别可以定义8种红色,8种绿色和4种蓝色;5、除此之外,不同红色的差异,是通过时间抖动的算法及帧率控制的方法实现的。因此在LCD初始化的程序中还要对抖动模式控制寄存器进行设置。3.4 A/D转换单元A/D转换单元选用芯片AD7822,单极性输入,采样分辨率8BIT,并行输出;内涵取样保持电路,以及可选择使用内部或外部参考电压源,具有转换后自动Power-Down的模式,电流消耗可降低至5A以下。转换

31、时间最大为420ns, SNR可达48dB,INL及DNL都在0.75 LSB以內。参考电压源 + 2.5V,偏置电压输入引脚Vmid = + 2.5V。AD7822的控制时序图如下图3-3所示:图3-3 AD7822控制时序图Fig.3-3 The control time series chart of AD7822AD7822与ARM连接的电路原理图如下图3-4所示图3-4 AD7822与ARM连接的电路原理图Fig.3-4 The circuit theory of ARM links with AD78223.5 信号调理单元信号调理单元主要是由LF356组成的二级运算放大电路,其主

32、要作用是使信号符合A/D输入的要求,模拟输入信号经过运放处理后输入到AD7822,输入电压范围-12V+12V。电路原理图如下图3-5所示:图3-5 信号调理单元电路原理图Fig.3-5 The circuit theory of the signal conditioning modules3.6 CPLD扩展单元由于实验箱上的资源众多,几乎每一个设备资源都要使用片选信号或中断信号或一些串口的信号,以及一些寄存器的地址等等,所以实验箱通过加入了一片CPLD芯片,用来完成各资源所需的地址译码,片选信号,以及一些高低电平的模拟。本设计主要在应用键盘电路上应用到CPLD扩展单元,用来控制HD727

33、9A。CPLD单元使用S3C44B0X的片选NGCS4,地址是0x080000000x0a000000;我们通过给CPLD地址里写入相应的数据以产生相应的信号。例如:#define clrcs1 (*(volatile unsigned *)0x08200004) = 0x01;#define setcs1 (*(volatile unsigned *)0x08200004) = 0x02;利用宏定义来代替置高、置低;给相应得地址里写1,表示该CPLD的相应引脚输出低电平,给相应得地址里写2,表示该CPLD的相应引脚输出高电平。有的地址需要写入8位数据。在这里设置标号s_clr来实现HD727

34、9向CPLD发数据,其地址为0x08800000,实现方法是在地址里写0x01;设置标号s_set来实现CPLD向HD7279发数据,其地址为0x08800000,实现方法是在地址里写0x02。3.7 44键盘 键盘接口是由芯片HD7279A控制的,HD7279A是一片具有串行接口的,可同时驱动8位共阴式数码管或(64只独立LED)的智能显示驱动芯片,该芯片同时还可以连接64键的键盘矩阵,单片即可完成LED显示,键盘接口的全部功能。HD7279A内含有译码器,可直接接受BCD码或16进制码,并同时具有两种译码方式。此外,还具有多种控制指令如消隐、闪烁、左移、右移、段寻址等,具有片选信号可方便地

35、实现多于8位的显示或多于64键的键盘接口。键盘的连接示意图如下图3-6所示图3-6 键盘接口连接图Fig.3-6 Keyboard interface Figure读键盘数据指令15H从HD7279A读出当前的按键代码。与其他代码不同,此命令的前一个字节00010101B为微控制器传送给HD7279A的指令,而后一个字节d0-d7则为HD7279A返回的按键代码,其范围是0-3FH(0xFF)。此指令的前半段,HD7279A的DATA引脚处于输入状态,以接受来自微处理器的指令;在指令的后半段,DATA引脚从输入状态转为输出状态,输出键盘代码的值。串行接口在读键盘指令的时序图如下图3-7所示:图

36、3-7 HD7279A读键盘指令时序图 Fig.3-7 The reading keyboard commands time series chart of HD72794 嵌入式系统C/OS在ARM上的移植4.1 移植前的准备工作S3C44B0X的0x00 0x1c 地址是ARM7TDMI的7种异常中断的入口, 上电复位的时候PC指针是指向地址0x00处, 通常在这里放置一条跳转指令, 让PC指向复位初始化子程序。它首先完成目标板上的硬件初始化, 一般包括: CPU 时钟、SDRAM存储器、堆栈、中断等。以下介绍初始化程序的具体编写。目标板上电, 首先要禁止看门狗、禁止所有中断、设置时钟控制

37、寄存器、设置锁相环倍频、设置存储器控制器、堆栈、中断处理和数据段初始化等, 具体程序如下所示:ResetHandler;禁止看门狗;禁止所有中断;设置时钟控制寄存器;设置锁相环倍频;设置存储器控制寄存器;堆栈初始化;设置中断处理;初始化完毕就从汇编进入C语言代码空间,在这里, 继续完成I/O端口设置、串口甚至网口等的初始化, 并定义一个自动装载定时器中断(通常选择在毫秒级) , 在它的中断处理程序里面调用C /OS-的OSTimeTick函数。这样它的时钟节拍就成为了系统的“脉搏”, 在每一个定时中断到来的时候, 完成任务切换。4.2 C/OS的移植C/OS-的大部分源代码是用C语言写成的,

38、仍需要C语言和汇编语言完成一些与处理器相关的代码。C/OS-的结构以及它与硬件的关系如图4-1所示。图4-1 C/OS-的结构与硬件的关系Fig.4-1 The structure and the relationship between hardware of C/OS-移植工作包括以下几个内容:1、用#define设置一些常量的值OS_CPU.h2、声明10个数据类型(OS_CPU.H)3、用#define声明三个宏(OS_CPU.H)4、用C语言编写六个简单的函数(OS_CPU_C.H)5、编写四个汇编语言函数(OS_CPU_A.ASM)4.3 移植的具体实现4.3.1 设置OS_ CP

39、U.h中与处理器和编译器相关的代码(1) 定义与编译器相关的数据类型不同的处理器有不同的字长, 所以C/OS-的移植包括了一系列的数据类型定义以确保其可移植性。C/OS-代码从不采用C的short, int和long等数据类型, 因为它们是与编译器相关的,不可移植。用户必须将任务堆栈的数据类型告诉给C/OS-。这个过程是通过声明OS_ STK为正确的C数据类型来完成的。S3C44B0的堆栈成员是16位, 所以将OS_ STK声明为无符号整形数。所有的任务堆栈都必须用OS_ STK声明数据类型。同时要添加CPU 状态寄存器数据宽度的定义为32位。(2)定义OS_ ENTER_ CRITICAL

40、( ) 和OS_ EXIT_ CRITICAL ( )C/OS-II需要先禁止中断再访问代码的临界区, 并且在访问完毕后重新允许中断。C/OS-能够保护临界区代码免受多任务或中断服务例程(ISR)的破坏。S3C44B0X是通过两个函数(OS_CPU_A.S) 实现开关中断的。(3)OS_STK_GROWTH 堆栈结构有两种, 一种是至上而下的堆栈, 一种是至下而上的。C/OS-II被设计成两种情况都可以处理。只要在结构常量OS_ STK_ GROWTH中指定堆栈的增长方式就可以了。置OS_ STK_ GROWTH为0表示堆栈从下往上增长。置OS_ STK_ GROWTH为1表示堆栈从上往下增长

41、。我们这里定义堆栈是从上往下增长的。4.3.2 用汇编语言编写4 个与处理器相关的函数(1)OSStartHighRdy ( ) 函数由OSStart函数调用, 程序结构如下:BL OSTaskSwHook;调用用户自定义的任务切换钩子函数OSRunning = TRUE;表明多任务环境已经建立R4 = addr_ OSTCBHighRdy取得优先级最高任务的任务控制块的地址SP = R4 : OSTCBHighRdy - OSTCBStkPtr将优先级最高的任务的堆栈指针保存到SPSP - SPSR, CPSR, R0 - R12, LR, PC从新任务堆栈中恢复出所有处理器的寄存器,执行中

42、断返回指令。(2)OS_ TASK_ SW ( ) 函数由OS_ TASK_ SW 宏调用, 该宏被OSSched任务间的切换函数调用, 程序结构如下:LR ( PC) , LR, R0 - R12, CPSR, SPSR - SP保存当前的处理器寄存器到堆栈中OSTCBCur - OSTCBStkPtr = SP保存当前任务的堆栈指针到当前任务TCB的0偏址内存BL OSTaskSwHook调用任务切换的功能扩展的函数OSTCBCur = OSTCBHighRdyOSPrioCur = OSPrioHighRdySP = OSPTCBCur - OSTCBStkPtrSP指向当前新任务的堆栈

43、指针SP - SPSR, CPSR, R0 - R12, LR, PC从新任务堆栈中恢复出所有处理器的寄存器,执行中断返回指令。(3)OSTick ISR ( ) 时钟节拍中断处理函数LR ( PC) , LR, R0 - R12, CPSR, SPSR - SP保存当前的处理器寄存器到堆栈中BL OSIntEnter ( )BL Timer0 interrup t ( )BL OSIntExit ( )SP - SPSR, CPSR, R0 - R12, LR, PC从新任务堆栈中恢复出所有处理器的寄存器,执行中断返回指令。(4)OSIntCtxSw ( ) 中断级任务切换函数由OSIntE

44、xit函数调用, OSIntExit函数由OSTick ISR调用, 程序结构如下:BL OSTaskSwHookOSTCBCur = OSTCBHighRdyOSPrioCur = OSPrioHighRdySP = OSPTCBCur - OSTCBStkPtrSP - SPSR, CPSR, R0 - R12, LR, PC从新任务堆栈中恢复出所有处理器的寄存器,执行中断返回指令。4.3.3 用C语言编写6个操作系统相关的函数(OS_ CPU_ C.C)(1)OSTaskStk Init ( )OSTaskCreate ( ) 和OSTaskCreateExt ( ) 通过调用OSTas

45、kStk Init ( ) 来初始化任务的堆栈结构。在用户建立任务的时候, 用户传递任务的地址, pdata指针, 任务的堆栈栈顶和任务的优先级给OSTaskCreate ( ) 和OSTaskCreateExt ( ) 。一旦用户初始化了堆栈, OSTaskStk Init ( ) 就需要返回堆栈指针所指的地址。OSTaskCreate ( ) 和OSTaskCreateExt ( ) 会获得该地址并将它保存到任务控制块(OS_TCB) 中。OS_STK* OSTaskStk Init(void(*task)(void*pd),void *pdata,OS_STK *ptos,INT16U

46、opt) unsigned int *stk;stk = ( unsigned int * ) ptos; /* 装载堆栈指针 */opt + ; /* 为新任务建立堆栈 */* - - stk = ( unsigned int ) task; /* pc */* - - stk = ( unsigned int ) task; /* lr */* - - stk = 12; /* r12 */save ARMs R0 - R12 into stk* - - stk = 1; /* r1 */* - - stk = ( unsigned int ) pdata; /* r0 */* - - s

47、tk = ( SUPMODE);* - - stk = ( SUPMODE);return ( (OS_STK *) stk);(2)OSTaskCreateHook ( )OSTaskCreate ( ) 和OSTaskCreateExt ( ) 创建任务的时就调用OSTaskCreateHook ( )。该函数允许用户扩展C/OS-II功能。当C/OS-II设置完内部结构, 在调用任务调度程序之前调用OSTaskCreateHook ( ) 。调用该函数时候是禁止中断,用户应尽量减少函数执行时间。当OSTaskCreateHook ( ) 被调用的时候, 它会收到指向已建立任务的OS_ TCB的指针, 它能访问所有的结构成员。(3)OSTaskDelHook ( )任务删除时会调用OSTaskDelHook ( ) 它在任务从C/OS

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号