嵌入式系统程序设计实例

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

嵌入式系统程序设计嵌入式系统程序设计实例本章旨在使用英倍特EmbestEdukit-Ⅲ型教学实验平台和嵌入式Linux操作系统完成自动电梯模拟控制系统的设计和实现嵌入式系统程序设计实例背景介绍系统架构详细设计系统函数说明系统演示一、背景介绍系统目标机硬件采用EmbestEduKit-III型开发板,S3C2410X处理器,目标机系统软件采用miziLinux操作系统。方便起见,宿主机软件使用Cygwin模拟Linux系统,交叉编译工具链采用arm-linux-gcc,版本号为2.95.3。EmbestEduKit-III型开发板有分辨率为320×240的LCD显示器,以及4行5列小键盘,键盘布局如下图所示:背景介绍(续)FUN*-+FEDCBA0876543210背景介绍(续)本程序模拟8层楼间(地下1层,地上7层)单部电梯运送乘客的整个工作过程。利用实验设备的键盘模拟电梯内部和外部的按键,利用LCD显示器绘制电梯运行过程以及状态和提示信息背景介绍(续)系统功能:每层电梯入口处设有上行、下行请求按钮,电梯内设有乘客请求停战的楼层呼叫按钮有电梯所处位置指示设置,电梯上行、下行状态指示装置,所有系统请求信息指示装置每隔一段时间,电梯上升或是下降一层楼,同时显示电梯上升和下降的信息电梯到达有停站的楼层后,该楼层有指示装置表明到达了停站请求楼层,电梯切换为开门状态系统能够记忆电梯内、外部的所有请求信号,并按照电梯运行规则依次相应这些请求,每个请求信号保留至执行后撤除背景介绍(续)为了实现电梯运行的正确逻辑,制定以下规则:电梯接通电源时,电梯必须停留在最底层电梯可以到达所在楼宇的每一层,但是电梯只能在该楼宇的最低层至最高层之间运行严格规定电梯内部的信号优先级高于电梯外部的请求信号电梯处于上升模式时,只响应比电梯所在位置高的楼层的上楼请求信号,而保留下楼信号,由下而上逐个执行;直到最后一个执行完毕,再执行下楼请求信号电梯处于下降模式时与上升模式相反电梯执行完所有请求后,应保留在所在的楼层保持不动,等待新的请求二、系统架构系统总体结构初始化模块电梯控制模块按键输入模块LCD显示模块系统架构(续)系统总体结构图系统架构(续)初始化模块基础模块,负责初始化电梯算法的数据结构,同时初始化显示界面,给用户提示信息和操作说明:系统架构(续)电梯控制模块关键模块,负责电梯当前状态,根据电梯状态派遣电梯执行停止、运行、开门、关门等任务;流程图系统架构(续)按键输入模块4X5小键盘作为输入端,乘客通过按键模拟的电梯按钮向系统输入请求信息。系统使用0-7这8个按键模拟八个楼层按钮,+和-这2个按键模拟电梯外部的上、下行请求按钮,A和B按键用于指示发出的请求来自于电梯内部还是外部,E代表输入确认键,*键代表程序结束。按键定义如下表所示:系统架构(续)系统架构(续)电梯内部0-7八个按键,模拟8个楼层,不设置开门和关门按钮;电梯外部除地下一层和顶层之外,每层都有一个上行按钮和一个下行按钮;特殊使用规则系统用按键A和B判断乘客发出的请求是来自电梯内部还是电梯外部。系统架构(续)使用步骤:输入A或是B;输入0-7:如果输入A,0-7表示内部乘客请求到达的楼层;如果输入B,表示外部乘客发出请求时位于的楼层;第2步中如输入B,需要接着输入+或-,表示外部乘客的上下行方向情况,第2步输入0时不能输入-,输入7时不能输入+;输入E确认。系统架构(续)LCD显示模块本模块通过LCD显示电梯目前的运行信息电梯状态当前位置电梯内部和外部请求信息电梯运行的动态效果乘客请求的英文缩写解释系统架构(续)系统运行界面系统架构(续)程序主界面按照显示功能被划分为四大区域,从左到右依次为:电梯信息显示区域,这个区域位于显示屏最左侧,显示电梯状态、电梯方向、电梯位置等信息;乘客请求信息显示区域,这个区域位于屏幕中部,该栏的字母和数字具体代表意义参照下表;系统架构(续)系统架构(续)电梯动态效果图,本图紧邻请求信息显示区域,图中方块代表一个楼层,当电梯运行时,方块位置会发生相应的动态变化。主界面信息说明区域,这个区域位于屏幕最右侧,列出了乘客请求信息显示区中字母简写对应的英文单词。三、详细设计数据结构描述电梯运行算法设计输入输出部分设计1.数据结构描述自动电梯控制系统的4个模块中,因为初始化部分工作较少,可以把它和算法模块合并在一起,即包含主函数的模块(Elevator.c、Elevator.h);系统还包括按键输入模块(Key.c、Key.h)、LCD显示模块(Lcd.c、Lcd.h),以及几个资源文件,分别为:24×24点阵字模文件(Hzk24.c)、ASC码8×8点阵字模文件(Font.c)、开机初始图片资源文件(Frame.c)、启动界面背景图片资源文件(Title.c)。A.电梯状态算法模块数据结构/*Elevator.h*//*电梯状态:开、关、运行、停止*/typedefenumStatus{open,close,run,stop}STATUS;/*电梯外部请求:向上、向下、向上并且向下、无请求*/typedefenumOUTReqType{up_request,down_request,both_request,no_request,}OUTREQTYPE;/*电梯运行方向:向上、向下、无*/typedefenumdir{upward,downward,still,}DIRECTION;/*当前电梯请求结构类型:内部请求、外部请求*/typedefstructRequest{intinReq;OUTREQTYPEoutReq;}REQUEST;/*电梯信息结构类型:运行方向、当前层数、运行状态、长度为楼层数的请求数组*/typedefstructElevatorInfo{DIRECTIONDirection;//电梯方向intFloor;//电梯楼层STATUSStatus;//电梯状态REQUESTRequest[MAX_FLOOR];//楼层请求数组}ELEVATORINFO;B.按键输入模块数据结构/*当前乘客按键请求结构类型*/typedefstructkey{intjudge;//按键类型:取值可为内部按键(A)、外部按键(B)//确认按键(E)、退出按键(*)intfloor;//内部按键请求到达的楼层:(0-7)chardirection;//外部按键确定的电梯运行方向:上行//(+)、下行(-)intlocation;//外部按键所处在的楼层:(0-7)}KEY;C.LCD显示模块数据结构typedefstructfbdev{intfb;unsignedlongfb_mem_offset;unsignedlongfb_mem;structfb_fix_screeninfofb_fix;//设备无关的常值信息structfb_var_screeninfofb_var;//设备无关的数据信息chardev[20];}FBDEV,*PFBDEV;C.其他数据结构constuint8_ttitle[];//存放系统提示界面背景图片的数组externconstuint8_tframe[];//存放系统欢迎界面和退出界面//图片的数组constuint8_tg_auc_hzk24[];//存放一个汉字24×24点阵字//模的数组constuint8_tfontdata_8x8[];//存放一个ASC码8×8点阵字//模的数组2.电梯运行算法设计根据电梯运行流程,把电梯分为停止、运行、开门、关门四种控制状态,如下图所示。停止状态是指电梯在没有任何请求的情况下的静止状态,而不是指电梯在运行过程中开门前的停顿状况。我们忽略停顿状况,把电梯从运行状态直接迁移为开门状态。电梯控制状态转移图运行状态停止状态开门状态关门状态有呼叫请求到达请求楼层无呼叫请求电梯所在楼层有呼叫请求乘客进入电梯有呼叫请求电梯控制状态转移图(续)系统初始时,电梯处于停止状态。电梯处于停止状态时,根据发出请求的楼层不同可以分别迁移到运行或者开门两个不同状态。电梯处于运行状态时,如果没有到达请求楼层发生自迁移,即保持运行状态不变;当到达请求楼层时,迁移到开门状态。电梯控制状态转移图(续)电梯处于开门状态一段时间后必然迁移到关门状态。电梯处于关门状态时可以根据是否有请求迁移到运行状态或者迁移到停止状态。电梯状态处理伪代码电梯各个状态的处理过程,可以依靠电梯派遣函数,根据通过判定电梯信息结构体中的电梯状态,调用相应控制状态的函数来控制电梯的运行,伪代码如下:派遣函数(void){switch(电梯运行状态){case停止状态:停止处理函数;break;case运行状态:运行处理函数;break;case开门状态:开门处理函数;break;case关门状态:关门处理函数;break;default:break;}}电梯停止状态流程图开始改变状态为开门当前楼层有请求?YN上方楼层有请求?到顶?向上扫描返回改变方向为向上,状态为运行YNNY改变方向为向下,状态为运行上方楼层有请求?向上扫描到当前层?NYYN定位到底层电梯运行状态流程图开始当前运行方向?改变状态为开门当前层有内部请求?外部向上请求?外部向上和向下请求?当前层上方有内外请求?当前层有外部向下请求?当前层下方有内外请求?当前层上移一层改变状态为开门改变状态为向下改变状态为开门当前层下移一层改变状态为开门改变状态为向上当前层有内部请求?外部向下请求?外部向下和向上请求?当前层下方有内外请求?当前层有外部向上请求?当前层上方有内外请求?返回YN上下YNNYYYYYYNNNNNN电梯开门状态流程图开始改变状态为关门只有向上或向下外部请求?外部请求置为空电梯当前状态为向上运行?向上和向下都有外部请求?外部请求置为向下电梯当前状态为向下运行?外部请求置为空向上和向下都有外部请求?外部请求置为向上开始YNYNYNYNYN电梯关门状态流程图开始当前运行方向?改变状态为运行当前层上层有内部请求?外部向上请求?外部向上和向下请求?当前层下层有内部请求?外部向下请求?外部向下和向上请求?改变状态为向下运行改变状态为无方向、停止改变状态为运行改变状态为向上运行改变状态为无方向、停止当前层下层有内部请求?外部向下请求?外部向下和向上请求?当前层上层有内部请求?外部向上请求?外部向下和向上请求?返回上下NNYYYYNN3.输入输出部分设计LCD输出模块负责显示系统的4个图形界面:系统欢迎界面、系统提示界面、系统运行界面和系统退出界面。系统欢迎界面和系统退出界面分别显示一幅图片及相关文字;系统主要工作在系统运行界面下。输入输出部分设计(续)按键输入模块的主要功能有三个:设置键盘键值;扫描键盘,采集按键信息;获取乘客请求结构体信息,并对这些信息进行封装、判断、转换等一系列的处理。输入输出部分设计(续)在设计当中,为了使键盘部分能够及时有效的响应,目标机上接有键盘专用芯片ZLG7290。键盘的动作由芯片ZLG7290检测,当键盘按下时,芯片检测到后在INT引脚产生中断触发电平通知处理器,处理器通过I2C总线读取芯片ZLG7290键值寄存器中保留的键值。输入输出部分设计(续)在设计当中,为了使键盘部分能够及时有效的响应,目标机上接有键盘专用芯片ZLG7290。键盘的动作由芯片ZLG7290检测,当键盘按下时,芯片检测到后在INT引脚产生中断触发电平通知处理器,处理器通过I2C总线读取芯片ZLG7290键值寄存器中保留的键值。输入输出部分设计(续)键盘获得的输入信息繁多而复杂,需要对这些信息进行处理,该过程分为两个步骤:首先,对信息进行筛选和封装。由于键盘信息扫描检测函数不断地等待按键被按下,而用户使用键盘输入信息是随机的,所以需要对按键信息进行筛选,保留用户有效按键值。由于系统使用规则的限制,每次用户发出的请求,并不能由单个按

1 / 57
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功