嵌入式系统应用程序方案之一——基于事件驱动的应用程序框架

合集下载

嵌入式开发中的软件架构设计

嵌入式开发中的软件架构设计

嵌入式开发中的软件架构设计嵌入式开发是现代科技领域中的重要一环,它涉及到各种智能设备和嵌入式系统的开发与设计。

在嵌入式开发中,软件架构设计起着至关重要的作用。

本文将介绍嵌入式开发中的软件架构设计原则、常见的软件架构模式,以及如何选择适合的软件架构设计方案。

一、嵌入式开发中的软件架构设计原则在进行嵌入式软件架构设计时,需要遵循一些基本原则,以确保软件架构的稳定性、可靠性和可维护性。

以下是几个重要的原则:1. 模块化设计:嵌入式系统通常由多个模块组成,每个模块负责不同的功能。

模块化设计可以使系统的各个模块相互独立,易于调试和维护。

2. 可重用性:合理设计软件模块,以便于在不同的项目中重复使用。

这将提高开发效率,减少代码量,降低项目开发成本。

3. 可扩展性:嵌入式系统的需求可能会随时间不断变化。

因此,软件架构设计应具备良好的可扩展性,以便于根据实际需求进行系统的扩展和升级。

4. 可靠性和安全性:嵌入式系统通常面临着严格的可靠性和安全性要求。

软件架构设计应当考虑到系统的性能和稳定性,并采取相应的措施来确保数据的安全性。

5. 性能优化:嵌入式系统通常拥有有限的资源,包括处理能力、内存和存储空间等。

软件架构设计应当考虑到这些资源限制,并尽可能优化系统的性能。

二、常见的嵌入式软件架构模式针对不同的应用场景和需求,存在多种嵌入式软件架构模式可供选择。

以下是一些常见的模式:1. 单机框架模式:在这种模式下,嵌入式系统作为一个单一的实体存在,所有的功能模块都运行在同一台设备上。

这种模式适用于资源较为充足、功能相对简单的嵌入式系统。

2. 分布式框架模式:在这种模式下,嵌入式系统的各个功能模块分布在不同的设备上,通过网络进行通信和协作。

这种模式适用于功能复杂、需要协同工作的嵌入式系统。

3. 客户端-服务器模式:这种模式下,嵌入式系统被分为客户端和服务器两个部分。

客户端负责与用户进行交互,服务器负责处理数据和逻辑。

这种模式适用于需要与用户进行交互的嵌入式系统。

嵌入式单片机三种应用程序架构

嵌入式单片机三种应用程序架构

嵌入式单片机三种应用程序架构嵌入式单片机是一种集成了处理器、存储器、输入输出接口等功能的微型计算机系统,广泛应用于各种电子设备中。

针对不同的应用需求,嵌入式单片机可以采用不同的应用程序架构。

下面将介绍三种常见的嵌入式单片机应用程序架构,包括单任务、多任务和事件驱动架构。

一、单任务架构在单任务架构下,嵌入式单片机只能执行一项任务,也就是一次只能处理一个事件。

程序代码是按照顺序执行的,没有并行处理的能力。

在单任务架构下,主程序中通常包含一个主循环,通过循环不断地检测各种外部事件的发生并作出相应的处理。

例如,一个简单的嵌入式系统可能需要周期性地读取传感器数据并进行处理,然后将处理结果输出到显示屏上。

单任务架构的优点在于编程简单,逻辑清晰,适用于单一功能较简单的场景。

同时,由于不需要考虑并行处理的复杂性,系统资源的管理也相对简单。

然而,单任务架构的缺点在于不能同时进行多个任务处理,效率较低,且无法处理实时性要求较高的应用场景。

二、多任务架构多任务架构是一种支持多个任务并发执行的应用程序架构。

在多任务架构下,嵌入式单片机可以同时处理多个任务,提高系统的处理效率。

每个任务都有自己的代码段和数据段,并且任务之间可以实现相互通信和数据共享。

实现多任务的方法有多种,最常见的是利用操作系统的支持。

操作系统可以为每个任务分配独立的时间片,并负责任务的切换和调度。

常见的嵌入式操作系统有uc/OS、FreeRTOS等。

多任务架构的优点在于可以提高系统的并发处理能力,适用于多任务、复杂功能的应用场景。

同时,多任务架构可以实现任务间的相互独立,提高系统的可维护性和可重用性。

然而,多任务架构在设计和开发过程中需要考虑任务间的调度、通信、同步等问题,复杂度较高。

三、事件驱动架构事件驱动架构是一种基于事件触发的应用程序架构。

在事件驱动架构下,嵌入式单片机依据外部事件的发生而作出相应的响应,而非简单的按序执行代码。

事件可以是外部信号(如按键输入、传感器数据等)、定时器中断、通信中断等。

基于事件驱动的单片机多任务程序设计

基于事件驱动的单片机多任务程序设计

嵌 入式系统 最常见 的软件 架构一般有 两种川:前 后台系统和多任务 实时操作 系统 ,单片机应用系统广
要 ,将多任务机制 引入单 片机系统 ,可 以大大提高现
有单片机系统的工作效率 ,满足多任务要求。
泛使 用的是前后系统 。在这种架构下 ,应 用程序~般
是一个无限循环 ,循环 中调用相应 的函数完成相应 的
计 算 机 系 统 应 用
ht:ww . Sa r. t l wc ・. gc pl - o a
21 0 2年 第 2 卷 第 7 期 1
基于事件驱动的单 片机多任务程序设
周富相 ,陈德毅 ,郑晓 晶
( 总参通信训练基 地,宣化 0 5 0 ) 7 10
摘Hale Waihona Puke 要 :利用单片机 进行嵌入式系统开发 时,经常会面 临同时处理多个任务 的要求 。为了在 资源紧缺 的单片机
l 单片机多任务系统 内核设计
单片机 多任务系统分 为两个 部分,多任 务内核和 用户应用程序 。多任务 内核是整个单片机软件 系统的 核心部分 ,负责进行任务管理 、 任务调度及事件处理; 用户应用程序在 多任务 内核的调度 下通 过解析 事件 来 执行相应 处理,完 成相应 功能 。因此,主要对 多任务 内核的设计进行论述 ,而用户应用程序这里不再详细
论述。
操 作 。这种程序 设计方 法就是单任务机 制 ,单任务系 统具有简单直观 、易于控制的优点 。然而 由于程序 只
能按顺序依 次执行 ,缺乏灵活性,只能使用 中断函数 实时地处理~些较 短的任 务,在 较复杂的应用 中使用 极为不便 ,嵌入 式多任务实时操作系统的 出现解 决了 这个 问题 【。在多任 务系统 中,可 以同时执行多 个并 2 1

嵌入式系统原理及应用考试试卷

嵌入式系统原理及应用考试试卷

嵌入式系统原理及应用考试试卷(答案见尾页)一、选择题1. 嵌入式系统的定义是什么?A. 一种特殊的计算机系统,具有面向特定应用领域的硬件和软件B. 一种在普通计算机上运行的操作系统C. 一种专门用于控制和管理嵌入式设备的硬件和软件系统D. 一种集成了计算、通信和控制功能的系统2. 嵌入式系统的基本组成包括哪些?A. 中央处理器(CPU)B. 内存(RAM)C. 存储器(ROM)D. 输入输出设备3. 嵌入式系统通常应用于哪些领域?A. 消费电子产品B. 工业控制系统C. 汽车电子D. 医疗设备4. 嵌入式系统的开发过程通常包括哪些步骤?A. 需求分析B. 设计C. 编程D. 调试和测试5. 嵌入式系统中的实时性是指什么?A. 系统能够在严格的时间限制内响应外部事件B. 系统能够处理复杂的计算任务C. 系统具有高度的可预测性D. 系统具有高度的自动化能力6. 嵌入式系统中的嵌入式软件与普通软件的主要区别是什么?A. 嵌入式软件通常运行在特定的硬件平台上B. 嵌入式软件的代码量通常较少C. 嵌入式软件的开发周期较短D. 嵌入式软件的可执行文件较小7. 嵌入式系统中的微处理器与通用微处理器的主要区别是什么?A. 微处理器的工作频率通常较低B. 微处理器的功耗通常较高C. 微处理器主要用于嵌入式系统D. 微处理器的结构通常较为简单8. 嵌入式系统中的嵌入式操作系统通常具备哪些特点?A. 实时性B. 可靠性C. 安全性D. 易用性9. 嵌入式系统中的通信协议通常用于实现哪些功能?A. 数据传输B. 设备控制C. 网络互联D. 任务调度10. 嵌入式系统在未来将面临哪些挑战和机遇?A. 技术创新B. 市场需求变化C. 知识产权保护D. 环境友好型设计11. 嵌入式系统的定义是什么?A. 一种特殊的计算机系统,具有高度集成和可编程的特点。

B. 一种专为特定功能和应用而设计的计算机系统。

C. 一种集成了操作系统和应用程序的计算机系统。

MiniGUI

MiniGUI

消息的队列(2)
系统向应用程序消息队列投递消息是通过填充一个MSG 消息结构,再把它复制到消息队列中,MSG结构中的信 息如上所述,包括接收消息的句柄、消息标识、两个消息 参数以及消息时间。 应用程序可以通过GetMessage函数从它的消息队列中取 出一条消息,该函数用所取出消息的信息填充一个MSG 消息结构。应用程序还可以调用HavePendingMessage 函数来检查消息队列中是否有消息而不取出消息。 int GUIAPI GetMessage(PMSG pMsg,HWND hWnd); BOOL GUIAPI HavePendingMessage(HWND hMainWnd); 非排队消息不通过消息队列而直接发送到目标窗口的窗口 过程。系统一般通过发送非排队消息通知窗口完成一些需 要立即处理的事件,比如MSG_ERASEBKGND消息。
MiniGUI
MiniGUI的工作流程和体系架构的分析 基于GUI的应用程序设计 MiniGUI在嵌入式Linux下的移植
MiniGUI的工作流程和体系架构的分析
的概念(1) MiniGUI的历史 MiniGUI的体系架构 MiniGUI的事件驱动和消息机制 MiniGUI的三种运行模式
GUI概念(2)
Gui Framework提供给应用的接口主要包括窗口的建立, 事件的注册,还会提供更加底层的接口让应用创建自己特 色的窗口。Framework内部实现主要分为四块: 1. 图形引擎 2. 事件系统 3. 窗口系统 4. 用户接口层 图形引擎提供最底层的图形函数,如点、线、矩形、椭圆 形、图片等,及最底层的图形区域的计算,颜色的计算等。 事件系统提供对最原始的硬件源事件的管理,如鼠标的点 击,键盘的输入,触摸屏的操作等,将这些事件发送到指 定的模块,以及提供内部自定义的事件管理和转发。 窗口系统实际上是对图形引擎和事件系统的封装,给本来 屏幕上每一块的区域都添加了”生命“,使得这些区域可 以响应事件,显示特定的图像。 用户接口层主要是为应用程序服务的,让应用程序不关心 图形引擎和事件系统的情况下来建立自己的窗口。

嵌入式系统开发测试题(含答案)

嵌入式系统开发测试题(含答案)

嵌入式系统开发测试题(含答案)一、单选题(共100题,每题1分,共100分)1、Make预置了一些内部宏,其中$@表示A、以上都不是B、没有扩展名的当前目标文件C、当前目标文件最近更新的文件名正确答案:A2、关于U-Boot,下列说法错误的是()A、支持的处理器有ARM、MNPSB、是遵循GPL条款的开放源码项目C、支持的操作系统有LINUX、QNX正确答案:A3、Makefile是()A、调试器B、编辑器C、项目管理器正确答案:C4、C语言文件预处理生成哪个后缀的文件A、iB、SC、o正确答案:A5、直接编译进内核,又称()。

A、下载文件B、静态连接C、动态连接正确答案:B6、实时在线仿真是一种用于替代目标上()的设备A、CPUB、GPUC、NOU正确答案:A7、GDB软件是()。

A、调试器B、编译器C、文本编辑器正确答案:A8、嵌入式系统设计的重要特点是()多样化A、技术B、应用C、操作正确答案:A9、ARM的工作模式有?A、非特权模式和特权模式B、特权模式C、非特权模式正确答案:A10、嵌入式操作系统的特点不包括()。

A、有一定的实时性B、强交互性C、可裁剪正确答案:B11、TCP/IP参考模型不包括()A、表示层B、应用层C、传输层正确答案:A12、Linux内核的功能不包含下面哪种()A、处理机管理B、内存管理C、进程管理正确答案:A13、下列CPSR寄存器标志位的作用说法错误的是A、V:借位B、C:进位C、Z:零正确答案:A14、()显示屏是利用有机电致发光二极管制成的显示屏。

A、OLEDB、ABCDC、EFGH正确答案:A15、动态链接是指程序运行时需要调用共享库文件,其后缀为()A、aB、cC、so正确答案:C16、MCU偏重于()A、信号处理B、控制正确答案:B17、()是指:在宿主机上进行软件编辑、编译、链接等,并生成能够在目标机上运行的可执行程序的过程。

A、交叉编辑B、交叉开发C、交叉编译正确答案:C18、Flash程序烧写时,需准备好的软件不包括()。

软件资格考试嵌入式系统设计师(基础知识、应用技术)合卷(中级)试卷及答案指导(2025年)

软件资格考试嵌入式系统设计师(基础知识、应用技术)合卷(中级)试卷及答案指导(2025年)

2025年软件资格考试嵌入式系统设计师(基础知识、应用技术)合卷(中级)模拟试卷(答案在后面)一、基础知识(客观选择题,75题,每题1分,共75分)1、嵌入式系统通常指的是什么?A、运行在个人计算机上的操作系统B、运行在专用硬件平台上的软件系统C、用于数据处理的通用软件D、用于网络通信的软件系统2、以下哪个概念不属于嵌入式系统设计的关键要素?A、实时性B、资源优化C、可靠性D、用户界面友好性3、题干:在嵌入式系统中,通常使用哪种类型的微处理器?A. 通用微处理器B. 嵌入式微处理器C. 数字信号处理器D. 光子微处理器4、题干:在嵌入式系统设计中,以下哪种通信接口通常用于高速数据传输?A. SPI(串行外设接口)B. I2C(两线式串行接口)C. CAN(控制器局域网)D. USB(通用串行总线)5、以下关于嵌入式系统设计的基本概念,错误的是:A. 嵌入式系统通常由硬件和软件两部分组成B. 嵌入式系统通常具有实时性要求C. 嵌入式系统设计过程中,硬件和软件的设计往往是相互独立的D. 嵌入式系统通常具有有限的资源6、在嵌入式系统设计中,以下哪个技术用于提高系统的可靠性和稳定性?A. 双机热备份B. 软件冗余C. 实时操作系统D. 硬件冗余7、嵌入式系统中的中断服务程序(ISR)通常采用以下哪种优先级管理方式?A. 固定优先级B. 动态优先级C. 分级优先级D. 无优先级8、在嵌入式系统中,以下哪种存储器在系统运行时不能被重新编程?A. ROM(只读存储器)B. RAM(随机存储器)C. EEPROM(电可擦可编程只读存储器)D. Flash Memory(闪存)9、嵌入式系统中的“中断服务程序”(Interrupt Service Routine,ISR)主要作用是什么?10、以下哪项不是嵌入式系统设计中常见的硬件抽象层(HAL)的功能?11、题目:嵌入式系统通常由哪些主要组成部分构成?A. 微处理器、存储器、输入输出接口、电源B. 微控制器、操作系统、通信接口、应用软件C. 处理器、总线、内存、I/O设备D. 中央处理器、外部设备、操作系统、编程语言12、题目:以下哪个是嵌入式系统的典型应用?A. 智能家居系统B. 计算机操作系统C. 高速互联网交换机D. 大型数据库管理系统13、嵌入式系统中的中断服务程序(ISR)通常具有哪些特点?A. 优先级固定,不可改变B. 执行时间短,响应速度快C. 可由用户自定义执行流程D. 必须在主程序中显式调用14、在嵌入式系统中,以下哪种存储器类型适合用于存储程序代码?A. RAMB. ROMC. EEPROMD. Flash Memory15、嵌入式系统中的实时操作系统(RTOS)与传统操作系统的主要区别是什么?16、在嵌入式系统中,为什么通常使用C语言进行编程?17、嵌入式系统中的中断处理通常采用哪种方式来确保中断服务程序(ISR)能够及时响应?A. 优先级中断B. 中断嵌套C. 中断向量表D. 硬件优先级18、在嵌入式系统设计中,下面哪个不是影响系统实时性的因素?A. CPU的性能B. 外设的响应速度C. 操作系统的调度策略D. 电源的稳定性19、题目:嵌入式系统设计中,实时操作系统(RTOS)与传统操作系统的区别主要在于:A. 实时性要求B. 用户界面C. 处理器架构D. 存储管理 20、题目:在嵌入式系统设计中,以下哪项技术不属于嵌入式系统硬件设计领域?A. 硬件电路设计B. 微处理器选型C. 软件编程D. 电源设计21、题目:在嵌入式系统中,以下哪个组件是负责处理CPU和外设之间的数据传输?A. 总线控制器B. 存储器控制器C. 通信接口D. 输入输出设备22、题目:以下哪种技术常用于嵌入式系统的实时性能优化?A. 多任务处理B. 代码优化C. 事件驱动D. 硬件加速23、嵌入式系统中,以下哪个部件负责存储和管理程序代码和数据处理?A. 微处理器(CPU)B. 外部存储器(如硬盘、U盘)C. 存储器(RAM、ROM)D. 输入输出设备(如键盘、显示器)24、以下哪种通信接口在嵌入式系统中广泛应用于串行通信?A. USBB. I2CC. SPID. CAN25、题目:以下哪个是嵌入式系统的基本组成部分?A. 处理器、存储器、输入输出设备B. 电源、控制器、执行器C. 硬件、软件、接口D. 系统软件、应用软件、网络26、题目:以下哪个不是嵌入式系统的特点?A. 实时性B. 可靠性C. 便携性D. 开放性27、嵌入式系统设计过程中,功耗管理是一个重要环节,以下哪种方法不是降低功耗的有效措施?A. 提高处理器的主频以加快任务处理速度B. 使用动态电压调节技术C. 在不使用时关闭不需要的外设D. 使用低功耗的硬件组件28、在嵌入式系统开发中,RTOS是指什么?A. 实时操作系统B. 可编程逻辑控制器C. 图形用户界面D. 高级程序设计语言29、嵌入式系统中的“裸机”指的是什么?30、以下哪个不是嵌入式系统的特点?A. 实时性B. 专用性C. 网络通信能力D. 系统资源丰富31、在嵌入式系统中,以下哪种存储器是非易失性的,并且可以进行电擦除和重写?A. SRAMB. DRAMC. EEPROMD. Flash32、关于中断处理,下列哪一项描述是不正确的?A. 中断向量表存放了中断服务程序的入口地址。

事件驱动的编程及主要原理

事件驱动的编程及主要原理

事件驱动的编程及主要原理事件驱动编程(event-driven programming)是一种编程范式,它的主要特点是通过事件的发生与响应来驱动程序的执行。

事件驱动的编程模型在许多 GUI (图形用户界面) 应用程序、操作系统、嵌入式系统等领域都得到了广泛的应用。

本文将探讨事件驱动编程的主要原理。

事件驱动编程的核心概念是事件(event),事件可以包括鼠标点击、键盘输入、定时器到期等等。

当一个事件发生时,与之相关的代码或者处理程序会被执行。

事件驱动的编程模型通过等待事件的发生来响应用户的操作,而不是按照传统的顺序执行代码。

在事件驱动的编程模型中,有几个关键的组成部分。

1. 事件处理程序(event handler):事件处理程序是与事件相关联的代码块或函数。

当一个事件发生时,相关的事件处理程序会被执行。

例如,在一个图形界面程序中,当用户点击一个按钮时,按钮的事件处理程序会被调用。

2. 事件循环(event loop):事件循环是事件驱动编程的核心。

它监听事件的发生,并处理事件。

事件循环会不断地等待事件的出现,一旦有事件发生,就会执行相应的事件处理程序。

事件循环可以被看作是程序的主循环,它负责监听用户的操作,并决定哪些事件应该被处理。

3. 事件队列(event queue):事件队列用来存储即将被处理的事件。

事件循环从事件队列中获取事件并进行处理。

事件队列的特点是先进先出,即最先加入队列的事件会最先被处理。

事件驱动编程的主要原理可以总结为以下几点:1.事件的监测和捕获:程序会不断地检测事件是否发生。

当事件发生时,程序会通过特定的机制捕获事件的相关信息,例如事件类型、事件源等。

2.事件的分发和传递:捕获到事件后,程序会将事件分发给对应的事件处理程序。

事件可以通过多种方式传递,例如函数调用、消息传递等。

3.事件处理程序的执行:一旦事件分发给事件处理程序,程序会执行相应的处理代码。

事件处理程序可以对事件进行处理、修改数据等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

列,以启动相应的处理。
数据流程
技术支持:028-85136173
2

嵌入式系统应用程序方案之一
各个任务模块的主要功能之一就是对各级应用数据进行必要的加工,并形成新的数据。 典型的数据加工可以是:
对串口来的数据进行帧格式分析,提取相关数据,即通常的通讯规约分析; 对 AD 采集的原始数据进行某种统计处理,提取特征数据; 读取数字输入状态,进行必要处理; 读取网络报文,进行必要的应用层规约解析 应用数据存文件,文件数据处理等等 由于每个任务的执行机会具有一定的不确定性,因此需要对数据开设一定的缓冲区,对 一般的应用来说,数据处理通常都是顺序进行的,所以数据缓冲区的结构通常采用 FIFO 数 据结构,缓冲区的数据单元即可是简单的字节、字,也可以是复合的数据结构。在英创提供 的程序中,串口的数据缓冲区就是采用的 FIFO 数据结构,数据单元为一个字节,FIFO 结 构的数据缓冲区也称为环型 buffer。 可以由一个任务作数据处理,另一个任务作数据传送,对多任务共享的单一数据单元, 可通过设置信号灯的方法来确保数据单元的完整性,对多个数据单元,同样可考虑采用 FIFO 数据结构。对数据响应时间有严格要求的应用,也可以用一个任务实现数据采集处理和网络 通讯全过程。 以下具体介绍实现上述方案的主要代码。建议用户在阅读本文之前,已对英创嵌入式模 块的功能测试程序有了基本了解。
// 可以根据应用定义更多的命令
#define #define
MaxCmdStack 400
PARLEN
14
// 定义系统任务队列的长度 // 每个命令所带参数的长度
class TaskQueue
{
static unsigned int PutIdx;
// 通过 2 个 index 的操作,使 CmdBuf[ ]成为
进行处理,这就是所谓的事件驱动机制。在程序设计中采用事件驱动的一个直接的好处是降
低了各任务间的耦合性,提高了代码的可靠性及可维护性。
命令通常可定义成枚举变量,另可考虑命令参数段,可存放若干参数或字符串。系统任
务队列是一个典型的 FIFO 数据结构,系统为中断程序和普通的任务模块提供了发送事件的
API 函数。定时任务发生器是一段加载到系统定时中断中的代码,在 DOS 系统中一般可提
应用程序启动后,首先进行必要的程序初始化配置,便进入系统核心代码,核心程序将
依次读取系统任务队列中的事件代码,并根据代码内容转入相应的程序功能模块。不同的程
序功能模块对应着不同的任务,即图中所标注的任务 1、任务 2、任务 n 等等,这些任务代
码的特点之一是通过内部的状态机机制来避免程序阻塞,使得程序能快速返回系统任务调度
break;
case TASK1:
i1 = Task1.Do ( );
// 也可以是普通 C 函数
break;
case TASK2:
i1 = Task2. Do ( );
if( i1 ) CmdQueue.PushCmd( TASK2 );
// 发送命令,以继续任务处理
break;
case TASK3:
#define
ST0
0
#define
ST1
1
#define
ST2
2
#define
ST3
3
class AppTASK {
int State; int DoST0( ); int DoST1( ); int DoST2( ); int DoST3( ); public: int Init( ); int Do( ); };
static unsigned int GetIdx;
Байду номын сангаас
// 逻辑上的环型 buffer,即 FIFO 数据结构
static CMD
CmdBuf[MaxCmdStack];
static char
CmdPar[MaxCmdStack][PARLEN];
static struct time OldTime; static struct date OldDate; static unsigned int TickCount; static unsigned int TickSize;
嵌入式系统应用程序方案之一
嵌入式系统应用程序方案之一
——基于事件驱动的应用程序框架
英创信息技术有限公司 2005 年 10 月
本文介绍以英创公司嵌入式 PC 模块为平台,以事件驱动为特色的一种通用的嵌入式系 统应用程序方案,该方案满足大多数中、低端嵌入式系统需求,可广泛应用于智能测控设备、 POS 终端产品、工业自动化、网络通讯管理等领域。采用英创嵌入式网络模块的客户,更 是可以此为基础,直接进入应用功能的软件规划及实现,从而大大节省应用程序的开发时间, 同时保证应用程序的高稳定性。本应用程序方案的核心是通过对一个简单的任务命令队列进 行操作,来实现各个不同的应用程序功能。图 1 是本方案的典型流程框图。
// 读取当前队列中的命令 // 填入新的命令到系统任务队列 // 启动定时任务发生器 // 关闭定时任务发生器
#if
!defined(_CMDRIVE_H)
#define _CMDRIVE_H
#ifdef __cplusplus #define __CPPARGS ...
#else #define __CPPARGS
#endif
#include <dos.h>
enum CMD { NOP, TASK1, TASK2, TASK3, EXIT };
系统初始化程序 SysInit( ),首先是对系统提供的资源进行初始化,如网络初始化、串 口初始化、LCD 显示初始化等等,然后是对应用定义的功能对象进行初始化,最后是安装 中断服务程序,启动定时任务发生器。相应地,SysExit( )函数则主要是卸载中断,释放在 初始化中分配的动态 buffer。
秒级以上的定时事件,更小时间间隔的事件,可通过系统的其他定时器中断实现,对于一般
的嵌入式应用,最小定时事件不宜小于 5ms,否则会无为增加 CPU 的开销,降低系统性能。
在命令定义中,一般会定义 IDLE 或 NOP 命令,在 IDLE 任务中可以放常规的数据处理,
也可以放检查是否有键盘、是否有网络数据来等等,并可形成必要的事件发送到系统任务队
// 局部变量 // 系统命令枚举变量 // 系统命令所带参数
i1 = SysInit( );
// 首先进行初始化
for( ExitFlag=0; ; )
// 系统主循环
{
ReloadWDT( );
// 加载 watchdog
State = NET_Running( );
// 网络链路管理
CmdCode = CmdQueue.GetCmd( CmdPar );
技术支持:028-85136173
3

嵌入式系统应用程序方案之一
2.主要程序代码分析
主控流程与应用任务
#include #include #include #include
<stdio.h> <dos.h> “etr_tcp.h” “cmdrive.h”
// 定时计数 // 确定最小的定时间隔,可变,初值为 0
static void interrupt INT1C_Handler(__CPPARGS);
// 通过 INT 1C 实现定时任务发生器
static int ISR_PushCmd( CMD NewCmd, char* pPar=NULL );// 中断程序中使用
// 包含所需的 C 运行库
// 英创 TCP/IP 库 // 事件驱动 API 定义
int SysInit( ); void SysExit( ); int main( ) {
int i1, len, State, ExitFlag; CMD CmdCode; char CmdPar[20];
// 系统初始化函数定义 // 系统退出处理
单元,从而实现任务间的切换。
任务划分的原则一般是按照应用功能或层次来划分,如任务 1 对原始数据进行处理,
任务 2 对处理的结果数据进行网络传送,任务 3 对数据进行文件备份。为了提高系统对事
件的响应速度,每个任务不宜设计得过长,就大多数嵌入式系统应用来看,可以把任务的执
行时间控制在 100ms 之内,对需要更长执行时间的功能,可以通过内部设置状态机的方式
技术支持:028-85136173
图 1 事件驱动的应用程序流程框图
1

嵌入式系统应用程序方案之一
1.系统流程概述
在图 1 中表示了 3 种不同的流程,它们是程序代码流程、任务命令(也称为事件)流
程、以及数据的流程,以下对这三种流程做一简要介绍。
程序流程
} return i1; }
// 返回值 = 1:处理未完成;=0:处理完成
// 前进到下一状态 // 前进到下一状态 // 前进到下一状态 // 返回初始状态 // 处理完成!
技术支持:028-85136173
6

嵌入式系统应用程序方案之一
整个程序方案中,核心的代码是实现系统的事件驱动功能,被定义成一个 C++类如下:
// 从系统任务队列读取命令
switch( CmdCode )
{
case NOP:
// 进行常规处理,如检查键盘、网络、串口等
NetPackagePro( );
// 做必要的网络低层处理
// 若网络接收到数据,则启动相应任务进行处理
If( NetHasData( ) ) CmdQueue.PushCmd( TASK1 );
相关文档
最新文档