本帖最后由 开源共享 于 2009-8-15 11:33 编辑
对于嵌入式软件公司可以销售RTOS、中间件,但不能销售编程方法,
但对一个软件工程师来说,拿到RTOS和中间件之后,他的工作才刚刚开始,如何写自己的应用?从结构化编程(C语言)到面向对象编程(C++),是一个跳跃,在没有C++编译的MCU上我们可以用C语言实现面向对象编程,这是不错的方法。但对于事件反应式系统来说,有没有更好的方法,统一建模语言UML给我们很多启示,用轻量级的状态图来实现事件驱动系统。
但状态图不能在真空中运行,所以对于软件工程师来说,需要知道嵌入式编程的完整概念。
事件驱动系统是必须对事件做出反应的系统,99%的微处理器芯片都为各种嵌入式系统所用,嵌入式系统自然是最主要的反应式系统。
为了定义和实现事件驱动系统,状态机是一种很好的形式方法。本文介绍一种统一建模语言UML的轻量级替代品------状态机的C语言实现(状态模式)。
状态机需要有一个多线程框架的支持,所以就有了一轻量级RTOS的替代品-----多线程框架(基于优先级的非抢占式调度)。
我们的系统有人机界面、按键、显示,有采集输入,通过运算或判断输出控制信号。在一个嵌入式系统中超过80%的代码和以前的产品是很相似的。我们把这些封装成完整的事件函数,在系统中调用,我们称之为构件。
所以在嵌入式编程中有三个重要概念:框架、构件和模式。
框架:可以是一个商用RTOS(UC/OS-II,ECOS),或LINUX、WINCE等等,或者是自己写的可以做多线程调度的框架。程序需要一个骨架,这就是框架。
构件:可以是驱动或中间件,或者自己写的可复用IO代码。比如:串口驱动,TCP/IP协议栈、GUI、USB驱动等等。
状态模式:状态图在软件方法学和建模语言(如UML)中得到了普遍的认可, 对于事件驱动系统来说,状态图方法是一种强有力的设计方法。基于模型的开发对于当今的高复杂性、短周期的商业环境来说至关重要。使用状态图方式进行基于模型的嵌入式系统开发,很可能在更短的时间内构建更复杂而且可靠(缺陷更少)的系统。
状态模式编程优势:
1、状态机往往会从代码中消除许多条件语句,甚至是呈数量级的减少。由于明确了任何时刻系统的状态,所以状态机要求仅测试一个变量(状态变量)来替代为确定操作方式而测试许多变量。
2、用状态进入和退出动作实现有保证的初始化和清除。
3、安全支持行为继承的层次式状态机。
4、使用和维护都简单。
5、轻易地改变状态机拓扑。
6、提供了运行时效率和小的内存占用。 |