网站大量收购闲置独家精品文档,联系QQ:2885784924
  1. 1、本文档共41页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MiniGUI串口

目 前,嵌入式Linux 设备已广泛应用到计算机、通信和工业控制等领域,负责各种数据的处理和存储,并进行控制决策。MiniGUI 是一种面向嵌入式系统和实时系统的图形用户界面支持系统。在MiniGUI 环境下实现多个RS-232 串口通信,多串口实时协同工作,可满足许多工控和通信场合需要。该文实现平台为扩展了5 个串口的Intel PXA255 Sitsang 的嵌入式硬件平台以及基于嵌入式Linux2.4.19 的软件平台,采用MiniGUI 作为图形用户界面,在MiniGUI 的两个运行模式下设计并实现了多个串口的实时双工通信。 1  MiniGUI 及其两个运行模式 目前,在Linux 之上进行 实时 嵌入式系统开发,一般选择如下几种GUI 系统:紧缩的X Window 系统、MiniGUI、MicroWindows、OpenGUI、QT/Embedded 等。该文采用MiniGUI 1.3.0 版本作为系统GUI ,应用程序建立在图形界面和嵌入式Linux 内核之上。 MiniGUI 可以编译成两个截然不同的运行模式:一个是MiniGUI-Threads ,一个是MiniGUI-Lite 。MiniGUI-Threads 具有非常高的实时性,采用了线程机制。MiniGUI-Threads 的应用程序,可以具有多个线程,每个线程有不同的功能和任务,可以在不同的线程中建立多个窗口,但所有的窗口在一个进程或者地址空间中运行。不同的线程之 间可通过MiniGUI 的消息传递机制进行事件传送和同步。但显然,这种基于线程的结构也导致了系统整体的脆弱,如果某个线程因为非法的数据访问而终止运行,则整个进程都将受到 影响。不过,这种体系结构对实时控制系统等时间关键的系统来讲,还是非常适合的。为了改变Threads 版本体系上的脆弱, MiniGUI-Lite 版本使用进程机制。和MiniGUI-Threads 相反,MiniGUI-Lite 上的每个程序是单独的进程,每个进程也可以建立多个窗口。在Lite 版本中,可以同时运行多个MiniGUI 应用程序。首先需要启动一个服务器程序mginit ,然后启动其他作为客户端运行的MiniGUI 应用程序。如果因为某种原因客户终止,服务器不受影响,可以继续运行。 2  MiniGUI-Threads 下多线程串口通信   串口通信程序要做到实时性高,吞吐量大,程序的输出与输入是两个需要并发执行的操作,因此在MiniGUI-Threads 下采用多线程技术。在多串口的MiniGUI 环境下,通信程序至少应具备如下两个线程:主线程和串口*线程。主线程是串口通信程序的管理者,用来进行人机交互的操作、部分串口操作和数据处理及协调好 各线程运行;串口*线程的职责是实时*各个串口的状态,一旦发生预定的事件,需要判断是哪个串口有数据到来,然后进行一定的数据处理,并立即向主线程发送 相应消息,请求主线程对其进行相应处理。主线程在接到串口*线程发送来的消息后,立即调用相应的过程函数进行处理。串口通信程序可以在 MiniGUIMain 中通过CreateThreadForMainWindow 函数创建了两个并发的线程,定义线程的入口函数地址并返回线程标识符。 在主线程中配置termios 结构完成对串口的初始化操作,创建主窗口,建立控键并进入消息循环。*线程和主线程同时启动,此后串口*线程在后台对各个串口进行实时*,在*到预定事件 时,立即通过SendMessage 向主线程发送相应的消息。与此同时,主线程对*线程发送来的消息作出相应的处理,读取串口数据到缓冲区。主线程在处理完该消息后,串口*线程继续执行后面 的程序代码,对串口继续*。主线程还可以同时进行其他工作,比如接收或处理键盘、鼠标一类的消息,数据显示和响应控件事件等。 MiniGUI-Threads 下的SendMessage 的传递机制,可以用来发送“同步消息”。如果发送消息的线程和接收消息的线程不是同一个线程,发送消息的线程将阻塞并等待另一个线程的处理结果,然后继续 运行;如果发送消息的线程和接收消息的线程是同一个线程,则与MiniGUI-Lite 的SendMessage一样, 直接调用接收消息窗口的过程函数。 MiniGUI 定义了MSG_USER 宏,用户能够自定义消息,并利用自定义消息传递数据。应用程序可如下定义自己的消息: # define MSG_MYMESSAGE1 MSG_USER + 1 ; # define MSG_MYMESSAGE2 MSG_USER + 2 。 这种方式能有效防止数据的堵塞,避免线程出现死锁等情况的出现。MiniGUI-Threads 下串口通信程序过程如图1 所示。 图1  串口通信程序框图

文档评论(0)

tiangou + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档