一种在嵌入式计算机系统上实现消息响应机制的方法

文档序号:6572344阅读:291来源:国知局
专利名称:一种在嵌入式计算机系统上实现消息响应机制的方法
技术领域
本发明涉及计算机系统,具体涉及实现嵌入式计算机系统的消息响应 机制的方法。
背景技术
随着嵌入式系统功能的不断强大,嵌入式系统的应用越来越广泛。 但是由于嵌入式系统种类多,各自的硬件环境差异比较大,软件运行 环境有很大的变化,当需要通过指定的输入设备输入数据和通过显示屏显 示数据时,通常都是直接扫描指定的输入设备,获取该输入设备的输入数 据,并通过判断数据值来执行对应的功能,当系统功能比较简单时这种处 理方法能够满足要求,但随着系统功能的不断扩充,使用这种方法将大大 加深应用程序的层次,极大的限制了应用功能扩展,不便于系统的维护开 发。由于这种处理方式基本上是基于数据值进行操作,程序结构流程属于 结构化流程,只能按照预先指定的流程进行处理,较难扩展其它的功能。 因此,随着各种嵌入式系统应用的日益复杂,需要提供一种更加有效的应 用程序处理机制。消息响应机制正好能够满足这种需求,嵌入式系统通过 产生、发送、解析、响应各种不同的消息,就能够较好的避免这些问题。

发明内容
本发明所要解决的技术问题是提供一种在嵌入式计算机系统上实现消 息响应机制的方法,用于在嵌入式系统上实现消息响应机制,使整个系统通过转换消息、发送消息、解析消息的一系列过程来执行各种各样的功能, 避免了直接响应各种输入设备输入数据的操作,可极大方便整个系统后续 的应用扩展和维护。为解决上述技术问题,本发明是提出以下技术方案实现的 一种在嵌入式计算机系统上实现消息响应机制的方法,其特征在于 嵌入式系统启动后,应用程序获取到控制权后,首先对系统进行初始化, 在这个过程中初始化了一个定时器中断服务程序,并初始化了一个消息循 环队列;该定时器中断服务程序每隔固定时间就对指定的输入设备进行一 次扫描,当从该输入设备接收到一个数据值后,将该数据值写到输入值缓 冲区中;当系统初始化过程完成后继续执行以下步骤步骤一根据显示需要创建窗口,设置窗口相关属性; 步骤二执行新建立的窗口的消息循环函数,进入窗口消息循环。按 下述步骤进行各种操作,直到窗口被销毁关闭;1、 接收消息队列中的消息通过调用从消息队列中获取消息的函数, 获取消息队列中的第一条消息。如果获取成功则执行第2步,如果失败则 执行第4步;2、 解析消息根据接收到的消息所包含的句柄获取对应的窗口,从而 获取该窗口的回调函数;3、 调用窗口回调函数,执行该消息对应的功能来处理该消息;4、 判断输入值缓冲区是否有数据输入,有则获取该数据值,并且执行 步骤5,没有数据输入则继续执行消息循环;5、 通过调用输入值转换消息函数,将获取的数据转换为对应消息,并且设置该消息相关属性;6、通过调用发送消息函数或邮寄消息函数,将消息发送到消息队列中,继续执行消息循环。所述定时器中断服务程序每隔固定时间运行一次,其操作过程如下 首先对指定的输入设备进行一次扫描,并判断该输入设备是否有数据输入,如果有数据输入则获取该数据值并将该数据值写到输入值缓冲区,并退出程序;如果没有数据输入则退出程序。 本发明带来以下有益效果-本发明提出了一种在嵌入式系统上实现消息响应机制的方法,可以有 效克服嵌入式系统原有结构化流程应用程序的弊端,降低了应用程序的层 次深度,提高了应用程序的灵活性,使嵌入式系统的应用程序的维护性和 扩充性得到大大增强。


图l:本发明一实施例的各个部分的结构关系图
具体实施例方式下面结合附图和具体实施例对本发明做进一步的描述 嵌入式系统启动后,应用程序获取到控制权后,首先对系统硬件进行 初始化操作,在这个过程中初始化了一个定时器中断服务程序,并初始化 了一个消息循环队列。该定时器中断服务程序每隔固定时间(如5ms)就 对键盘进行一次扫描,当获取到一个按键值则将该按键值写到键值缓冲区 中。系统定义了一系列的消息处理函数,包括从消息队列中获取消息函数、将消息放进消息队列函数、清空消息队列函数、初始化消息队列函数、按 键消息转换函数、消息响应函数、发送消息函数、邮寄消息函数等,来对 系统的消息进行相关的处理。由于系统在后续运行各个功能时,需要执行不同的功能,显示不同的 数据,因此系统在运行过程中需要创建一系列的窗口,来显示不同的数据, 执行不同的操作。系统首先在启动后创建一个主窗口,然后在后续的各个 功能中再根据需要创建各种应用窗口。为了使每个窗口都能够实现自身的 各种功能,响应各种各样的消息,接收显示各种数据,因此每个窗口都有 一个唯一的窗口代号,即窗口句柄,来唯一表示该窗口,并且为每一个窗 口都对应了一个消息回调处理函数,该函数通过解析该窗口接收到的消息, 来执行该消息对应的功能,实现整个窗口的功能。系统支持的所有消息都和一个窗口句柄相关联,即在发送一条消息时 指定了该消息发送的目的窗口句柄,也就是说该条消息是属午指定的句柄 对应的窗口所有,当目的窗口接收到发送给自己的消息时,调用本窗口对 应的消息回调函数,执行对应的功能。当一个窗口在创建的时候,首先调用创建窗口函数按该窗口的属性创 建指定的窗口,并调用发送消息函数,发送初始化窗口消息,然后系统马 上根据目的窗口句柄找到对应的窗口回调函数,并调用该函数,响应初始 化窗口消息,执行窗口各种数据的初始化。随后系统进行循环状态,不停 的接收消息队列中的消息,然后调用窗口回调函数,执行消息对应的功能。 系统在循环状态时,不停的从键值缓冲区中读出是否有数据输入,如果有 数据输入则调用按键键值消息转换函数,将该数据值转换为对应的消息,然后调用将消息放进消息队列函数将该消息发送到消息队列中或者直接处 理该消息。在操作过程中,用户可以自定义各种各样的消息,并将之发送 到消息队列中,并在窗口回调函数中实现该消息的功能,即可增加对该消 息的支持。通过以上描述的这种操作方式,不停的接收消息、解析消息、 响应消息功能,就可以在嵌入式系统上实现一个消息响应机制。如图一所示,整个消息响应机制由消息队列、窗口、窗口回调函数、 键值缓冲区、消息处理、定时器中断服务程序等部分组成。下面将详细介 绍各个部分一、消息队列消息队列是一个内存缓冲区变量,用来保存系统的消息,具有固定的 结构格式。至少包含了队列头指针、队列尾指针、消息数组等三部分。其 中队列头指针指向了队列中的第一条消息,当队列中的第一条消息被读出 后,队列头指针指向下一条消息;队列尾指针指向了队列中第一条空消息 处,当新增一条消息到队列中时,队列尾指针指向下一条空消息处;队列 头指针、队列尾指针都是循环变化的。消息数组指向一个可以存放多条消 息的数组空间,具有一个最大消息数目的限制。每条消息具有固定的格式, 包含窗口句柄、消息类型、消息字参数、消息长参数等属性,其中窗口句 柄是指向消息的目标窗口的句柄,消息类型是指具体的一个消息代号、消 息字参数和消息长参数指向该消息的附加数据。系统提供了一系列的对消息队列进行操作的函数,如从消息队列中获取消息函数、将消息放进消息队列函数、清空消息队列函数、初始化消 息队列函数等。二、窗口窗口的目的主要是显示数据给用户查看,以方便操作。窗口具有各个 属性,包括大小、位置、界面、回调函数等。对窗口进行操作时首先要创 建窗口,在创建窗口时获得窗口的句柄,该句柄唯一指向该窗口。当窗口 创建成功后进入窗口消息循环,直到窗口被销毁关闭。在窗口消息循环过程中主要包含以下操作1、 接收消息队列中的消息通过调用从消息队列中获取消息的函数, 获取消息队列中的第一条消息。如果获取成功则执行第2步,如果失败则 执行第4步。2、 解析消息由于每条消息结构都包含了目的窗口的句柄,因此根据 接收到的消息,可以获取该句柄对应的窗口,从而获取该窗口的回调函数。3、 调用窗口回调函数进行处理该消息调用步骤2获取到的窗口回调 函数并根据消息的类型进行相关的操作。4、 判断键值缓冲区是否有数据输入,有则获取该数据,并且执行步骤 5,没有则继续消息循环。5、 通过调用键值转换消息函数,将获取的数据转换为对应消息,并且设置该消息的窗口句柄、消息字参数和消息长参数等属性。6、 通过调用发送消息函数或邮寄消息函数,将消息发送到消息队列中。三、窗口回调函数窗口回调函数是和每一个窗口相联系的。对于所有窗口都能够响应的 基本操作,则定义了一个窗口缺省回调函数,由该函数来处理这些普通消 息。当前窗口要对某消息进行特殊处理则只需要其窗口回调函数通过截获该消息,执行对应的操作即可,对于不需要特殊处理的消息则直接调用窗 口缺省回调函数来处理。 四、键值缓冲区
键值缓冲区是一个普通的内存缓冲区变量,用来保存输入的数据,当 定时器中断服务程序从指定的输入设备中获取到数据则将该数据发送到键 值缓冲区中去。如果一个数据被读出后,该数据值将从键值缓冲区中删除。 五、消息处理
消息处理包括了对消息进行各种各样操作的功能。如键值消息转换 函数、消息响应函数、发送消息函数、邮寄消息函数等。 六、定时器中断服务程序
该定时器中断程序每隔固定时间(如5ms)运行一次,其操作过程如

首先对指定的输入设备进行一次扫描,并判断该输入设备是否有数据 输入,如果有数据输入则获取该数据值并将该数据值写到键值缓冲区,并 退出程序。如果没有数据输入则退出程序。
指定的输入设备可以是键盘、鼠标等人机输入设备,也可以是串口、
USB 口等^够接收其它设备输入的端口,甚至可以是程序内部指定的一个
数据区等。
权利要求
1. 一种在嵌入式计算机系统上实现消息响应机制的方法,其特征在于嵌入式系统启动后,应用程序获取到控制权后,首先对系统进行初始化,在这个过程中初始化了一个定时器中断服务程序,并初始化了一个消息循环队列;该定时器中断服务程序每隔固定时间就对指定的输入设备进行一次扫描,当从该输入设备接收到一个数据值后,将该数据值写到输入值缓冲区中;当系统初始化过程完成后继续执行以下步骤步骤一根据显示需要创建窗口,设置窗口相关属性;步骤二执行新建立的窗口的消息循环函数,进入窗口消息循环,按下述步骤进行各种操作,直到窗口被销毁关闭;第1步,接收消息队列中的消息通过调用从消息队列中获取消息的函数,获取消息队列中的第一条消息;如果获取成功则执行第2步,如果失败则执行第4步;第2步,解析消息根据接收到的消息所包含的句柄获取对应的窗口,从而获取该窗口的回调函数;第3步,调用窗口回调函数,执行该消息对应的功能来处理该消息;第4步,判断输入值缓冲区是否有数据输入,有则获取该数据值,并且执行步骤5,没有数据输入则继续执行消息循环;第5步,通过调用输入值转换消息函数,将获取的数据值转换为对应消息,并且设置该消息的相关属性;第6步,通过调用发送消息函数或邮寄消息函数,将消息发送到消息队列中,继续执行消息循环。
2、按照权利要求1所述的一种在嵌入式计算机系统上实现消息响应机制的方法,其特征在于所述定时器中断服务程序每隔固定时间运行一次,其操作过程如下首先对指定的输入设备进行一次扫描,并判断该输入设备是否有 数据输入,如果有数据输入则获取该数据值并将该数据值写到输入值 缓冲区,然后退出程序,如果没有数据输入则退出程序。
全文摘要
本发明涉及计算机系统。所要解决的技术问题是在嵌入式系统上实现消息响应机制。其特征在于应用程序获取控制权后,首先对系统进行初始化,在这个过程中初始化了一个每隔固定时间就对指定输入设备进行一次扫描的定时器中断服务程序,并初始化了一个消息循环队列;当系统初始化过程完成后继续执行以下步骤步骤一根据显示需要创建窗口,设置窗口相关属性;步骤二执行新建立的窗口的消息循环函数,进入窗口消息循环,直到窗口被销毁关闭。本发明可以有效克服嵌入式系统原有结构化流程应用程序的弊端,降低了应用程序的层次深度,提高了应用程序的灵活性,使嵌入式系统的应用程序的维护性和扩充性得到大大增强。
文档编号G06F9/46GK101276296SQ20071003867
公开日2008年10月1日 申请日期2007年3月29日 优先权日2007年3月29日
发明者王文玲, 蔡向东, 袁仁翔 申请人:上海新跃仪表厂
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1