下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于状态机的嵌入式系统设计随着嵌入式系统的发展,微处理器功能的不断强大,内嵌的功能模块不断增多,使嵌入式系统被要求也能够完成多个不同的实时任务,如在完成键盘扫描的同时又要完成与外部的通信。现状传统的嵌入式系统程序设计的方法采用多个任务的顺序执行,要执行完一个任务(如键盘扫描完一次)才执行,同一个任务两次执行之间有较大的延时,常常无法满足系统的实时性要求。于是出现了一个趋势嵌入式系统操作系统的引入,利用系统提供的多任务特性,将处理器时间片按照一定的规律分配给各个任务。操作系统的引入带来的益处是1、大多数操作系统有任务这一概念,提供了任务创建,任务终结,任务的挂起和唤醒,任务之间的切换,任务的优先
2、级等特性的管理等常用系统调用,省去了程序员大量编程工作量。2、由于个任务之间也不是完全独立的,各任务之间需要同步,因此任务之间的通信也是十分重要的,操作系统提供的信号量、管道等通信方式满足了系统的不同需求,特别是管道弥补了由于嵌入式系统处理器RAM量较少,无法进行大量的数据交换的缺点,省去了扩展RAM的需要。但是采用嵌入式操作系统也有其很大的局限性,由于系统为了存储各任务的状态(PCB,进程控制块),造成了大量的RAM开销。不象冯·诺依曼结构,程序和数据在一个空间中,需要将放在外存中的程序载入到RAM中才能运行,因此RAM空间较大;由于低档的嵌入式处理器往往采用哈佛结构,程序和数据是
3、独立空间,往往存放程序ROM空间较大,而存放数据的RAM空间较小。所以要在低档嵌入式处理器上实现操作系统几乎是不现实,因为由于为了实现多任务和任务切换时的状态保存,将占去大部分数据存储器的空间。那么如何在低档嵌入式处理器较为方便的实现多实时任务呢?前面我们说过,传统的嵌入式系统设计遇到要完成多个任务时,将各个任务顺序执行,而且每个任务都要执行到一个段落才执行下一个任务,这造成任务之间实时性很差,可能因此丢失数据。而操作系统则不然,当某一个任务的时间片用完或满足了被挂起的条件时,操作系统将终止该任务的运行,保存现场,切换到其他任务。当时间片被分割到一定小时,从宏观上看,各任务就好象同时在运行了。
4、但是正因为操作系统随时可能将任务打断,这就需要大量的数据空间保存当前任务状态。那么有没有一种方法既能较少的占用RAM空间又能从宏观上达到各任务的同时运行呢?世间的事物都是处于不同的状态的,程序和处理器也是如此。从不同的角度看,如果从最细微的角度看,处理器和程序每时每刻的状态都不同,假如我们用一个状态向量来表示某一时刻某一个任务所处状态,那么采用操作系统进行任务切换时其保存的状态向量的位数将很大,因为其可能处于的状态数目实在太多了,每一个CPU寄存器值的可能组合都是一种状态;而采用传统的设计方法,其任务切换时的状态是唯一的,因此其要保存的状态向量的位数为零。于是根据这一特点,我们事先将任务分割成
5、若干个状态,每次任务被执行时,只执行其中的一个状态,这样需要存储任务的状态向量的位数大大减少了,同时每一个任务单次执行的时间减少了,所有任务能在较短的时间内被执行,以满足实时性的要求。同时采用状态机中的状态图,能够较好地理顺任务的执行过程,使程序设计也比较轻松。状态机在数字逻辑电路中,时序电路的设计常常用到状态机。所谓状态机就是将事物的过程分割成一系列的状态和这些状态之间转换的条件,相应输出。状态机又可分为MOORE状态机和MEALY状态机。MEALY状态机的输出是输入和当前状态的函数 ,MOORE状态机的输出只是当前状态的函数。这两种状态机的次态都是当前状态和输入的函数。由于MOORE状态机
6、的输出与输入无关,因此不适合我们的要求。本文所讨论的的状态机为MEALY状态机。下面我们来看一个简单的状态机,对一个按键是否按下判断的程序的状态机。按照传统的程序设计,判断一个按键是否按下分为四个步骤:1、判断键是否被按下,2、如按下,延时10ms,去机械抖动。3、再次读按键,如仍被按下,输出该键被按下的消息。4、读按键,由上图可知,判断按键的过程被分割为4个状态,按照前面所述的,如果使用传统的程序设计方法,一旦有键按下,必须将这四个状态都执行一遍,那么按键的程序占用CPU的时间将大于10ms,这将使系统的实时性下降。而采用状态机的设计方法,每次系统主循环执行到按键判断时,只执行其中的一个状态
7、,然后根据现态和输入得出下一次执行的状态(即次态)并保存,便退出按键判断的程序部分,执行其他程序。由此每次按键判断程序执行的时间就很短。一个良好的状态机的分析过程可分为以下几步:1、找出状态2、画状态转换图3、将状态转换图化简4、程序实现关于状态转换图化简可参见数字逻辑电路的相关书籍。程序实现将状态机转化为程序,根据工具的不同,有多种不同的选择。如51汇编语言,可用如下方法实现:MOV A, STATEMOV DPTR, STATE_TABLERL AJMP A+DPTRSTATE_TABLE:AJMP STATE_1AJMP STATE_2AJMP STATE_3以C语言实现可以利用函数指针
8、来实现不同状态的切换。下列程序为一个读键的状态机的实现。Typedef enumreadKey=0,debounceDelay,confirmKey,waitKeyRelease KeyState;Void (*keyStateFunction)()=getKeyValid,delayKey,confirmKeyValid,isKeyRelease;KeyState currKeyState;Void main()currKeyState=readKey;system initializationwhile(1)keyStateFunctioncurrKeyState();something elsevoid getKeyValid(void)是否有键按下如果有currKeyState=debounceDelay;结束判断void delayKey(void)(设系统基准计数器每隔一个毫秒加一)currKeyState=confirmKey;结束判断void confirmKeyValid(void)如果是currKeyState=waitKeyRelease;currKeyState=readKey;标志位向其他程序通信该键以被按下过 结束判断void isKeyRelease(void)判断该键是否放开currKeyState=readKey
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 交通导向标识设置方案
- 雨水收集与利用工程方案
- 道路施工期间天气应对方案
- 城中村生态农业发展方案
- 2026年酒店管理服务初级专业知识题
- 2026年物流配送实务操作能力笔试模拟题
- 2026年国内新闻传媒体资讯概论及考题要点详解
- 2026年游戏开发技术与引擎优化实践题库
- 2026年人工智能算法工程师高级模拟试题
- 2026年智能医疗设备操作认证题库及答案
- 2025 年度VC PE 市场数据报告 投中嘉川
- 2026中国电信四川公用信息产业有限责任公司社会成熟人才招聘备考题库及答案详解(考点梳理)
- 2025年专利管理与保护操作手册
- 2025云南山海遊旅游集团有限公司招聘10人考试备考题库及答案解析
- 2025年网约车司机收入分成合同
- 2026年海南财金银河私募基金管理有限公司招聘备考题库参考答案详解
- 2026年GRE数学部分测试及答案
- 浙江省宁波市镇海中学2026届高二上数学期末教学质量检测模拟试题含解析
- (2025年)电力交易员练习试题附答案
- 2026年咨询工程师现代咨询方法与实务模拟测试含答案
- 甘肃省酒泉市2025-2026学年高一上学期期末语文试题(解析版)
评论
0/150
提交评论