当前位置:首页 > 嵌入式 > 嵌入式硬件

叙述了PC机与嵌入式计算机系统的多线程串行通信的实现。介绍了多线程设计思想的必要性,给出了程序设计流程。

  1、引言

  目前,先进的嵌入式计算机以其优良的品质、高可靠性及模块化,广泛地应用于工业控制、航空航天、医疗、智能仪表、通信、数控、自动化生产设备、数据采集等领域。在实际应用中,有时需要借助微机强大的数据处理能力和丰富的软件资源,使得组成的系统功能更为强大。这样,为了提升系统的整体性能,必须实现PC机和嵌入式计算机之间的通信。在导航仪生产管理中,由于串行通信具有连接简单、使用灵活方便、数据传递可靠等优点,采用串行通信方式进行数据下载。但由于Windows 95/98对系统底层操作采取了屏蔽的策略,不允许用户对硬件I/O口进行直接操作,进行串行通信只能通过调用API函数来完成;同时Windows 9x通过消息队列驱动管理程序,DOS中断服务例程在其下面也很难实现,且实时性和可靠性都得不到保证;因此通过多线程编程解决这一问题,且能提高数据传输的吞吐量和应用程序的可靠性。

  2、系统功能简介及基本结构

  本文以导航仪生产管理系统为背景进行论述。现场的嵌入式计算机给PC机上传所存储的信息,并从PC机上下载最新的版本信息。而嵌入式计算机发送回来的数据可以通过PC机的人机界面生动实时地向用户显示。系统基本结构如图1所示。PC机与嵌入式计算机(从机)之间按照RS-485协议连接。

  3、多线程串行通信实现流程

  3.1 用API函数实现串行通信的基本流程

  如图2所示,首先CreatFile()函数打开通信资源,之后配置通信资源属性由以下API函数完成:SetupComm()设置串行通信端口的输入和输出缓冲区的大小;通过设备控制块DCB修改和设置串口工作状态的参数,如波特率、数据位、奇偶校验位等通信参数,SetCommState()将DCB结构中的内容写入串口设置;SetCommTimeouts()设置串口读写操作的溢出时间。设置工作完成后串行通信可用ReadFile( )对通信资源进行读操作,WriteFile()进行写操作。

  串行通信结束时调用函数CloseHandle()来关闭CreateFile()函数返回的串口句柄。

  3.2 PC机的程序实现流程

  多线程的串口I/O通信编程中,将对串口的读、写操作视为同一进程的两个不同任务,创建读线程和写线程分别完成对串口的读、写操作;由于异步串行通信事件的随机性和实时性,要求通信线程优先于主线程被处理,所以设置各线程的优先级别如下:

  读线程的优先级>写线程的优先级>主线程的优先级。

  在PC机端,创建辅助线程实时监视串口通信状态,并由串口通信监视线程根据通信状态向主线程发送相应的消息,由主线程分析处理。多线程串行通信法的最大优点是程序对接收数据具有自主觉察能力,一旦辅助的通信监视线程查询到数据已经发送到串行口上,辅助线程自动接收数据后,向主线程发送数据接收到的消息,应用程序可根据该消息来处理通信串口传送过来的数据,并且采用通信监视线程不占用CPU时间。

  程序实现建立辅线程:串口读线程,完成串口通信操作,用来监视和管理串口通信的输入。读线程一直等待,从通信串口读取数据并传输给主线程处理。主线程除完成串口通信资源的打开、参数配置以及关闭的工作外,还要完成读线程的创建及关闭、多线程的协调、数据的中间处理与前端的人机交互等工作。

  图3为PC机的串口通信流程图。左边为主线程,右边为子线程。实线框内为用户界面的视类函数,虚线框内为通信类函数。用户通过VC设计的界面上的控件打开串口,并且发送数据。当对串口的参数设置完毕,串口成功打开的同时,子线程即接收线程开始运行。用户发送数据的同时,接收线程的控制函数也同时运行,当控制函数接收到读串口事件时,调用读串口函数,读取串口接收到的数据。子线程一直运行,也不断的读取接收到的数据,并显示在用户的界面上。当用户关闭串口,主线程要终止,此时子线程也收到主线程发送的关闭串口事件,终止线程,关闭串口。

  在实际通信过程中,由于干扰等原因,数据传输可能发生错误,因此还要加上实时错误处理以保证数据正常传输。这里不再赘述。

  3.3 嵌入式从机的程序实现流程

  在嵌入式从机部分,通信实现采用的是单线程,初始化设备之后等待通信数据,如果数据到达,则调用接收函数接收PC机数据,并将数据解析,返回结果向PC机发送数据。如果没有数据则继续等待。程序流程图如图4所示

  4、 结束语

  本文分析了多线程技术在实现PC机与单片机串口通信程序中的作用。通过两个通信线程并发执行,加以同步管理,应用程序能够在发送数据的同时接收数据,实时响应性强,高效可靠,有效地避免了数据丢失、程序锁死等问题。在实际应用中结果令人满意。

  参考文献:

  [1] Mark Nelson. 串行通信开发指南.潇湘工作室译.M. 北京:中国水利水电出版社,2000.
  [2]求是科技 谭思亮等.Visual C++串口通信工程开发实例导航.M.北京:人民邮电出版社,2001
  [3]李朝青. PC机与单片机数据通信技术.C. 北京:北京航空航天大学出版社,2001.

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

“实现机器人操作系统——电机控制器ROS1驱动程序简介”一文中概述了新型ADI Trinamic™电机控制器(TMC)驱动程序,并讨论了将电机控制器集成到机器人操作系统(ROS)生态系统中的方法。TMC ROS1驱动程序...

关键字: 电机控制器 机器人 嵌入式系统

台湾新竹 – 2024年4月23日 – 著名的微控制器供货商新唐科技公司,与全软件开发生命周期提供跨平台解决方案的全球软件公司Qt Group宣布深化合作,扩展新唐科技人机界面(HMI)平台支持「Qt for MCUs」...

关键字: 微控制器 嵌入式系统 MCU

上个月,爱立信刚刚传出“对中国区业务进行战略调整,研发岗大面积裁员”的消息。这几天,就有员工确认,爱立信“核心网”成为了此次裁员的“重灾区”。

关键字: 爱立信 通信

随着物联网、嵌入式系统以及微控制器技术的飞速发展,微控制器已成为众多智能设备和系统不可或缺的核心组件。而微控制器的正常工作,离不开烧录器的精准操作。C8051F021烧录器,作为一款高效、稳定、易用的微控制器烧录工具,在...

关键字: c8051f021烧录器 联网 嵌入式系统

为增进大家对嵌入式系统的认识,本文将对嵌入式系统、嵌入式系统的特点予以介绍。

关键字: 嵌入式 指数 嵌入式系统

2024年4月18日,国民技术第四代可信计算芯片NS350 v32/v33系列产品正式发布并开始量产供货。NS350 v32/v33是一款高安全、高性能、超值可信密码模块2.0 (TCM 2.0)安全芯片,适用于PC、服...

关键字: PC 服务器平台 嵌入式系统

2024年,嵌入式系统将走向何方?如何才能走在趋势的前沿?从工厂到家电,从医院里昂贵的医疗设备,到随处可见的可穿戴设备,我们身边的联网设备越来越多,生活更加绿色低碳,嵌入式系统功不可没。ST于3月19日成功举办STM32...

关键字: 嵌入式系统 可穿戴设备

在嵌入式系统开发、调试和测试过程中,J-Link作为一种高效的调试工具,为开发者提供了极大的便利。然而,要想充分发挥J-Link的功能,首先需要正确安装其驱动程序。本文将详细介绍J-Link驱动的安装过程,并深入解析其中...

关键字: jlink 嵌入式系统 嵌入式开发

与谷歌的合作使 Nordic 能够在 nRF Connect SDK 中嵌入开发人员软件,以构建与安卓移动设备兼容的谷歌Find My Device和未知跟踪器警报服务

关键字: 谷歌 SoC 嵌入式开发

设计工程师为了解决ISI问题,常常需要在链路损耗和均衡技术之间做出综合考虑。泰克的SDLA软件不仅可以模拟发送端的Tx EQ和接收端的Rx EQ,还能模拟传输链路的不同损耗。

关键字: 通信 示波器 测试测量
关闭
关闭