kl800.com省心范文网

基于嵌入式平台的车载终端设计与应用


1 绪论 1.1 选题背景及意义

目前嵌入式技术作为数字系统市场的主要部分,已经成为消费电子,航天应用,办 公自动化,电信以及数字通信等领域的关键技术⑴。与通用计算机相比嵌入式处理器更 具有针对性的特点,支持特殊专用的功能,嵌入式设备通常应用于特定的场所[2]。嵌入 式系统的软、硬件设计具有灵活性,依据设计需要,在嵌入式研发过程中,可根据实际 需要添加软硬件相应模块,实现相应功能[3]。传统的嵌入式系统软件编程过程中,主要 釆用主函数循环,中断分支响应设计,往往导致设计程序过于复杂,引入嵌入式操作系 统实现多任务管理机制,即可减轻程序设计负担,又大大提高的嵌入式系统的性能[4]。 嵌入式操作系统可以兼容嵌入式硬件设备的差异性,将操作系统引入嵌入式系统开发已 经成为一种趋势。 另一方面,汽车作为重要的出行工具,随着其持有量的逐年上升,伴随而来的是道 路拥挤问题凸显,道路拥堵严重影响人们的正常工作生活,合理的车辆调度以及智能的 导航服务成为出行必备条件[5]。车辆导航是当前汽车电子行业研究的热点问题,全球定 位系统以及智能交通系统发展迅速。导航系统可为司机提路况信息服务,提高车辆行驶 效率与行车安全。全球定位系统(GPS)能为车辆提供精准的位置信息,地理位置信息 系统(GIS)为用户提供完整的路况信息,车辆监控中心为行驶车辆提供合理的调度[6_7]。 嵌入式车载设备将 GPS,GIS 技术结合应用,提供嵌入式电子地图具有浏览,查询,计 算等功能,为用户提供方便的导航服务。车载设备的多功能服务要求嵌入式系统运行要 具有高可靠性与实时性。嵌入式电子地图的设计与嵌入式设备的内存,显示界面,CPU 速度以及接口性能有着密切的关系[8]。嵌入式处理器作为车辆导航系统的终端设备,通 过网络实现设备与监控中心间的通信,嵌入式系统对车载终端性能具有很大影响[9]。将 嵌入式操作系统应用于车载导航设备中,实现终端多功能应用,极大程度为用户安全, 稳定,及时的导航服务。

1.2 嵌入式系统研究的发展现状 嵌入式系统自问世以来,系统功能需求日益复杂,嵌入式处理器研发技术不断提高, 嵌入式芯片在功耗,尺寸等方面的改进,使嵌入式系统产品成本不断降低目前市场 上已经推出处理能力更加强大的嵌入式处理器如 32 位,64 位处理器芯片以及 DSP 芯片 等,来提高嵌入式处理器处理数据速度[n]。同时在处理器上移植专用的嵌入式操作系统, 操作系统采用多任务处理机制,并提供个性化人机交互界面,支持丰富 API 程序接口[12]。 -1 基于嵌入式平台的车载终端设计与应用

2 车载终端嵌入式平台构建方案 2. 1 嵌入式系统设计思路 嵌入式系统设计开发过程中,需依据一定的幵发流程,正确合理地进行系统开发[26]。 (1)系统需求分析:根据需求确定系统设计的实现功能和目标。并制定可行性方案, 综合考虑设计系统需完成的基本功能、系统性能,以及设备开发成本,功耗等因素。 (2)系统结构设计:依据系统的设计任务与目标,设计实现目标方法,选择合适的 处理器,以及选择嵌入式操作系统。 (3)硬件与软件设计:根据系统需实现功能的特点和实际拥有的设备条件,进行相 应的软件与硬件模块设计。 (4)系统集成:对系统的软硬件进行集成调试,改正设计过程中出现的错误。 (5)系统测试:对系统进行测试,测试其是否达到设计目标,最终生成产品。 2.2 车载终端平台设计

2.2.1 车载终端平台设计目标 本课题是在 ARM7 核处理器上构建|aC/OS-n 实时操作系统的软件平台,完善操作 系统内核功能。在^iC/os-^系统内核基础上移植^iCFS 文件系统,mCGUI 图形界面系 统,TCP/IP 协议栈,实现完整的操作系统应用平台,并在构建平台的基础上实现上层车 载终端导航功能。车载终端通过 GPS 模块获得当前设备的位置、速度、时间信息,将 车载终端当前位置通过液晶显示器显示在由 GIS 生成的电子地图上。存储设备实现重要 的状态信息存储。车载终端设备通过网络实现与监控中心间信息交互,监控中心可通过 浏览器查询当前终端状态。系统组成结构如图 2.1 所示。 信息监控倍息存储电子地图 GPS 信息 ^^ n

\7 \7 II 网络 图形交互界面 iz iz ik

嵌入式 nc/os-n 操作系统 图 2.1 系统组成结构 Fig. 2.1 Structure of system -4-

大连理工大学硕士学位论文

根据车载终端导航系统的设计需求,系统需实现以下功能: (1)构建完整的嵌入式操作平台。车载嵌入式处理器为车载终端实现的核心,负责 整个系统的功能实现。需要稳定,健全的系统平台满足其上层的多任务管理调度,选择 合适的操作系统,构建完整的操作系统平台。稳定的平台基础是应用层实现车载终端的 前提条件。 (2) GPS 数据信息读取与存储功能。获取当前车载终端 GPS 数据,是系统实现其 他功能任务的基础,系统获得 GPS 接收机传送的数据信息,处理器处理 GPS 模块传送 的数据,提取与系统所需相关的经讳度、时间、速度、日期信息。根据用户需求将这些 信息通过文件系统存储与 Flash 设备当中,作为黑匣子进行数据备份,以便用户对当前 数据与历史数据的查询,并且处理器处理的位置数据需要达到一定的精度,确保设备位 置信息的准确性。 (3)电子地图功能。电子地图作为车载终端系统实现的主要功能,决定了车载终端 的使用意义与价值。Mapinfo 软件导出 GIS 文件中大连市地图路况信息存入相关文件中, 系统通过读取相关数据信息,通过点、线、面的形式将路况数据分层显示在液晶显示器 上构成完整的电子地图,系统结合 GPS 数据实现车载静态定位功能。系统提供地点查 询,电子地图显示,电子地图缩放、移位以及路径导航等功能。 (4)人性化人机交互功能。车载终端为用户提供信息提示服务,简洁规整的提示界 面便于用户操作,节省了驾驶人员读取信息时间。终端提供系统化的操作界面,并结合 简单易懂的文字提示,方便驾驶员进行相关操作。

(5)监控中心功能。在处理器上构建 B/S 模式服务器,每辆车载终端具有独立固定 的 IP 地址。监控中心通过网络打开浏览器,登录相应网址获取当前设备的状态信息, 便于监控中心对车辆进行调度,提供相应帮助与服务功能。 2.2.2 硬件平台 车载终端系统硬件设计主要包括 S3C44B0 处理器,GPS 接收机模块,LCD 触摸屏 人机交互模块,以太网接口模块,Flash 存储器模块等几部分组成。其中 S3C44B0 处理 器是整个系统设计的核心。GPS 接收机模块获取全球定位系统发送的数据信息,以太网 模块负责车载终端与监控中心的数据通信,LCD 触摸屏模块主要功能为接收用户操作输 入,与车载导航系统的电子地图与数据信息的显示。Flash 存储模块负责存储重要的数 据信息。系统的硬件平台框图如图 2.2 所示。 -5 基于嵌入式平台的车载终端设计与应用

网络化也是嵌入式系统发展的必然趋势,将嵌入式系统与互联网相连,依据信息时代的 电子设备联网需求,使得嵌入式设备幵发支持 TCP/IP 协议等软件,提供标准网络接口 [〗3]。目前国外的嵌入式商用操作系统例如 VxWorks 高性能操作系统支持多种开发平台, Windows CE 是由微软推出的嵌入式操作系统,具有与 Windows —致的开发界面,但其 内存占用过大[14]。这些操作已经是成熟,提供方便的开发与调试工具,但是由于其价格 昂贵,致使幵发成本较高,商业化的操作系统受着用户需求以及硬件资源的限制随 着 Linux 操作系统的产生,开源代码的操作系统受到追捧,开源代码操作系统产品得到 广泛推广。iiC/OS-II 是一种高性能的嵌入式操作系统,具有源代码公开,占用资源少,

实时性能高的特点[16]。PC/OS-II 大部分代码由 C 语言编写,内核便于剪裁,可根据用 户不同需求增减相应功能模块,非常适合小型嵌入式系统幵发,具有很大的灵活性。国 内自主的嵌入式操作系统主要有 silver 公司推出的 DeltaOS 操作系统,桑夏 2000 操作系 统以及中科院推出的 Hopen 操作系统等,具有一定的应用价值,但是推广程度不够 117]。 1.3 车载终端系统的发展现状 GPS 是由美国国防部研制的卫星导航定位系统,起初为军方服务用于收集情报,定 位导航,通过太空卫星定位计算,地面接收机接收当前位置信息数据[“8]。自市场化以来 GPS 导航技术得到推广,GPS 能够为全世界用户提供及时,精确的位置,速度以及时间 信息。随着 GPS 成本降低,其应用范围也越来越广,在测量、航海、航空、气象、定 位跟踪、车载导航等领域有着重要的作用。GIS 将计算机技术,数据库技术与测绘技术 相结合[I9]。GIS 通过测绘技术得到与地理相关的位置、大小、形态等数据信息,并将这 些地理信息数据转化为可用点、线、面来描述的数据对象存储与数据库中,并配有相关 的属性信息,GIS 将类型相近的地理数据归为同一图层,电子地图由不同图层的绘制而 成,便于用户查询路况信息。将 GPS 技术与电子地图数据结合的车载导航系统使得 GPS 在汽车行业得到广泛应用[20]。用户根据车载导航系统显示的电子地图确定行驶路径,系 统为用户提供可靠及时的信息服务。 我国汽车销量每年持续增长,世界各大汽车公司将企业发展的战略重心转移到中国 市场,车载导航产品研发迅速[2^。国外的基于 GPS 智能导航产品十分成熟,美国通用 的 On-Star 系统,将无线技术与 GPS 技术相结合,为驾驶员提供安全服务。福特的 Wingcast 系统,日本作为智能交通系统最为发达的国家之一,由丰田公司的 G-Book 系 统,基于 3G 联网为用户提供智能的信息服务都已经成为健全完善的服务平台。国 内汽车信息服务系统起步较晚处于研究阶段,在国内由于一些关键技术较为滞后,例如

GIS, GPS 和无线通信技术,以致我国的车辆导航系统研究与开发较晚 I23]。此外,道路 -2 基于嵌入式平台的车载终端设计与应用

JTAG 调试^=0 触摸屏 Flash LCD 、 ^嵌入式处、^

理器 I 、 S3C44B0 , J SDRAM <^=C>网卡 RS-232 ¢=^ GPS 图 2.2 系统硬件平台框图 Fig. 2.2 Diagram of system hardware platform (1) S3C44B0 处理器 嵌入式处理器是嵌入式系统的核心,S3C44B0 是 ARM7 系列 32 位处理器,提供了 丰富的内置部件其中包括:外部存储器控制器、LCD 控制器、UART 串口、A/D 转换器, 定时器、外部中断、可选的内部 SRAM、PPL 倍频模块使最高工作频率高到 66MHZ 等 功能其功能满足设计需求,可作为核心处理器。

(2) SDRAM 模块 本系统中使用的 SDRAM 模块为 16 位的数据宽度,存储容量为 8M 字节 I29]。当系 统启动时,处理器 CPU 从复位地址运行,为减少 Flash 的读写次数以及提高数据读取 速度,将程序代码加载到 SDRAM 中运行。 (3) Flash 模块 本系统中使用 Hash 模块为 16 位数据宽度,存储容量为 4M 字节,系统设计分配 2M 存储空间作为程序代码段,1M 空间作为重要数据信息存储区,Flash 生产及使用过 程中都有可能产生坏块,这会造成数据无法正常写入存储器内。系统用 1M 的空间作为 坏块的备份空间。 (4)触摸屏模块 S3C44B0 处理器内置 LCD 控制器,可以支持 256 级颜色的彩色 LCD 屏,采用系统 存储器作为触摸屏的显示缓冲区触摸屏尺寸为 320X240,较高的屏幕刷新速率为 用户提供清晰细腻的现实界面。本系统为提供更清晰地图显示功能另采用 800X480 分 辨率液晶显示器作为显示界面。该显示器通过串口实现与处理器通信,屏满足用户对图 面的显示高清晰度的需求。 (5) GPS 接收机模块 -6 大连理工大学硕士学位论文

交通设施不断建设更新使中国幵的车辆导航系统成果并不理想,随着国内相关技术的发 展,车辆导航系统已经成为交通和自动控制领域的热点课题[24]。2011 年我国发射北斗

导航卫星,北斗导航卫星系统已经进入试运行阶段,预计 2020 年通过发送更多卫星后, 定位范围将覆盖全球。同年,我国大唐电信与长春一汽启明公司发展合作关系,研发具 有自主产权的汽车导航服务系统[25]。我国车载信息系统技术的研发需要不断探索与创 新。 1.4 论文的主要内容 论文共分为五个部分。 第 1 章:绪论。分析了车载导航系统对嵌入式系统的性能需求,介绍了嵌入式系统 的应用现状和发展趋势以及车载导航系统的特点和发展,最后介绍本文研究的主要内容 和方法。 第 2 章:嵌入式系统平台总体设计。介绍嵌入式系统设计发开思路,车载导航系统 设计目标,软硬件平台的选择与设计。 第 3 章:操作系统 C/OS-II 内核改进。详细描述了 C/OS-II 操作系统内核存在的 优先级反转问题,并提出内核动态切换的改进方法。 第 4 章:操作系统平台构建。通过移植文件系统,图形界面系统,TCP/IP 协议构成 完整的嵌入式操作系统平台, 第 5 章:车载终端多任务设计。并将平台与外围设备相连,设计车载终端多任务应 用程序,最终实现车载终端系统的上层应用幵发。 最后对本文研究内容和方法进行了总结,并对以后的工作提出展望。 -3 基于嵌入式平台的车载终 i 晶设计与应用

(1) Bootloader 设计 Bootloader 程序通常存放在系统的 Hash 存储器上,系统掉电程序信息不丢失,嵌 入式系统上电后即可从起始地址执行 Bootloader 程序,Bootloader 作为整个系统软件的 设计基础,决定着系统的资源配置,对于系统的稳定高效运行起着重要作用。 (2)嵌入式操作系统 嵌入式操作系统为程序扩展功能提供软件平台,对于决定整个系统的性能起着至关 重要的作用。目前嵌入式操作系统的种类特点各异,^iClinux 开放源代码,具有优秀的 网络功能,标准丰富的 API 接口,但是供实时性操作的实时软件模块在内核空间运行时 会影响系统的可靠性;VxWorks,Windows CE 等商业操作系统具有高效的任务管理功 能,然而由于其价格昂贵,软件的研发和维护成本都很高;^iC/OS-II 源代码公开,内核 小巧,扩展能力强,可根据系统设计需要,增添相应功能模块,灵活性强。选择 hC/OS-II 作为操作系统不但低成本且能根据设计需求扩展相应功能模块满足设计需求[33]。 l^C/OS-II 是一种支持多任务实时调度系统内核,内核主要五个部分核心部分:主要 负责操作系统的初始化,设置时钟节拍,任务调度等;任务处理部分:在^1(3/05-11 中以 任务为单位进行程序调度,对任务进行基本处理操作;时钟部分:时钟节拍是^1(:/05-11 中任务切换的最小时钟单元;通信部分:liC/OS-II 以信号量、邮箱、队列的方式实现任 务间同步与通信;与处理器接口部分:i-iC/OS-II 作为通用性的的操作系统,需要根据具 体处理器寄存器特点编写相应的移植程序。^iC/OS-II 内核具体特点如下[35]: ①公开源代码:源代码可免费获取,内核可以根据设计需要对其进行修改与裁剪; ②可移植性强:代码绝大部分是用 C 语言编写,移植部分用汇编语言编写,便于移 植到处理器上; ③稳定性高:^iC/OS-II 目前已广泛应用于商业应用设计;

④抢占式内核:实时处理优先级最高的就绪任务。 ⑤多任务:用户根据系统需求将程序以任务为单元模块化调度,并根据任务的特性 分配不同的优先级; ⑥系统服务:nC/OS-II 提供多种通信机制,保证任务在互不影响的前提下资源共享; (3)文件系统 由于嵌入式系统设备资源有限,需要外接存储设备。但由于嵌入式系统对数据存储 量大,数据刷新频繁,这使得延长 Flash 存储器的使用寿命,减少对其的擦写次数非常 重要[36]。由于嵌入式设备中数据存储量大,存储类型不同,可移植文件系统,实现对存 储的数据进行管理[37]。分层设计嵌入式软件系统,文件系统作为中间层,设计在内核与 应用程序之间,是软件设计的基础与支撑,对优化嵌入式应用软件性能有重要作用,决 -8 大连理工大学硕士学位论文

JP-13 型 GPS 接收机作为 GPS 接收模块,在 GPS 接收机在通电的情况下接收定位 系统传送的数据信息,数据遵循 NMEA0183 协议[31]。处理器通过串口与接收机连接, 通过解析接收机传送的数据,获取相应的经讳度、速度,时间信息,为设备其他功能提 供数据。 (6)以太网模块 CS8900 网卡作为硬件设备,数据传输速率为 10M。通过配置网卡的 MAC 地址, 工作模式初始化网卡,在网卡上移植 TCP/IP 协议找实现网卡的基础通信[32]。并在处理 器上构建 B/S 模式服务器,构建车载终端网站。监控中心通过登录网站获当前车载终端

状态信息。 2.2.3 软件平台 本课题在硬件模块的基础上以嵌入式操作系统 U C/OS-II 为软件核心,U C/OS-II 操 作系统内核小巧,便于移植,可方便用户系统进行开发。基于操作系统多任务调度优点, 便于系统上层应用程序的模块化调度。在操作系统内核的基础上通过扩展支持图形界面 系统,文件系统,网络系统使操作系统平台更加健全,功能更加丰富。在构建的操作系 统平台上实现上层车载终端应用程序开发,实时为驾驶员提供导航位置信息等。嵌入式 操作系统实现车载模块多任务总体调度。图形系统设计可以提供用户操作串口界面,实 时显示当前位置图形信息以及速度时间等相关信息,便于用户轻松操作。文件系统的设 计可以将所需的重要信息进行备份,便于车辆出现故障时,为发现故障原因提供可靠的 参考数据。网络系统设计,个体车辆将当前数据通过网络反馈到信息中心,便于信息中 心及时掌握当前车辆运行信息,对车辆进行控制调度。相关模块在操作系统内核上的移 植以及上层应用程序的设计至关重要。系统软件平台框图如图 2.3 所示。 上层应用程序 ^ 图形界面系统 件 h络 ^ $ H C/OS-II 内核 会;

Bootloader 启动程序 图 2.3 系统软件平台框图 Fig. 2.3 Diagram of system software platform -7-

大连理工大学硕士学位论文

定着整个系统的可扩展性。缩短嵌入式系统幵发周期,通过文件系统可以很好的实现操 作系统数据管理。在数据交互日益频繁的电子设备中,使得嵌入式系统需要文件系统的 支持,而 uC/OS-II 内核不包含文件系统,开发人员需要根据系统设计建立相应的文件 系统。 文件系统种类繁多,广泛应用的文件系统有 FAT12、FAT16、FAT32、YAFFS, NTFS 等[38]。在嵌入式系统中一般采用 FAT12/16/32 文件系统,使得设备存储数据文件与 PC 机存储文件格式一致,便于进行信息的交互[39]。文件系统实现嵌入式设备对 Flash 存储 器以块为单位操作,并且文件系统申请数据缓存区,减少了系统对的擦写次数, 延长了 Hash 存储设备的使用寿命。FAT16 是微软较早推出的文件系统,数据按照目录 索引以及簇链式结构存储,广泛应用与存储设备中[4^。uC/FS 文件系统是 Micrium 公 司开发的一种针对嵌入式设备的文件系统,与 W C/OS-II 操作系统具有相似的设计风格, 易于 U C/OS-II 操作系统结合实现系统平台构建,U C/FS 文件系统具有如下特点[4〗]: ①支持 FAT12、FAT16、FAT32 多种文件格式,可根据设计需求定义系统文件格式; ②提供多种硬件存储器驱动接口,使系统实现访问不同类型的存储器; ③支持操作系统,^10?5 可以移植到任何操作系统中,支撑系统的多任务调度; ④模块化分层设计,提供标准 API 接口,硬件驱动结构简单仅需编写硬件初始化以 及读写程序即在存储器上建立文件系统; (4)图形界面系统 嵌入式显示界面中带触摸屏的液晶显示技术已成为主流,为使设备提供美观的显示

界面,系统更加注重图形界面的开发由于嵌入式系统内存资源有限,如 windows 这样占用内存较大的显示界面不适宜应用在嵌入式设备中。故设计需要具有占用内存少 功能完善的图形界面系统。 uCGUI 是 Micrium 公司开发的专门面向嵌入式系统开发的图形界面系统,是高效 的用户图形接口,可独立于处理器及 LCD 控制器应用于使用 LCD 图形显示的设备上[43]。 口 CGUI 可在多任务的系统上运行,具有很强的可移植性,并且消耗较少的系统资源, 占用 RAM 和 ROM 的空间都很小,适用于嵌入式系统的多任务管理。CGUI 作为嵌入 式支撑软件,是应用程序设计的基础,决定着整个系统的可扩展性与稳定性通过 y CGUI 图形界面系统可以很好的实现操作系统图形与界面的管理。CGUI 具有如下特 点、[45-46]: ①可移植到 8、16、32 位嵌入式处理器上,提供标准的 API 接口,显示屏大小可配 置,支持比实际显示器更大尺寸的虚拟显示功能; -9基于嵌入式平台的车载终端设计与应用

②支持彩色 LCD 显示与多边形绘制,并且提供有效的位图转换器,便于用户开发直 接将图片转化为相应代码便于应用开发; ③为应用程序提供不同种类的字体,提供字体转换器,并且可以根据用户需求定义 新的字体; ④支持视窗管理与相应的窗口控件,支持触摸屏以及鼠标操作,触摸屏与视窗控件 是 U CGUI 系统输入输出的完整统一,支持触摸屏的功能将 CGUI 系统与触摸屏相结

合,充分体现界面系统的实用价值; (5) TCP/IP 协议栈 开发人员在设计与研制新型电子相关产品时都会留有网络接口,以实现设备间远程 数据的传输和监控 TCP/IP 协议是 Internet 的重要组成部分,系统设计中考虑到嵌入 设备资源限制以及网络结构复杂实现难度较大,TCP/IP 协议栈作为网络系统的一部分, 将其移植入嵌入式处理器中可以实现网络功能【48]。 U C/OS-II 操作系统内核并不支持网络功能,需要移植协议栈构成完整操作平台。 目前嵌入式领域中应用较为广泛的协议找有 C/IP,U IP, LwIP 等。uC/IP 是专门为 U C/OS 设计的协议栈,但是由于其网络应用支持不足,应用具有局限性 LwIP 是 Light Weight IP 协议的缩写。LwIP 幵发源代码,按照分层结构设计,够独立实现 TCP/IP 协 议的套件。LwIP 在较少资源使用量的同时实现 TCP/IP 协议功能,这使得 LwIP 适用于 拥有几 KB 的 RAM 与 40KB 的 ROM 的嵌入式系统中。LwIP 协议栈具有如下特点 ①支持 DHCP 客户端,DNS 客户端,APIPA 自动私有 IP 地址,SNMP 简单网络管理 协议代理; ②专有 API 接口增强系统性能,可选择的 Berkeley 接口 ; ③支持扩展功能:多个网络接的 IP 转发,TCP 拥塞控制、RTT 估计和快速恢复/快 速重新传输; ④支持插件的应用:HTTP 服务器、SNTP 客户端、SMTP 客户端、Ping、NetBIOS 命名服务器; -10大连理工大学硕士学位论文

3 操作系统 y C/OS-II 内核改进 3.1 车载终端多任务调度特点 车载终端嵌入式系统需实现较多应用功能,需通过与 GPS 接收机相连获得当前设 备的经炜度信息与时间速度等状态信息。显示界面实现实时显示当前位置图形信息及速 度时间等相关信息。系统需将所需的重要状态信息进行备份。并且将汽车当前运行信息 传输到信息中心平台,实现终端信息交互信息中心通过浏览器登录终端网址提取相应数 据,便于及时掌握当前车辆运行信息,对车辆进行控制调度。车载嵌入式系统根据各功 能性能要求不同,对各功能进行合理的调度与协调分配。并且系统的经讳度、速度等状 态信息作为系统的共享信息,在不同功能使用共享资源时不能被其他功能篡改数据,这 就要求共享信息在使用的时候被合理保护。车载终端实现任务功能复杂,共享信息刷新 频繁,增加的嵌入式系统的设计难度。 3. 2 内核任务调度存在的问题 车载嵌入式系统运行不但具有高可靠性而且对任务处理的实时性的要求也越来越 高。uC/OS-II 在内核调度中存在优先级反转问题,也是一直以来对嵌入式系统不断改 进和完善设计中的热点问题[51]。车载终端中各任务对与临界资源的共享会发生优先级反 转问题,问题关键在于多任务访问临界资源时,高优先级任务被较低优先级任务阻塞而 延时,甚至造成任务等待资源而死锁现象,以致从整体结构上降低系统运行的稳定性。 目前提出的解决方法在一定程度上解决了优先级反转问题,但存在影响其他高优先级任 务调度与内核修改过于复杂的缺点。本文针对内核任务队列引入一种任务动态切换思 想,解决了其他协议的不足,达到改善优先级多任务调度的执行效率的目的。 3. 2. 1 U C/OS-I I 内核任务调度机制分析

U C/0S-I1 内核中调度具有最高优先级的就绪任务立即执行,而其他任务被挂起。 内核调度过程中通过查找就绪表,调度其中优先级最高的任务。临界资源每次只允许一 个任务访问的资源,C/OS-II 内核通过信号量管理机制实现任务对临界资源的访问, 任务访问临界资源前须先获得保护该临界资源的信号量。任务在等待保护该临界资源的 信号量时,若信号量授权该任务,即可继续访问临界资源,访问完毕后,任务释放信号 量的授权,以便其他任务执行。若信号量没有授权与该任务,内核会将等待该信号量授 权的任务从就绪表中调入等待任务列表中,即该任务被挂起,内核转去调度当前优先级 -11 基于嵌入式平台的车载终端设计与应用

最高的就绪任务。当信号量的授权释放后,挂起的任务则转变为就绪态,相应的也要从 等待任务列表调入就绪表中等待内核调度。内核任务调度过程如图 3.1 所示。 事件控制块链表 任务控制块列表 ~ 専件类型=? I 调度就绪任务 争什 5^:土_ 伴各狀太= ^ 计数器(信号量)=? … I^ t ‘任务状态=等待信号量 I 事件类型=信号量~ (賊)

计数器(信号量)=1$ i :仏‘一. ||计数 yss;)=口 ?議.就绪」 ★ 0 任务状态=... 图 3.1 内核任务调度过程 Fig. 3.1 Secheduling mechanism of kemal 3. 2. 2 u C/OS-1 I 内核优先级的反转问题 优先级反转指一个任务因等待比它优先级低的任务释放临界资源而被阻塞,此时又 有中等优先级的就绪任务,内核则调度中等优先级任务,使高优先级任务阻塞时间延长 甚至死锁现象[52]。liC/OS-II 内核调度中如图 3.2 所示系统运行三个任务(H、M、L), 各任务的优先级依次降低。系统运行后任务 L 就绪执行并占用临界资源,n 时任务 H 就 绪后开始运行。/2 时由于任务 H 访问临界资源而此时临界资源被任务 L 占用,任务 H 挂起,等待任务 L 释放临界资源。时任务 M 就绪并抢占内核,使任务 H 阻塞时间延 长,直至时任务 M 运行结束与,5 时任务 L 释放临界资源后,任务 H 才能占用临界资 源,由挂起态变为就绪态执行。由此可知优先级反转严重影响了系统的实时性。 任』 〖高 , I 务 ; : ;_ — 优 i ; m 口油. 先 * iZ-i 挂起

—…

‘ I : la 占用资源 I i—.?誦?——""""""i 一 T—: : ? t\ h h U h 运行时间 图 3.2 优先级反转现象 Fig. 3.2 Priority inversion -12大连理工大学硕士学位论文

3.2.3 优先级反转问题解决现状的讨论 目前解决优先级反转问题主要有两种常用的方法:优先级上限协议与优先级继承协 议["]。 优先级上限协议为占用临界资源的任务定义了的一个上限优先级[54],优先级上限协 议在应用过程中将占用临界资源任务的优先级替换为上限优先级,使得不需要临界资源 的部分任务无法抢占内核,影响了内核正常调度就绪任务。 优先级继承协议实现了同等优先级任务的轮询调度[55-56],优先级继承协议需修改内 核任务等数据结构,使内核调度支持轮询算法,这违背了实时系统设计内核时不允许出 现同优先级任务的初衷。 针对基于优先级上限方法任务的优先级改变后会影响到其他任务的正常调度,基于

轮询调度方法实现过于复杂影响内核调度效率的情况。在解决优先级反转问题的过程 中,解决方法旨在优先调度占用临界资源的低优先级任务,使其尽快释放临界资源。本 研究目的是在不改变任务优先级并且保证内核调度效率的前提下,引入通过动态切换中 等优先级就绪任务解决优先级反转问题,在高优先级任务申请低优先级任务占用的临界 资源时,通过动态切换任务状态的方法,实现中等优先级就绪任务在就绪表与等待列表 的之间的切换,从而避免优先级反转的发生。 3. 3 多任务动态切换调度方法的提出 3. 3. 1 任务动态切换调度方法的引入 y C/OS-II 内核中如图 3.3 (a)所示设此时有三个任务的优先级分别为 3, 4,5。 任务控制块列表 任务控制块列表 任务优先级=... I I 任务优先级=... 调度就绪任务 任务状态=... 调度就绪任务 任务状态=... 任务优先级=3 广 4I 任务优先级=3 任务状态=就绪 、'餅^

任务状态=等待信号 fi:(挂起 ) I 任务切-----1 任务体先级=4....... 任务妨态=就绪 1 任务:?牵=挂起甲 任务优先级=5 ” 、

1

任务状态=就绪 任务状态=就绪 任务优先级=...

任务优先级=... 任务状态=... 任务状态=... (a)任务动态切换前 (b)任务动态切换后 图 3.3 任务动态切换模型 Fig. 3.3 Dynamic switching model -13基于嵌入式平台的车载终端设计与应用

任务 3 访问任务 5 占用的临界资源,由于任务 3 需获得信号量后执行,因此任务 3 被挂起。此时通过修改内核调度算法,将任务 4 从就绪表中移除(将该任务的状态由就 绪态改为挂起态,将该优先级从就绪表中删除) 。内核继续调度任务 5。直至任务 5 释 放临界资源后,判断此时任务 4 是否可还原为就绪态,若该任务可还原为就绪态,则将 该任务从等待任务列表删除,插入到就绪表中,如图 3.3 (b)所示改进后的内核调度当 前优先级最高的就绪任务 3,阻止优先级反转发生。 3.3.2 任务动态切换优先级调度的实现 由于任务在共享临界资源时须先获得其相应的信号量,通过修改就绪表的方法对操 作系统中信号量相关结构及函数进行修改,解决优先级反转问题,以满足设计要求。 在事件结构体中加入当前占用信号量的事件优先级变量 Cur_Prio,先前占用信号量 的事件优先级变量 Pre 一 Prio,当前事件优先级反转标志 Convert—Flag,以此判断是否有 优先级反转现象发生。并在 OSSemCreateO 函数中对创建的相关变量进行初始化。改进

的事件结构体如下: typedef struct os 一 event {…… INT8U Cur—Prio; //当前占用信号量的事件优先级 INT8U Pre_Prio; //先前占用信号量的事件优先级 INT8U Convert_Flag; //当前事件优先级反转标志 } OS—EVENT; 在等待信号量函数 OSSemPendO 中,首先判断当前信号量是否被其他任务占用,若 没有被任何任务占用,则将信号量的当前优先级变量设置为该等待信号量任务的优先 级。若该信号量已被占用,判断占用其任务的优先级是否高于当前等待该信号量任务的 优先级,若高于此时会发生优先级反转。首先设置当前信号反转标志,并将当前任务优 先级变量 Cur_Prio 赋值给先前任务优先级变量 Pre_Prio,并将当前等待信号量任务优先 级的数值赋给 CurJPrio。判断 Cur_Prio 与 Pre_Prio 任务优先级之间是否存在中等优先级 就绪任务,若存在则将该任务移出就绪表并挂起,这样占用临界资源的低优先级任务可 以尽快执行,髙优先级等待信号量的任务继续等待,不会发生优先级反转,其他更高优 先级任务可以正常执行,不会发生阻塞现象。改进算法如下: if(pevent->Cur—Prio > OSTCBCur->OSTCBPrio) { pevent->Convert_Flag=l ; pevent->Pre_Prio=pevent->Cur_Prio; pevent->Cur_Prio=OSTCBCur->OSTCBPrio; -14-

大连理工大学硕士学位论文

for(查找就绪表) { if(高低优先级之间是否存在就绪任务) { if (存在就绪任务) {将该任务移出就绪表; 将该任务的状态设为挂起态;}}} } 在释放信号量函数 OSSemPostO 中,首先判断当前信号量反转标志,若信号量反转 标志为 1 则查找就绪表,判断 Cur 一 Prio 与 Pre—Prio 任务优先级之间是否存在中等优先级 挂起任务,若存在并且该任务可还原为就绪态,则将该任务状态改为就绪态,并将该任 务添加到就绪表中等待调度,若不存在则继续查找直至 Cur 一 Prio 与 Pre_Prio 任务优先级 之间没有中等优先级挂起任务,最后将信号量优先级反转标志清零。内核正常调度,改 进算法如下: i f(pevent->Convert_F lag ! =0) {for(查找就绪表) {if(高低优先级之间是否存在处于挂起态的任务) if(((ptcb->OSTCBStat &=?OS—STAT 一 SUSPEND) -= OS—STAT—RDY)&& (ptcb->OSTCBDly == 0)) {将该任务插入就绪表;}} pevent->Pre_Prio=0;

pevent->Cur_Prio=0; pevent->Convert_Flag=0; } 3.4 改进后内核的移植 S3C44B0 处理器支持中断、多线程程序操作,内部有足够寄存器作为硬件堆栈,编 译器能产生可重入代码,适合^iC/OS-II 操作系统的移植。要将 t^C/OS-II 移植到 S3C44B0 处理器上,需要编写底层移植文件 OS 一 CPU.H、OS_CPUj:.C、OS_CPU_A.Sc (1)宏定义头文件 OS_CPU.H 该文件主要根据 y C/OS-II 提供的 API 标准接口对数据类型重新定义,并定义与 ARM 体系结构相关的堆栈类型,其中包括:堆栈增长方向、任务堆栈个数等。在该文 件中进行了开中断、关中断的宏定义,为保证任务间资源共享且互不影响执行。 (2)汇编语言文件 OS—CPU—A.S 由于该文件中的函数直接对处理器进行操作,所以该文件内的程序需用汇编语言编 -15基于嵌入式平台的车载终端设计与应用

写,其中包括任务调度、任务切换、幵关中断等函数。 (3) C 语言文件 OS_CPU_C.C 在该文件中对用户任务堆栈进行初始以及系统相关硬件初始化、设定定时器作为时 钟节拍等函数。 完成以上三个文件的编写基本实现了 li C/OS-II 操作系统的移植。

-16 基于嵌入式平台的车载终端设计与应用

BPB

每族扇区数 隐藏扇区数 根目录项数 I 每 FAT 占用扇区数 I FAT rw] ["mn i i i i i i CUD [ZZ: dZD CZD EZD Ciz:] CZI] [ZZ] 口录项 数据簇 I 文件名(name) j I 扩展名 I 符族巧-(02H) 图 4.2 FAT16 文件系统结构 Fig. 4.2 FAT 16 file system structure

保留区位于第一个扇区,其中定义了每簇扇区数、隐藏扇区数、根目录项数、总共 扇区数等用于记录 FAT 表结构参数的重要信息。FAT 文件中数据信息的读取以族为单 位,Flash 的读写以扇区为单位,通过定义每簇扇区数将文件系统与硬件设备的读写单 元联系起来。定义的根目录项数确定了文件系统支持的最大根目录数。FAT 区占用扇区 数决定了文件系统在单独文件的情况下的文件容量。 FAT 区包含有两张 FAT 表,其中一张 FAT 表作为系统的备份表。FAT1 表被修改 后,FAT2 也会同步更新。在 FAT16 文件系统中,文件数据的存储以族为单位,FAT 表 是一一对应于数据区族号的列表,FAT 表中每单元记录的是文件所在的簇号,FAT 表从 02 簇号为起始,每个单元中内容为该文件数据所在的下一个簇号,这样构成簇链式的存 储结构,当单元中记录数据为 FF 时,表明该文件结束。FAT 表通过簇号确定文件的位 置。 根目录区中目录项每项 32 个字节,根目录区记录了文件名、扩展名、属性、文件 长度、首族号等信息。系统通过文件名以及首族号来索引文件在 Flash 中的存储位置。 数据区设在根目录区后,以簇为单位,用于存储文件的数据信息。 -18大连理工大学硕士学位论文

FAT 文件系统查找文件的过程为:首先根据文件名在根目录区中找到相应的目录 项,然后根据目录项记录的首簇号在 FAT 表区找到首簇号的位置,该位置所对应的内 容为该文件的下一族的簇号,通过 FAT 表的链式存储结构,直至找到最后一个簇号。 最后通过 FAT 表中的簇号在数据区找到其对应的位置后读取数据,实现了文件系统的

数据查找。以上图为例:应用程序需读取文件名为 name 的文件,首先从跟目录区查找 相关文件名,找到文件名为 name 目录项后,查找该文件的首簇号,该文件的首簇号是 02H,这样在 FAT 表中簇号为 02 的地址内存放的数据内容,内容为 03H 表明,簇号 03 的地址内也存放该文件数据,这样通过链式的查找,知道族号地址内容为 FFH 为止, 表明该文件结束。通过 FAT 表查找得知 name 的文件数据存放在簇号为 02H、03H、04H 三个簇内,最后通过读取数据区内相应簇地址内的数据信息。 4.2.2 文件系统移植 y C/FS 文件系统可实现 FAT12/FAT16 格式文件,u C/FS 文件系统的分层关系模式 分为应用接口层、文件管理层、逻辑块层、介质驱动层,文件系统层次分明,函数调用 关系清晰,u C/FS 文件系统的结构如图 4.3 所示。 应用程序 ;-- 4^----^^ 嵌 I 应用接口层 丨& 、丨 丨嵌 SI I 入 ^ i 文件管理层 丨 I 件一 zzzzmzzz: I 件 J ! 逻辑块层 内i I ‘‘ 核丨 iJ

介质驱动层 丨

——丄--:子—__ 硬件设备 图 4.3 y C/FS 文件系统体系结构图

Fig. 4.3 Structure diagram of y C/FS file system 移植文件系统前首先掌握目前存储器的相关信息,根据存储器的相关信息确定文件 系统的存储容量、每簇大小、本系统釆用 4M 容量的 Flash 存储器,每扇区 512 字节, 设定每族扇区数为 1,即每族大小为 512 字节。由于 4M 的存储空间需要分配 2M 空间 用作程序代码存储,剩余的 2M 空间中用 1M 空间可作为文件系统。文件系统在 Flash 中所占的空间为 1M-2M 之间的存储区,文件系统在 Flash 的起始地址为 0x100000。本 -19大连理工大学硕士学位论文

4 车载操作系统平台构建 uC/OS-II 只为操作系统内核,并不能作为整个系统实现复杂的应用功能需求,所 以需要移植文件系统、图形界面系统、网络系统构成完整的嵌入式系统操作平台。 4. 1 BootLoader 设计 在欺入式系统中,系统上电后程序从起始地址运彳了。系统会将 Bootloader 程序放在 该地址中,由 Bootloader 完成整个系统的加载任务。因此 Bootloader 决定系统硬件资源 的分配,中断向量设置,内存空间的分配以及应用程序的执行,本系统的 BootLoader 设计流程如图 4.1 所示。 C^“)

、丄乂 中断系统频率设置

设置中断向量表 ^

I ——

堆找初始化

关-麵二超觀 I 将 Flasl4 的程序 i 拷入 R^M 中 设置看门狗’非缓冲 ^

^ 将全局变量初始化 进行硬“口设一 ,B」 。ader、 、结束 j 图 4.1 Bootloader 设计流程图 Fig. 4.1 Design flow of BootJoader 4. 2 文件系统的实现 本系统中选择 FAT16 文件格式存储数据信息,将 y C/FS 文件系统移植入 Flash 存 储器上作为系统的文件系统。 4.2.1 FAT16 文件系统架构 FAT 16 是用来记录文件在 Flash 的存储位置的表格,FAT16 是以 16 位的寻址方式 査找定位的族链式结构,FAT16 最大的寻址范围为 2GB,本系统中 Flash 的容量为 4MB, 满足系统设计需求。FAT16 文件系统由保留区、FAT 区、根目录区、数据区组成,FAT16 结构如图 4.2 所示。

-17基于嵌入式平台的车载终端设计与应用

系统 Flash 存储器为 16 位寻址方式,需将文件系统的 8 位寻址方式经过转换成 16 位后 进行相应读写操作。Flash 每块的容量为 8KB,以块为单位进行对 Flash 进行一次性读写 可以减少 Flash 的擦写次数,延长 Hash 的使用寿命。故根据设计需求在对 Flash 进行格 式化时确定了文件系统的引导扇区的相关信如表 4.1 所示。 表 4.1 保留区相关参数设定 Tab. 4.1 BPB parameters setting 保留区相关参数 个数 —

每簇扇区数 0x01 隐藏扇区数 0x0001 根目录项数 0x0040 总扇区数 0x1000 每 FAT 占用扇区数 0x0002

编写相关 Flash 读写驱动函数,通过文件系统中层次之间的调用完成文件系统在 Flash 存储器上的移植。应用程序通过调用文件系统上层函数来读取数据信息,上层函 数通过各层之间的函数调用关系将调用底层读写 Flash 函数对存储器进行操作。由于 Flash 存储器是以块为单位进行数据擦除的,为减少 Flash 的擦写次数,申请与 Flash 块 容量大小相同的缓冲区,当数据信息写满一块后,一并写入 Flash 中,延长的储存器的 使用寿命。 Flash 驱动层文件 flash—drv.c:该文件的主要功能实现了 Hash 底层驱动与上层文件 的链接,通过定义存储设备类型结构体 FS—flashdevice—driver,来实现上层函数对底层 的访问。结构体定义描述如下: const FS—device 一 type FS—flashdevice—driver = { "FLA^H device", — //设备、区动名称 —FS—FLASH—DevStatus, //FS 检测设备状态 _FS_FLASH_DevRead, //FS 设备读驱动 _FS_FLASH_DevWrite, //FS 设备写驱动 FSFLASHDevIoCtl //FS 设备控制 }; 该结构+_FS_FLASH_DevReadO 为从存储器中读取数据函数,该函数通过调用 flash—x—hx.c 文件中的 FS—FLASH—ReadSectorO 函数实现文件系统对于底层 Flash 的驱 动 flash—Read—sectorO 函数的调用,读取 Flash 相应页中的数据。 _FS_FLASH_DevIoCt 丨 0 为功能控制函数,其中的 FS—CMD—FLUSH—CACHE 命令 为文件系统缓冲区操作命令,该命令先不将每页数据写入 Flash 中,而是将数据存储到

-20大连理工大学硕士学位论文

缓冲区中,在关闭文件时,对缓冲区数据进行处理,调用 flash_x—hx.c 文件中的 write 一 cached 一 data()函数, 实现文件系统对于底层 Flash 的驱动函数调用, 最终完成 Flash 相应块的锁定,擦除以及写入数据的功能。文件系统函数层次调用关系如图 4.4 所示。 flash_drv.c flash_x_hx.c nflash.c PC FT ACT4 rv T^rti I I I I unlock—one 一 blockO (FS'CMD FLUSH CACHE) write—cached_data() =^> erase jlock—arndg 、— - '一 flash Write. sectorQ

—FS_FLASH_DevReadO 〉FS—FLASH_WriteS ectorQ 〉 flash_Read_sector() 图 4.4 文件系统函数调用关系图 Fig. 4.4 Call graph of file system fiinction 4. 2. 3 文件系统坏块查找 完成文件系统移植后,为完善文件系统使用性能,保证数据存的可靠性,但 Hash 可能产生坏块。这会造成块擦除时出现错误无法得到正确结果。在存储数据时,Flash 存储器的读写操作频率非常高,可能使 Flash—部分数据块由于被频繁擦写而损坏。系 统需要对坏块进行处理,保证数据读写的可靠性。为此在 Hash 存储器中将 2M 以后的 部分空间作为坏块备份空间,通过对 Flash 中作为文件系统的部分进行块遍历进行擦写

并读取擦写数据,若回读的数据不为 FFH,说明存储器出现坏块,并记录该块地址,用 备份区中的地址代替,直至:Flash 文件系统存储地址空间遍历为止。在上层应用程序与 对坏块之地操作时,将数据写入备份地址中,完成坏块的替换,保证文件系统正常操作, 坏块查找结构体以及坏块查找代码如下所示: typedef struct { FS_ul6 Num_Badblock; //坏块个数 FS_u32 Addr_Badblock[256]; //坏块地址 FSja32 Addr_Reserveblock[256]; //备份区地址 }FS—Badblock—Index; /*FS—Check—BadblockO 函数功能为查找坏块地址并用备份地址替代*/ void FS 一 Check—Badblodc(FSJBadblock—Index Find—Badblock) { for(count_block=0;count_block<256;count_block++) //IM 空间内进行块遍历 { 将每块进行数据擦除写入 OxFF; for(count_page=0;count_page<16;count_page++) //块空间内进行页遍历 {读取每页数据; if(OxFF!-buffer[i]) //判断页内容是否为 OxFF -21 基于嵌入式平台的车载终端设计与应用

{保存坏块地址;

坏块个数加 1; 用备份区地址替代坏块; } 4.3 图形界面系统的实现 图形界面系统作为嵌入式系统的输出设备,直观反映了当前系统运行状态与系统的 性能,而触摸屏即可作为输出设备又可作为输入设备节约嵌入式设备占用空间,C/GUI 图形界面系统将触摸屏的输入功能与输入功能结合为同一的整体,并提供系统化的显示 界面。 4. 3. 1 U C/GUI 图形系统架构 tiC/GUI 是针对嵌入式系统的图形软件,采用模块化分层结构设计,代码由 C 语言 编写,可以移植到任意处理器上。功能模块主要包括 LCD 驱动模块,GUI 内核模块, 视窗管理器模块,窗口控件模块,和触摸屏及字体和位图等模块,liC/GUI 设计架构如 图 4.5 所示。iiC/GUI 系统支持多任务与多窗口机制,提供了丰富的图形字体库与窗口 控件类,并支持鼠标、触摸屏等功能。 应用层 I 字体与位图 J

触摸屏 窗口控件 视窗管理器

内存设备 GUI 内核 抗锯齿 LCD 驱动 图 4.5 P C/GU1 系统架构 Fig. 4.5 System framework of P C/GUI LCD 驱动模块包含很多类型 LCD 显示器的驱动程序与接口函数。便于用户根据系 统 LCD 型号选择合适的或者相近的驱动程序完成显示器的移植。 -22大连理工大学硕士学位论文

抗锯齿模块用于优化处理显示图形的边缘锯齿效果,在图形显示过程中,图形的转 动可能会造成图像边缘出现锯齿现象,抗银齿模块通过将前景色与背景色相融合,使图 形边缘平滑,减少的图形的失真现象。 GUI 内核模块是图形界面系统的核心部分,其中包含 GUI 对点、线、区域的绘制 的绘图函数;GUI 显示字体,文本,数字,字符串旳相关函数;GUI 支持鼠标,触摸屏 等功能函数;这些功能函数实现图形界面系统的最基本的显示个功能,使 GUI 构成一个 完整的显示系统。 内存设备模块主要功能为防止在绘制重叠图像时出现的闪烁现象,若显示系统不支 持存储设备,在绘制重叠图像时,重叠的绘制会导致显示屏出现闪烁现象。支持存储设 备后相关操作会在存储区内进行,操作完毕后再将数据传送到显示屏上,避免了闪烁现 象的发生,为系统提供更好的显示效果。

视窗管理器模块实现了系统的窗口显示功能,并且提供一整套函数支持对窗进行创 建、移动等操作。并且管理器可同时显示多个窗口为用户可视化管理带来便捷。 窗口控件模块为系统提供了丰富的控件支持,控件支持的函数与视窗管理器相结 合,通过窗口回调机制实现系统的功能切换,为用户个性化显示设计提供充分的条件。 触摸屏模块实现功能类似与 windows 下的鼠标功能,通过触摸屏模块显示系统读取 用户输入的坐标信息,并将信息封装成鼠标信息显示在显示器上,并将所在位置信息与 其相应的空间想结合完成用户设备的控制。 字体与位图模块中系统提供位图转化器可在 PC 下将图形转化为 GUI 可识别相关的 数据结构,缩短开发人员的开发周期。并通过模块相应函数实现对图像信息的显示。 4.3.2 tiC/GUI 系统移植 将 yC/GUI 显示系统应用于嵌入式设备中,移植主要针对 LCD 底层驱动与 U C/OS-II 操作系统两方面。 (1) LCD 底层驱动设计 处理器通过对内部 LCD 控制器进行配置,将 LCD 设置为 256 色彩色模式,8 位单 扫描方式。LCD 屏水平尺寸为 320,垂直尺寸 240,以及设定扫描频率,设置抖动模式 寄存器,使显示为最佳效果。申请 LCD 显示缓存区 Buffer 大小为 320X240。当 LCD 需显示数据时,控制器需将显示内容存储到缓冲区内,之后以帧的形式显示在显示器上, 将处理器 LCD 初始化程序作为 y C/GU1 系统 LCD 控制器初始化程序,缓冲区同样作为 tiC/GUI 缓存。 (2) iiC/GUI 相关参数配置 根据 LCD 显示器的特性,对 yC/GUI 进行相关配置,其中包括 liC/GUI 屏幕显示 -23-

基于嵌入式平台的车载终端设计与应用

尺寸,每点像素使用位数,LCD 控制器选择,RGB 颜色设定以及对 GUI 各模块支持使 能等设定定义如表 4.2 所示。U C/GUI 的 LCD 控制选择为与 S3C44B0 控制器相似的 1375 型的 LCD 控制器,这样可以简化系统移植步骤,只需 S3C44B0LCD 控制器显示缓存区 的地址赋给 1375 控制器读写存储空间的地址,即可完成缓存区分配问题。配置中将 S3C44B0LCD 控制器的初始化程序设定为 C/GUI 1375LCD 初始化程序,通过以上步骤 即可完成 LCD 底层驱动的结合问题,使 P C/GUI 可控制 S3C44B0LCD 显示器的相应操 作功能。 表 4.2 y C/GUI LCD 参数配置 Tab. 4.2 Parameter configuration of LCD in w C/GUI ti C/GUI 参数配置 设定值 LCD—XSIZE //水平尺寸 ^ LCD_YSIZE //垂直尺寸 240 LCD_BITSPERPIXEL //每点像素位数 8 LCD_CONTROLLER //控制器选择 1375 LCD_FIXEDPALETTE //RGB 设定 323

LCD_BUSWIDTH //总线宽度 8 LCD_IMT_CONTROLLER() LcdJnitQ //初始化程序

U C/GUI 设定为支持操作系统,如表 4.3 所示设定显示系统可最大支持任务数为 4, 自行设计的字体为系统的默认字体,uC/GUI 分配 12500 大小控件作为窗口的内存,使 uC/GUI 支持虚拟窗口显示功能。通过各模块配置,使得 U C/GUI 满足嵌入式系统设计 需求。 表 4.3 U C/GUI 模块相关配置 Tab. 4.3 Module configuration of u C/GUI — P C/GUI 参数配置 设定值 GUI—OS ‘ //操作系统支持 i GU1_SUPP0RT_T0UCH //触摸屏支持 1 GUI_MAXTASK //最大任务数 4 GUI—DEFAULT—FONT //支持字体 &GUI_FontHZ12 GUI—ALLOC—SIZE // 内存分配 12 5 00 GUI_WINSUPPORT //窗口支持 1

GUI_SUPPORT_MEMDEV //存储器支持 1 GUI_SUPP ORT_AA //抗银齿支持 1

(3) uC/OS-II 接口相关配置 uC/GU 丨支持多任务调度,为保证上下文切换时保护共享资源,GUI 通过上锁 -24基于嵌入式平台的车载终端设计与应用

触摸屏 Y+i

i JIr‘II X_AD i Y 电极 i Hx-! X X1 ■>、一"I~ 电 电一 I i 丨极 极丨 J 丨 Y 电极 i

Y AD i I i 1 I~I I 丨 III x+ "‘ 图 4.8 触摸屏连接框图 Fig. 4.8 Connection diagram of touch screen (1)触摸屏电压信息采集 电阻式触摸屏为显示器上的两层导电薄膜,两层薄膜隔离层中有许多隔离点。在电 阻式触摸屏中,电极两端分别接高低电平,当某一层薄膜上电时会在两极之间产生电压 梯度,当触摸屏被按压时,两层导电薄膜接触,在未上电的另一层薄膜上可测得触点的 电压值。如图 4.8 所示,当 Y 电极上电时,按下触摸屏,两层薄膜接触,由于 X 极未上 电,在 X 极层电压信号经过 AD 转换获得的数字信息为与 Y 轴坐标位置相关的数据信 息。X 极同理。触摸屏通过两层电极分别上电获得 X, Y 坐标相关信息。系统将处理器 外部中断与 X 电极相连,并设定外部中断为下降沿触发模式,当触摸屏被按压后,外部 中断接收信号产生中断。系统处理通过两个 A/D 转换端口传送的数据信息进行处理。 (2)触摸屏坐标信息校准 触摸屏产生电压信号后,两极电压值分别经 16 次 A/D 转换取平均值后转变成数字信 号。为使数字信息与触摸屏坐标值相匹配,需进行校准工作,本系统采用两点校准法进 行线性校准。将触摸屏左上角坐标(10, 10),右下角坐标(310, 230)的 X 轴、Y 轴 电压数值信息。取平均值获得触摸屏 X, Y 两极最大最小电压信息的数字量。由于电压 降成线性关系,固当触摸屏按下某一点时,获取的电压信息与两端坐标的电压信息成比

例关系,即可获得当前触点的坐标值。 (3)触摸屏坐标信息封装 当处理器采集到触摸屏触点坐标信息后,将触摸屏的坐标信息封装成为鼠标信息, 即将触摸屏的触点坐标值赋值给建立的鼠标控件中,并将鼠标状态设为被按下状态。这 样在显示器上便及时显示出鼠标来表示当前按压的触点位置,完成了触摸屏坐标信息封 装。为使鼠标信息及时获取到触摸屏触点位置的更新信息,鼠标信息要及时释放掉前一 次得到的触摸屏信息并将状态该为空闲,以便获取下一次触摸屏信息。 -26大连理工大学硕士学位论文

4.4 LwIP 协议钱的移植与实现 将嵌入式设备联网实现设备间通讯,为用户使用设备带来极大的便捷。但由于网络 功能复杂,嵌入式设备资源有限,为部分实现网络通讯功能,本系统将 TCP/IP 协议栈 移植入嵌入式系统中作为网络模块。 4.4. 1 Lw IP 协议钱架构 LwIP 是专门为嵌入式系统开发的 TCP/IP 协议钱,占用资源少,便于移植到操作系 统当中。LwlP 按照分层结构思想设计,与其他网络协议相同 LwIP 分为网络接口层、网 络层、传输层与应用层。针对嵌入式系统,LwIP 提供相关模块支持包括内存管理模块 与操作系统模拟模块等,LwIP 系统架构如图 4.9 所示。 TCP/IP 应用程序 操 LwIP AP 丨接口 I

缓 作 冲 系 与 统 UDP 协议 TCP 协议 内 模 存 拟 管 层 IP 协议 1CMP 协议 ARP 协议 网络接口 I 理

图 4.9 LwIP 体系结构 Fig. 4.9 Structrue of LwIP 应用层提供一些网络软件服务,使用户通过应用层访问网络系统,包括 Http,Ftp, Telnet 等协议软件。 传输层为用户提供端到端服务,包含 UDP 模块与 TCP 模块,通过端口实现应用程 序之间的数据通讯。 网络层实现数据分组转发到目标地址,其中包含 IP 模块,ICMP 模块,ARP 模块。 ARP 模块完成目的 IP 地址与 MAC 地址之间的映射,IP 模块完成 IP 数据包的接收,发 送,转发等功能。 网络接口层为以太网卡驱动程序编写提供函数接口,便于 LwIP 移植到网卡上,使 数据在硬件设备上传送。

LwIP 的操作系统模拟层提供进程间通信接口函数,修改接口函数即可完成相应操 作系统移植。 -27 基于嵌入式平台的车载终端设计与应用

内存管理模块提供内存与缓冲空间为设备使用。 本系统中主要通过 TCP/IP 协议完成网络间通讯,系统发送数据时 LwIP 将数据分段, 逐层封装后发送到网卡设备;接收数据时 LwIP 将数据重组,逐层拆包后为应用层使用。 LwIP 的 TCP/IP 通讯进程如图 4.10 所示。 应用程序 ? 二:......‘ tcp_write() / tcp_receive() 传输层 士 / 、= tcp_enqueue() / tcp_process() -I / 厂 tcp_output tcp_input() ip_route() ip_output_if() Ip_input() ----一?------- :―丄—_____‘二 netif_output() netif—input。 | 网络接口层 图 4.10 TCP 通讯进程图 网络戸

Fig. 4.10 Communication process diagram of TCP 4.4.2 LwIP 协议栈移植 将 LwIP 协议栈移植入嵌入式系统当中,移植主要针对 C/OS-II 操作系统与网卡驱 动两方面。 (1)与 U C/OS-II 操作系统接口 LwIP 的操作系统模拟层提供进程间通信接口函数。将 LwIP 移植入 U C/OS-II 操作 系统中,以信号量机制为例,在 LwIP 中通过信号量的等待与释放保证任务同步,其函 数调用关系如图 4.11 所示。 LwIP U C/OS-II sys_sem_new(count) sys—sem—signal(pSem) OSSemPost(pSem) sys_arch_sem_wait(pSem) 〉 OSSemPend (pSem) 图 4.11 LwIP 信号量函数调用关系 Fig. 4.11 Signal function call of LwIP -28 大连理工大学硕士学位论文 〉pSem = OSSemCreate(count)

GUI_X_LockO 与解锁 GUI_X—UnlockO 函数来实现共享资源的保护。该功能与 C/OS-II 中信号量的调用机制一致,如图 4.6 所示 GUI 上锁与解锁函数是通过调用 U C/OS-II 信 号量相关函数实现其功能。

U C/GUI W C/OS-II GUI_X_GetTaskld() =j)[ (OSTCBCur->OSTCBPrio) GUI_X_lnitOS() 二=0 DispSem=OSSemCreate(l)

GUI_X_Unlock() OSSemPost(DispSem) GUI_X_Lock() OSSemPend(DispSem) 图 4.6 u C/GUI 系统相关函数 Fig. 4.6 System function of P C/GUI 在 GUI 系统中对于窗口相应,以及其他窗口的任务调度需要延时等其他时间相关操 作,GUI 时间管理功能是通过调用 C/OS-II 相应的时间调用函数实现的,如图 4.7 所示。 U C/GUI 口 C/OS-II GUI_X_GetTime() ==^ GUI_X_Delay(Period) OSTimeDly(Period) GUI_X—ExecIdleO =[> OSTimeDly(l) 图 4.7 U C/GUI 时间相关函数 Fig. 4.7 Time function of y C/GUI 通过对处理器 LCD 配置,GUI 系统模块配置以及与 y C/OS-II 接口设定,系统即可 完成 y C/GUI 的移植,C/GUI 可实现基本的显示功能。 4.3.3 触摸屏实现 U C/GUI 对触摸屏模块的支持,可实现触摸屏设备的应用。本系统采用的是电阻式 OSTimeGetQ

触摸屏,将触摸屏与处理器外部中断相连,并且将触摸屏产生的电压信号在处理器进行 A/D 转换,将模拟信号转换成电压信号,实现对输入信号的信息采集,触摸屏连接结构 框图如图 4.8 所示。 -25 * 大连理工大学硕士学位论文

LwIP 中邮箱机制调用关系与信号量机制类似,但是在 LwIP 中邮箱信息以队列的形 式存储,uC/OS-II 通过内存管理模块分配一定空间给邮箱队列,并通过创建,占用, 释放等操作完成空间的动态分配,保证了邮箱消息的缓冲与数据传递。LwIP 通过获得 和发送邮箱信息,完成任务间的消息传递。 LwIP 为每个网络线程都提供一个等待超时计时器,作为当前线程超时等待时间标 准,根据系统需求会带有相关的超时回调处理函数,线程超时后会调用该函数执行设定 操作。若该线程的等待时间为空,则说明该线程对链接永远等待。 (2) LwIP 网卡移植 本系统采用的是 CS8900 网卡,将网卡接收中断端口与嵌入式处理器的外部中断相 连接,有数据接收时引发中断进入处理程序。CS8900 为 16 位寻址方式,将 LwIP 协议 移植在网卡上需对网卡进行初始化,与收发数据等程序的编写。 网卡初始话函数主要负责芯片重启确保芯片正常工作,并对网卡的物理地址,接收 巾贞格式以及工作模式等相关参数进行设置。并且开启中断,数据收发功能。网卡初始化 流程如图 4.12 所示。 (附,跳)

设置中断端口 —^— 设置接收中断

重启芯片 ^

i 幵启发送 设置网卡 接收功能 物理地址 ★—

T iq 使能中断 设置接收帧格式 -T-

7 ] ■① 设置全 T 工模式 I ( M 图 4.12 网卡初始化流程图 Fig. 4.12 Initialization flow of network card 在网卡初始化后,编写网卡收发数据相关函数,接收函数中首先从寄存器中获取接 收数据长度,之后开始读取数据将读取的数据放入缓存中以备上层应用程序调用。在数 -29大连理工大学硕士学位论文

5 车载终端任务设计 5. 1 车载终端多任务流程 随着车辆日益普及,城市建设导致道路交错复杂,驾驶员对 GPS 车载导航系统更 为依赖,电子地图作为车载导航设备的主要功能,为驾驶员提供正确的道路信息,方便 快捷的指示用户到达目的地点。本系统以嵌入式平台为基础,实现车载终端导航应用, 提供电子信息服务。 本系统中车载终端作为车载结点设备,通过与 GPS 接收机相连获得当前设备的经 玮度信息与时间速度等状态信息。图形界面系统实现实时显示当前位置图形信息及速度 时间等相关信息。文件系统设计将所需的重要数据如速度,时间,位置等信息进行备份。 网络系统是通过建立的 B/S 模式服务器,通过网络连接,将汽车当前运行信息传输到信 息中心平台,实现终端信息交互信息中心通过浏览器登录终端网址提取相应数据,便于 及时掌握当前车辆运行信息,对车辆进行控制调度。车载终端应用如图 5.1 所示。 ^, 域 图 5.1 车载终端应用 Fig. 5.1 Application of vehicle terminal 5.2 车载终端多任务调度 依据车载设备功能需要,在操作系统内核的基础上通过扩展支持图形界面系统,文 件系统,网络系统使操作系统平台更加健全,功能更加丰富。在构建的操作系统平台上 实现上层车载终端应用程序幵发,实时为驾驶员提供导航位置信息等。UC/0S-I1 内核

-31 大连理工大学硕士学位论文

处于显示状态,该任务的优先级在系统中最低,保证在显示任务仍提供画面显示的前提 下,便于其他任务