新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 运用状态机提高嵌入式软件效率

运用状态机提高嵌入式软件效率

作者: 时间:2009-07-02 来源:网络 收藏


“横式”设计是把每个及所要执行的动作单独放到一个子函数中处理,有RC500Config()、RC500Request()、RC500Anticoll()等。工作的确定可以通过查询表获得,找到相应的状态后运行相应的子函数。在每个子函数中,既有该状态下应该执行的动作,也有状态的转换。然后在主程序中判断状态是否发生了转换,再转到相应的状态子程序中执行。
横竖两种写法,实现的功能完全相同,但是“竖式”隐含了优先级排序,破坏了事件间原有的关系。同时,由于处在每个状态的事件数目不一致,而且事件发生的时间是随机的,“竖式”设计为顺序查询方式,因此大量时间被浪费。“横式”设计,在某个时间点状态是唯一确定的,延迟时间可以预先准确估算。而且在事件发生时,系统会调用相应的事件函数,在函数里查找唯一确定的状态,并根据其状态执行动作和状态转移。使用这种方式设计的思路清晰简洁,高,故使用“横式”方法设计程序更好。类似地,对于GPRS、GPS等功能模块也可以状态机机制进行程序设计,从而在整个智能收费机的设计中,对所有任务的处理都可以状态机机制进行相应的程序设计。


3 使用状态机的效能分析
在很多系统设计中都可以用到类似状态机的设计思想,比较常用的地方就是各种液晶界面的设计。使用状态机机制设计软件,可以使设计思路清晰、灵活,软件的可读性强,便于以后的维护。如果合理地使用状态机,还可以较大幅度地MCU的运行。下面以非接触式IC卡的软件设计流程为例讨论。
图2(a)是传统的软件设计流程,使用这种流程设计的系统软件按部就班地先执行RC500Config(),再执行RCS00Request(),然后是RC500Anticoll(),直到对IC卡操作完成,再转到其他任务(如GPS)。这样IC卡的操作任务占用了整个MCU资源。图2(b)是使用状态机设计系统软件的流程。在使用状态机的同时设定一个软件时钟,用来为系统的各个任务进行计时,并进行任务的调度。软件时钟使用一个长整型变量进行计时,利用MC[J定时器1 ms或10 ms的中断来实现,从而使时钟不受任务执行过程的影响。当某个任务执行过程需要等待延时,执行子函数返回main()函数,让其他任务使用MCtJ资源。这样实现的软件,在处理某个任务的空隙可以同时处理其他任务的操作,有效地了MCU处理事件的能力。具体实现方法如下:

……
}
当延时不够200ms时,函数RC500Request()直接返回而没有改变IC卡操作的状态,因此MCU下一次进行IC卡操作时,继续执行函数RC500Request(),直到IC卡操作状态改变。同时,函数RC500Request()返回后,main()函数会检查GPS、GPRS等工作模块,执行其中的某些动作。也就是说,在执行IC卡操作的同时,可以执行其他任务的操作;同理,在执行其他任务的操作时,也可以执行IC卡的一些操作。这样就可以充分利用MCU的资源,MCU对多任务的处理


结 语
使用上述状态机机制设计的智能公交车IC卡收费机的系统软件,能够及时处理IC卡信息、GPS定位信息、GPRS通信等多个任务的操作,运行稳定,完全满足实际应用的要求。该机制非常适合功能较多的软件系统设计。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭