CN103365798A - 一种串口分时复用的方法及系统 - Google Patents

一种串口分时复用的方法及系统 Download PDF

Info

Publication number
CN103365798A
CN103365798A CN2013102636106A CN201310263610A CN103365798A CN 103365798 A CN103365798 A CN 103365798A CN 2013102636106 A CN2013102636106 A CN 2013102636106A CN 201310263610 A CN201310263610 A CN 201310263610A CN 103365798 A CN103365798 A CN 103365798A
Authority
CN
China
Prior art keywords
serial
serial ports
access
drives
application program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2013102636106A
Other languages
English (en)
Other versions
CN103365798B (zh
Inventor
朱涛
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201310263610.6A priority Critical patent/CN103365798B/zh
Publication of CN103365798A publication Critical patent/CN103365798A/zh
Priority to PCT/CN2014/074952 priority patent/WO2014206132A1/zh
Application granted granted Critical
Publication of CN103365798B publication Critical patent/CN103365798B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/10Program control for peripheral devices

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Transfer Systems (AREA)

Abstract

本发明实施例公开了一种串口分时复用的方法及系统。本发明涉及通信领域,通过在嵌入式操作系统中导出禁止接口、使能接口和提供一套第二串口驱动,实现当应用程序访问串口时,控制台停止访问串口;当应用程序停止访问串口时,控制台恢复访问串口,使得控制台和应用程序能够分时复用串口,避免了通信冲突。本发明实施例提供的方法包括:第一串口驱动导出禁止接口和使能接口;在应用程序需要访问串口时,第二串口驱动通过禁止接口通知控制台暂停访问串口,应用程序通过第二串口驱动访问串口;在应用程序不需要访问串口时,应用程序结束访问串口,第二串口驱动通过使能接口通知控制台恢复访问串口。

Description

一种串口分时复用的方法及系统
技术领域
本发明涉及通信领域,尤其涉及一种串口分时复用的方法及系统。
背景技术
串口具有简单易用的优点,例如:串口不需要额外的连线和设置IP等操作,使其成为嵌入式系统中一种常见的资源。
一般情况下,嵌入式系统启动后会占用串口,将该串口作为控制台使用。控制台会捕获从串口收到的数据并进行回显,同时还会将系统的打印信息输出到串口;当控制台运行在前台时,会将其从串口收到数据作为命令进行解析。在只有一个串口的嵌入式系统中,如果应用程序想通过该串口与嵌入式系统外的其他设备进行不受干扰的数据通信,则无法满足。在现有技术中,嵌入式系统可提供两个或两个以上的串口,这样有可能让控制台和应用程序使用不同的串口,但在芯片设计时,考虑到成本以及功耗等因素,也可能只会保留其中一个串口,因此,现有技术的局限性很大。
发明人发现现有技术至少存在以下问题:当嵌入式系统中只有一个串口时,该系统中的应用程序通过该串口与系统外的其他设备通信时会出现通信冲突。
发明内容
本发明实施例提供一种串口分时复用的方法及系统,通过在嵌入式操作系统中导出禁止接口、使能接口和提供一套第二串口驱动,实现当应用程序访问串口时,控制台停止访问串口;当应用程序停止访问串口时,控制台恢复访问串口,使得控制台和应用程序能够分时复用串口,避免了通信冲突。
为达到上述目的,本发明实施例采用的技术方案是,
第一方面,提供了一种串口分时复用的方法,应用于嵌入式操作系统,所述嵌入式操作系统包括:控制台、应用程序、第一串口驱动、第二串口驱动和一个串口,其中,所述第一串口驱动用于所述控制台访问所述串口,所述第二串口驱动用于所述应用程序访问所述串口;
该方法包括:
所述第一串口驱动导出禁止接口和使能接口,所述禁止接口用于禁止所述第一串口驱动访问所述串口,所述使能接口用于使能所述第一串口驱动访问所述串口;
在所述应用程序需要访问所述串口时,所述第二串口驱动通过所述禁止接口通知所述控制台暂停访问所述串口,所述应用程序通过所述第二串口驱动访问所述串口;
在所述应用程序不需要访问所述串口时,所述应用程序结束访问所述串口,所述第二串口驱动通过所述使能接口通知所述控制台恢复访问所述串口。
在第一种可能的实现方式中,根据第一方面,所述在所述应用程序需要访问所述串口时,所述第二串口驱动通过所述禁止接口通知所述控制台暂停访问所述串口,所述应用程序通过所述第二串口驱动访问所述串口,具体实现为:
所述应用程序根据用户的访问请求向所述第二串口驱动发送访问所述串口的请求;
所述第二串口驱动调用所述禁止接口并向所述第一串口驱动发送暂停所述控制台访问所述串口的通知;
所述第一串口驱动根据所述第二串口驱动发送的通知暂停访问所述串口;
所述应用程序通过所述第二串口驱动访问所述串口。
在第二种可能的实现方式中,结合第一种可能的实现方式,所述在所述应用程序不需要访问所述串口时,所述应用程序结束访问所述串口,所述第二串口驱动通过所述使能接口通知所述控制台恢复访问所述串口,具体实现为:
在用户停止访问所述应用程序时,所述应用程序通过所述第二串口驱动停止访问所述串口;
所述第二串口驱动调用所述使能接口并向所述第一串口驱动发送恢复所述控制台访问所述串口的通知;
所述第一串口驱动根据所述第二串口驱动发送的通知恢复访问所述串口。
在第三种可能的实现方式中,结合第一种可能的实现方式或第二种可能的实现方式,所述第二串口驱动内设置有互斥锁,
相应的,在所述第二串口驱动调用所述禁止接口并向所述第一串口驱动发送暂停所述控制台访问所述串口的通知之前,该方法还可以包括:
所述第二串口驱动检查所述互斥锁的状态;所述互斥锁的状态为未上锁或者上锁。
在第四种可能的实现方式中,结合第三种可能的实现方式,若所述互斥锁的状态为未上锁,该方法还包括:
所述第二串口驱动对所述互斥锁上锁,以实现所述应用程序通过所述第二串口驱动独占访问所述串口。
在第五种可能的实现方式中,结合第四种可能的实现方式,该方法还包括:
在所述应用程序不需要访问所述串口时,所述第二串口驱动在停止访问所述串口后,对所述互斥锁解锁。
在第六种可能的实现方式中,结合第三种可能的实现方式,若所述互斥锁的状态为上锁,该方法还包括:
所述第二串口驱动向所述应用程序返回访问失败信息。
在第七种可能的实现方式中,结合第一方面或第一种可能的实现方式或第二种可能的实现方式或第三种可能的实现方式或第四种可能的实现方式或第五种可能的实现方式或第六种可能的实现方式,所述第二串口驱动设置有写串口数据接口和读串口数据接口,相应的,
所述第二串口驱动用于所述应用程序访问所述串口,包括:
所述第二串口驱动通过所述写串口数据接口完成所述应用程序对所述串口的写访问操作;
所述第二串口驱动通过所述读串口数据接口完成所述应用程序对所述串口的读访问操作。
在第八种可能的实现方式中,结合第七种可能的实现方式,所述第二串口驱动通过所述写串口数据接口完成所述应用程序对所述串口的写访问操作,具体实现为:
当所述第二串口驱动向所述串口写数据时,所述第二串口驱动检查所述串口的发送先入先出队列FIFO是否已满,如果所述发送FIFO已满,所述第二串口驱动等待发送FIFO有空位时再向所述串口发送数据;如果所述发送FIFO未满,所述第二串口驱动向所述串口直接发送数据。
在第九种可能的实现方式中,结合第八种可能的实现方式,所述第二串口驱动通过所述读串口数据接口完成所述应用程序对所述串口的读访问操作,具体实现为:
所述第二串口驱动根据所述串口的接收中断来获取所述串口数据,接收中断处理函数将收到的所述串口数据保存到所述循环缓冲队列里;
所述应用程序调用所述第二串口驱动的所述读串口数据接口直接从所述循环缓冲队列里取所述串口数据。
第二方面,提供了一种嵌入式操作系统,所述系统包括:控制台、应用程序、第一串口驱动、第二串口驱动和一个串口,其中,所述第一串口驱动用于所述控制台访问所述串口,所述第二串口驱动用于所述应用程序访问所述串口;
所述第一串口驱动还用于:导出禁止接口和使能接口,所述禁止接口用于禁止所述第一串口驱动访问所述串口,所述使能接口用于使能所述第一串口驱动访问所述串口;
所述应用程序还用于:在所述应用程序需要访问所述串口时,通过所述第二串口驱动访问所述串口;在所述应用程序不需要访问所述串口时,结束访问所述串口;
所述第二串口驱动还用于:在所述应用程序需要访问所述串口时,通过所述禁止接口通知所述控制台暂停访问所述串口;在所述应用程序不需要访问所述串口时,通过所述使能接口通知所述控制台恢复访问所述串口。
在第一种可能的实现方式中,根据第二方面,
所述应用程序还用于:根据用户的访问请求向所述第二串口驱动发送访问所述串口的请求;通过所述第二串口驱动访问所述串口;
所述第二串口驱动还用于:调用所述禁止接口并向所述第一串口驱动发送暂停所述控制台访问所述串口的通知;
所述第一串口驱动还用于:根据所述第二串口驱动发送的通知暂停访问所述串口。
在第二种可能的实现方式中,结合第一种可能的实现方式,
所述应用程序还用于:在用户停止访问所述应用程序时,通过所述第二串口驱动停止访问所述串口;
所述第二串口驱动还用于:调用所述使能接口并向所述第一串口驱动发送恢复所述控制台访问所述串口的通知;
所述第一串口驱动还用于:根据所述第二串口驱动发送的通知恢复访问所述串口。
在第三种可能的实现方式中,结合第一种可能的实现方式或第二种可能的实现方式,所述第二串口驱动内设置有互斥锁,
所述第二串口驱动还用于:检查所述互斥锁的状态;所述互斥锁的状态为未上锁或者上锁。
在第四种可能的实现方式中,结合第三种可能的实现方式,若所述互斥锁的状态为未上锁,
所述第二串口驱动还用于:对所述互斥锁上锁,以实现所述应用程序通过所述第二串口驱动独占访问所述串口。
在第五种可能的实现方式中,结合第四种可能的实现方式,
所述第二串口驱动还用于:在所述应用程序不需要访问所述串口时,所述第二串口驱动在停止访问所述串口后,对所述互斥锁解锁。
在第六种可能的实现方式中,结合第三种可能的实现方式,若所述互斥锁的状态为上锁,
所述第二串口驱动还用于:向所述应用程序返回访问失败信息。
在第七种可能的实现方式中,结合第二方面或第一种可能的实现方式或第二种可能的实现方式或第三种可能的实现方式或第四种可能的实现方式或第五种可能的实现方式或第六种可能的实现方式,所述第二串口驱动设置有写串口数据接口和读串口数据接口,相应的,
所述第二串口驱动还用于:通过所述写串口数据接口完成所述应用程序对所述串口的写访问操作;通过所述读串口数据接口完成所述应用程序对所述串口的读访问操作。
在第八种可能的实现方式中,结合第七种可能的实现方式,
所述第二串口驱动还用于:当所述第二串口驱动向所述串口写数据时,检查所述串口的发送先入先出队列FIFO是否已满,如果所述发送FIFO已满,等待发送FIFO有空位时再向所述串口发送数据;如果所述发送FIFO未满,向所述串口直接发送数据。
在第九种可能的实现方式中,结合第八种可能的实现方式,
所述第二串口驱动还用于:根据所述串口的接收中断来获取所述串口数据,接收中断处理函数将收到的所述串口数据保存到所述循环缓冲队列里;
所述应用程序还用于:调用所述第二串口驱动的所述读串口数据接口直接从所述循环缓冲队列里取所述串口数据。
本发明实施例提供的一种串口分时复用的方法及系统,通过在嵌入式操作系统中导出禁止接口、使能接口和提供一套第二串口驱动,实现当应用程序访问串口时,控制台停止访问串口;当应用程序停止访问串口时,控制台恢复访问串口,使得控制台和应用程序能够分时复用串口,避免了通信冲突。克服了现有技术中当嵌入式系统中只有一个串口时,该系统中的应用程序通过该串口与系统外的其他设备通信时会出现通信冲突的缺陷。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种硬件装置示意图;
图2为本发明实施例提供的一种软件结构示意图;
图3为本发明实施例提供的另一种软件结构示意图;
图4为本发明实施例提供的一种串口分时复用的方法的流程示意图;
图5为本发明实施例提供的另一种串口分时复用的方法的流程示意图;
图6为本发明实施例提供的一种循环缓冲队列的示意图;
图7为本发明实施例提供的一种嵌入式操作系统示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
一方面,本发明实施例提供一种串口分时复用的方法,示例性的,本发明实施例的方法可以应用嵌入式操作系统。串口是嵌入式系统中一种十分常见的资源,用于与嵌入式操作系统的外部设备进行数据传输。例如,参见图1,为一种嵌入式操作系统与个人计算机(Personal Computer,简称PC)之间进行数据传输的硬件装置图,包括单板(单板上运行的操作系统为嵌入式操作系统)和PC,该单板上安装有中央处理器(Central ProcessingUnit,简称CPU)、内存等芯片,CPU对外引出了一个串口;PC上安装有CPU、内存等芯片,CPU对外引出了一个串口;单板上的串口与PC上的串口通过串口线相连。
参见图2,为现有技术中一种与图1所示硬件结构图对应的软件结构示意图,该图中的嵌入式操作系统为Linux操作系统,该Linux操作系统包括控制台、应用程序以及通用串口驱动(Common Uart Driver,简称CUD);PC上运行的操作系统为窗口(Windows)操作系统,该Windows操作系统包括串口工具;Linux操作系统的控制台和应用程序通过CUD访问串口。
嵌入式操作系统一般默认情况下,启动后就会将串口供控制台使用,与PC之间进行数据通信。控制台会捕获从串口收到的数据并进行回显,同时还会将嵌入式操作系统的打印信息输出到串口。当控制台运行在前台时,还会将其从串口收到数据作为命令进行解析。
在只有一个串口的嵌入式系统中,应用程序与控制台使用串口进行通信容易产生冲突问题,导致应用程序无法通过该串口与嵌入式系统外的其他设备(如PC)进行不受干扰的数据通信。因为控制台在整个操作系统运行期间都会不断读取串口的数据并回显,同时随时有可能向串口输出数据,所以当应用程序通过串口与嵌入式系统外的PC进行通信时,PC很难收到一个不受干扰的串口数据包,这将导致通信过程紊乱。
为了解决现有技术应用程序与控制台使用串口进行通信的冲突问题,本发明实施例应用的嵌入式操作系统的软件示意图如图3所示,本发明实施例应用的嵌入式操作系统以Linux操作系统为例进行说明,但本发明对此不进行限制,该Linux操作系统包括控制台、应用程序以及第一串口驱动和第二串口驱动,第一串口驱动用于控制台访问串口,第二串口驱动用于应用程序访问串口。示例性的,第一串口驱动可以为现有技术中的CUD。
参见图4,为本发明实施例提供的一种串口分时复用的方法,该方法包括:
401:第一串口驱动导出禁止接口和使能接口,禁止接口用于禁止第一串口驱动访问串口,使能接口用于使能第一串口驱动访问串口;
402:在应用程序需要访问串口时,第二串口驱动通过禁止接口通知控制台暂停访问串口,应用程序通过第二串口驱动访问串口;
示例性的,在应用程序需要访问串口时,第二串口驱动通过禁止接口通知控制台暂停访问串口,应用程序通过第二串口驱动访问串口,可以包括:
应用程序根据用户的访问请求向第二串口驱动发送访问串口的请求;
第二串口驱动调用禁止接口并向第一串口驱动发送暂停控制台访问串口的通知;
第一串口驱动根据第二串口驱动发送的通知暂停访问串口;
应用程序通过第二串口驱动访问串口。
403:在应用程序不需要访问串口时,应用程序结束访问串口,第二串口驱动通过使能接口通知控制台恢复访问串口。
示例性的,在应用程序不需要访问串口时,应用程序结束访问串口,第二串口驱动通过使能接口通知控制台恢复访问串口,可以包括:
在用户停止访问应用程序时,应用程序通过第二串口驱动停止访问串口;
第二串口驱动调用使能接口并向第一串口驱动发送恢复控制台访问串口的通知;
第一串口驱动根据第二串口驱动发送的通知恢复访问串口。
所以,本发明实施例提供的一种串口分时复用的方法,通过在嵌入式操作系统中导出禁止接口、使能接口和提供一套第二串口驱动,实现当应用程序访问串口时,控制台停止访问串口;当应用程序停止访问串口时,控制台恢复访问串口,使得控制台和应用程序能够分时复用串口,避免了通信冲突。克服了现有技术中当嵌入式系统中只有一个串口时,该系统中的应用程序通过该串口与系统外的其他设备通信时会出现通信冲突的缺陷。
进一步的,为了实现每个应用程序能够独占的使用第二串口驱动,该第二串口驱动内设置有互斥锁,
相应的,在第二串口驱动调用禁止接口并向第一串口驱动发送暂停控制台访问串口的通知之前,该方法还可以包括:
第二串口驱动检查互斥锁的状态;该互斥锁的状态为未上锁或者上锁。
进一步的,若该互斥锁的状态为未上锁,该方法还可以包括:
第二串口驱动对该互斥锁上锁,以实现应用程序通过第二串口驱动独占访问串口。
进一步的,该方法还可以包括:
在应用程序不需要访问所述串口时,第二串口驱动在停止访问串口后,对该互斥锁解锁。
进一步的,若该互斥锁的状态为上锁,该方法还可以包括:
第二串口驱动向应用程序返回访问失败信息。
进一步的,第二串口驱动设置有写串口数据接口和读串口数据接口,相应的,
第二串口驱动用于应用程序访问串口,包括:
第二串口驱动通过写串口数据接口完成应用程序对串口的写访问操作;
第二串口驱动通过读串口数据接口完成应用程序对串口的读访问操作。
示例性的,第二串口驱动通过写串口数据接口完成应用程序对串口的写访问操作,包括:
当第二串口驱动向串口写数据时,第二串口驱动检查串口的发送先入先出队列FIFO是否已满,如果发送FIFO已满,第二串口驱动等待发送FIFO有空位时再向串口发送数据;如果发送FIFO未满,第二串口驱动向串口直接发送数据。
示例性的,第二串口驱动通过读串口数据接口完成应用程序对串口的读访问操作,包括:
第二串口驱动根据串口的接收中断来获取串口数据,接收中断处理函数将收到的串口数据保存到循环缓冲队列里;
应用程序调用第二串口驱动的读串口数据接口直接从循环缓冲队列里取串口数据。
下面通过具体实施例对上述方法实施例进行说明。
参见图5,为本实施例提供的另一种串口分时复用的方法的流程示意图,如图所示,可以包括以下步骤:
501:第一串口驱动导出禁止接口和使能接口,禁止接口用于禁止第一串口驱动访问串口,使能接口用于使能第一串口驱动访问串口;
示例性的,当第一串口驱动为现有技术中的CUD时,该禁止接口和使能接口可以为现有的嵌入式操作系统中的禁止CUD接口和使能CUD接口,但是本发明实施例对此不进行限制。
示例性的,本发明实施例中的使能接口可以为“uart_startup”,禁止接口可以为“uart_shutdown”,在现有技术中,“uart_startup”和“uart_shutdown”均定义为静态(static)函数,不能被其他模块调用。可以采用将静态(static)函数修改为非静态函数的方法,使其能被其他模块调用。本发明实施例采用将“uart_startup”和“uart_shutdown”前面的static删除,然后使用“EXPORT_SYMBOL_GPL”分别将其导出,使得其他模块可以调用使能接口和禁止接口,但本发明实施例对此不进行限制。
例如,导出使能接口和禁止接口的方法可以为:
-static int uart_startup(struct tty_struct*tty,struct uart_state*state,intinit_hw)
+int uart_startup(struct tty_struct*tty,struct uart_state*state,int init_hw)
+EXPORT_SYMBOL_GPL(uart_startup);
-static void uart_shutdown(struct tty_struct*tty,struct uart_state*state)
+void uart_shutdown(struct tty_struct*tty,struct uart_state*state)
+EXPORT_SYMBOL_GPL(uart_shutdown);
502:应用程序根据用户的访问请求向第二串口驱动发送访问串口的请求;
示例性的,这里的应用程序可以为嵌入到该嵌入式操作系统中的任意一个应用程序。
示例性的,第二串口驱动可以为独占串口驱动(Monopolize UartDriver,简称MUD),若MUD使用串口时,本发明实施例将该串口称为独占串口设备;若CUD使用串口时,本发明实施例将该串口称为通用串口设备。
应用程序通过MUD访问串口的过程为,该应用程序首先打开独占串口设备,如果Linux操作系统中的其它应用程序正在访问串口,则打开操作失败,则应用程序访问串口请求失败;如果Linux操作系统中没有其它应用程序访问该串口,则打开独占串口设备操作成功,然后设置串口的参数,例如:波特率、读超时时间,在设置完串口参数后,应用程序就可以读写串口数据,当应用程序停止访问串口时,关闭独占串口设备。
示例性的,该MUD可设计成字符设备驱动,其中,字符设备驱动用于处理发送或接收的数据为字符的形式,MUD需要向应用程序提供的接口如下表所示:
接口 说明
open 打开独占串口设备
ioctl(CMD GET BAUDRATE) 获取串口的波特率
ioctl(CMD SET BAUDRATE) 设置串口的波特率
ioctl(CMD SET TIMEOUT) 设置读串口数据的超时
read 从串口读取数据
write 向串口写入数据
close 关闭独占串口设备
示例性的,应用程序根据用户的访问请求向MUD发送访问串口请求时,需要通过上述open接口来打开独占串口设备,MUD为应用程序独占串口定义了一个互斥锁(mono_available),该open接口在执行打开独占串口设备操作之前,会检查MUD中的互斥锁(mono_available)的状态,如果Linux操作系统中的其它某个应用程序正在访问串口,互斥锁(mono_available)为上锁状态,就返回失败信息;如果该open接口发现该互斥锁(mono_available)未上锁,则打开独占串口设备成功,该应用程序独占访问串口并对互斥锁(mono_available)上锁,open接口通知CUD暂停访问串口,然后注册串口接收中断的处理函数,再设置串口参数的缺省值,例如:波特率设置为115200,数据位设置为8,停止位设置为1,校验位和流控制均不进行设置。
示例性的,上述其它接口的具体实现方法如下说明:
1、ioctl(CMD_GET_BAUDRATE)接口
ioctl(CMD_GET_BAUDRATE)接口用于获取串口的波特率。串口的波特率保存在MUD的一个全局变量中,因此,直接将该全局变量的值返回给应用程序。
2、ioctl(CMD_SET_BAUDRATE)接口
ioctl(CMD_GET_BAUDRATE)接口用于修改串口的波特率。在修改波特率前需要将串口禁用,然后再进行修改波特率,修改完波特率之后再将串口使能。
3、ioctl(CMD_SET_TIMEOUT)接口
ioctl(CMD_SET_TIMEOUT)接口用于设置应用程序从循环缓冲(buffer)队列取数据的超时时间,如果在设置的时间内循环buffer队列里始终没有数据,则read接口超时返回,该read接口将在下述第4个接口进行说明。
4、read接口
read接口用于从循环缓冲(buffer)队列里取数据,具体原理将在本实施例505进行详细说明。
5、write接口
write接口用于向串口写数据,具体原理将在本实施例505进行详细说明。
6、close接口
close接口首先会注销串口接收中断的处理函数,并通知CUD恢复访问串口。
close接口在执行完上述功能操作后,还会对互斥锁(mono_available)进行解锁,以便其他应用程序也可以使用串口。
503:MUD调用禁止接口并向CUD发送暂停控制台访问串口的通知;
示例性的,当有应用程序需要访问串口时,MUD调用禁止接口并向CUD发送暂停控制台访问串口的通知,以使得控制台停止访问串口。
示例性的,在现有技术中,控制台访问串口存在一种特殊情况,即:当控制台向串口输出数据时,不论当前CUD有没有被禁止,该控制台都会先保存CUD当前的状态,然后使能接口,再向串口发送数据,待数据发送完毕后再将CUD恢复成之前保存的状态。
针对该特殊情况,可以在该Linux操作系统中增加一个标识符,当MUD访问串口时,将该标识符置为TRUE;当MUD不需要使用串口时,将该标识符置为FALSE。当控制台向串口写数据前,先检查该标识符的状态,如果该标识符为TRUE,控制台不向串口写数据;如果该标识符为FALSE,控制台向串口写入数据。
示例性的,在本发明实施例中,MUD中是否使用串口的标识符可以为“monoflag”,设置“monoflag”标识符状态的函数可以为“pl011_set_monoflag”,控制台向串口输出数据的函数可以为“pl011_console_write”,在该函数的入口处判断“monoflag”标识符是否为TRUE,如果该“monoflag”标识符为TRUE,控制台不访问串口;如果该“monoflag”标识符为FALSE,控制台可以访问串口。
例如,具体的增加该标识符的方法可以为:
Figure BDA00003421022200141
示例性的,“monoflag”标识符的状态由open接口和close接口来设置,当某个应用程序打开独占串口设备前,如果该open接口发现互斥锁(mono_available)未上锁,则打开独占串口设备成功,应用程序独占访问串口并对互斥锁(mono_available)上锁,该open接口将“monoflag”标识符置为TRUE;当应用程序要关闭独占串口设备时,该close接口将“monoflag”标识符置为FALSE。
504:CUD根据MUD发送的通知暂停访问所述串口;
505:应用程序通过MUD访问串口;
示例性的,MUD中设置write接口和read接口,MUD通过write接口完成应用程序对串口的写访问操作,MUD通过read接口完成应用程序对串口的读访问操作。
示例性的,read接口用于从循环缓冲(buffer)队列里取数据,MUD依靠串口的接收中断来获取串口数据,在接收中断处理函数中将收到的数据保存到一个循环缓冲(buffer)队列里,而应用程序则调用read接口直接从循环缓冲(buffer)队列里取数据。
如图6,为本发明实施例提供的一种循环缓冲队列的示意图,如图所示,当MUD收到串口数据时,会先将数据写入MUD写(write)指针指向的缓冲(buffer)位置,然后再将写(write)指针后移一位,如果移动指针前MUD写(write)指针已经指向了队尾,则将MUD写(write)指针指向队头;当应用程序从串口读数据时,会先将MUA读(read)指针指向的缓冲(buffer)读出来,然后再将MUA读(read)指针后移一位,如果移动指针前MUA读(read)指针已经指向了队尾,则将MUA读(read)指针指向队头。
示例性的,write接口用于向串口写数据,当MUD需要向串口发送数据时,首先检查串口的发送先进先出(First Input First Output,简称FIFO)队列是否已满,如果已满,则MUD等待发送FIFO有空位时再发送;如果FIFO有空位时,则MUD直接向串口发送数据。
506:在用户停止访问应用程序时,应用程序通过MUD停止访问串口;
示例性的,在用户停止访问应用程序时,应用程序将该用户停止访问应用程序的请求发送给MUD,MUD根据接收到的停止访问请求停止访问串口。
507:MUD调用使能接口并向CUD发送恢复控制台访问串口的通知;
示例性的,MUD调用使能接口并向CUD发送恢复控制台访问串口的通知,可以包括:
MUD中的close接口首先会注销串口接收中断的处理函数,然后将“monoflag”标识符置为FALSE,并通知CUD恢复访问串口;
close接口对互斥锁(mono_available)进行解锁,以便嵌入式操作系统中的其它应用程序可以独占串口。
508:CUD根据MUD发送的通知恢复访问串口。
本发明实施例提供的一种串口分时复用的方法,通过在嵌入式操作系统中导出禁止接口、使能接口和提供一套第二串口驱动,实现当应用程序访问串口时,控制台停止访问串口;当应用程序停止访问串口时,控制台恢复访问串口,使得控制台和应用程序能够分时复用串口,避免了通信冲突。克服了现有技术中当嵌入式系统中只有一个串口时,该系统中的应用程序通过该串口与系统外的其他设备通信时会出现通信冲突的缺陷。
另一方面,本发明实施例提供一种应用嵌入式操作系统。串口是嵌入式系统中一种十分常见的资源,用于与嵌入式操作系统的外部设备进行数据传输。例如,参见图1,为一种嵌入式操作系统与个人计算机(PersonalComputer,简称PC)之间进行数据传输的硬件装置图,包括单板(单板上运行的操作系统为嵌入式操作系统)和PC,该单板上安装有中央处理器(Central Processing Unit,简称CPU)、内存等芯片,CPU对外引出了一个串口;PC上安装有CPU、内存等芯片,CPU对外引出了一个串口;单板上的串口与PC上的串口通过串口线相连。
参见图2,为现有技术中一种与图1所示硬件结构图对应的软件结构示意图,该图中的嵌入式操作系统为Linux操作系统,该Linux操作系统包括控制台、应用程序以及通用串口驱动(Common Uart Driver,简称CUD);PC上运行的操作系统为Windows操作系统,该Windows操作系统包括串口工具;Linux操作系统的控制台和应用程序通过CUD访问串口。
嵌入式操作系统一般默认情况下,启动后就会将串口供控制台使用,与PC之间进行数据通信。控制台会捕获从串口收到的数据并进行回显,同时还会将嵌入式操作系统的打印信息输出到串口。当控制台运行在前台时,还会将其从串口收到数据作为命令进行解析。
在只有一个串口的嵌入式系统中,应用程序与控制台使用串口进行通信容易产生冲突问题,导致应用程序无法通过该串口与嵌入式系统外的其他设备(如PC)进行不受干扰的数据通信。因为控制台在整个操作系统运行期间都会不断读取串口的数据并回显,同时随时有可能向串口输出数据,所以当应用程序通过串口与嵌入式系统外的PC进行通信时,PC很难收到一个不受干扰的串口数据包,这将导致通信过程紊乱。
参见图7,为本发明实施例提供的一种嵌入式操作系统,如图所示,嵌入式操作系统70包括:控制台701、应用程序702、第一串口驱动703、第二串口驱动704和一个串口705,其中,第一串口驱动703用于控制台701访问串口705,第二串口驱动704用于应用程序702访问串口705;
第一串口驱动703用于:导出禁止接口和使能接口,禁止接口用于禁止第一串口驱动703访问串口705,使能接口用于使能第一串口驱动703访问串口705;
应用程序702用于:在应用程序702需要访问串口705时,通过第二串口驱动704访问串口705;在应用程序702不需要访问串口705时,结束访问串口705;
第二串口驱动704还用于:在应用程序702需要访问串口705时,通过禁止接口通知控制台701暂停访问串口705;在应用程序702不需要访问串口705时,通过使能接口通知控制台701恢复访问串口705。
示例性的,第一串口驱动703可以为现有技术中的CUD。
示例性的,这里的应用程序702可以为嵌入到该嵌入式操作系统70中的任意一个应用程序702。
示例性的,当第一串口驱动703为现有技术中的CUD时,该禁止接口和使能接口可以为现有的嵌入式操作系统中的禁止CUD接口和使能CUD接口,但是本发明实施例对此不进行限制。
示例性的,本发明实施例中的使能接口可以为“uart_startup”,禁止接口可以为“uart_shutdown”,在现有技术中,“uart_startup”和“uart_shutdown”均定义为静态(static)函数,不能被其他模块调用。可以采用将静态(static)函数修改为非静态函数的方法,使其能被其他模块调用。本发明实施例采用将“uart_startup”和“uart_shutdown”前面的static删除,然后使用“EXPORT_SYMBOL_GPL”分别将其导出,使得其他模块可以调用使能接口和禁止接口,但本发明实施例对此不进行限制。
例如,导出使能接口和禁止接口的方法可以为:
-static int uart_startup(struct tty_struct*tty,struct uart_state*state,intinit_hw)
+int uart_startup(struct tty_struct*tty,struct uart_state*state,int init_hw)
+EXPORT_SYMBOL_GPL(uart_startup);
-static void uart_shutdown(struct tty_struct*tty,struct uart_state*state)
+void uart_shutdown(struct tty_struct*tty,struct uart_state*state)
+EXPORT_SYMBOL_GPL(uart_shutdown);
示例性的,应用程序702还可以用于:根据用户的访问请求向第二串口驱动704发送访问串口705的请求;通过第二串口驱动704访问串口705;
第二串口驱动704还可以用于:调用禁止接口并向第一串口驱动703发送暂停控制台701访问串口705的通知;
第一串口驱动703还可以用于:根据第二串口驱动704发送的通知暂停访问串口705。
示例性的,第二串口驱动704可以为独占串口驱动(Monopolize UartDriver,简称MUD),若MUD使用串口705时,本发明实施例将该串口705称为独占串口设备;若CUD使用串口705时,本发明实施例将该串口705称为通用串口设备。
应用程序702通过MUD访问串口705的过程为,该应用程序702首先打开独占串口设备,如果Linux操作系统中的其它应用程序702正在访问串口705,则打开操作失败,则应用程序702访问串口705请求失败;如果Linux操作系统中没有其它应用程序702访问该串口705,则打开独占串口设备操作成功,然后设置串口705的参数,例如:波特率、读超时时间,在设置完串口参数后,应用程序702就可以读写串口数据,当应用程序702停止访问串口时,关闭独占串口设备。
示例性的,该MUD可设计成字符设备驱动,其中,字符设备驱动用于处理发送或接收的数据为字符的形式,MUD需要向应用程序702提供的接口如下表所示:
接口 说明
open 打开独占串口设备
ioctl(CMD_GET_BAUDRATE) 获取串口的波特率
ioctl(CMD SET BAUDRATE) 设置串口的波特率
ioctl(CMD SET TIMEOUT) 设置读串口数据的超时时间
read 从串口读取数据
write 向串口写入数据
close 关闭独占串口设备
示例性的,应用程序702根据用户的访问请求向MUD发送访问串口705请求时,需要通过上述open接口来打开独占串口设备,MUD为应用程序702独占串口705定义了一个互斥锁(mono_available),该open接口在执行打开独占串口设备操作之前,会检查MUD中的互斥锁(mono_available)的状态,如果Linux操作系统中的其它某个应用程序702正在访问串口,互斥锁(mono_available)为上锁状态,就返回失败信息;如果该open接口发现该互斥锁(mono_available)未上锁,则打开独占串口设备成功,该应用程序702独占访问串口705并对互斥锁(mono_available)上锁,open接口通知CUD暂停访问串口705,然后注册串口接收中断的处理函数,再设置串口参数的缺省值,例如:波特率设置为115200,数据位设置为8,停止位设置为1,校验位和流控制均不进行设置。
示例性的,上述其它接口的具体实现方法如下说明:
1、ioctl(CMD_GET_BAUDRATE)接口
ioctl(CMD_GET_BAUDRATE)接口用于获取串口705的波特率。串口705的波特率保存在MUD的一个全局变量中,因此,直接将该全局变量的值返回给应用程序702。
2、ioctl(CMD_SET_BAUDRATE)接口
ioctl(CMD_GET_BAUDRATE)接口用于修改串口705的波特率。在修改波特率前需要将串口705禁用,然后再进行修改波特率,修改完波特率之后再将串口705使能。
3、ioctl(CMD_SET_TIMEOUT)接口
ioctl(CMD_SET_TIMEOUT)接口用于设置应用程序702从循环缓冲(buffer)队列取数据的超时时间,如果在设置的时间内循环buffer队列里始终没有数据,则read接口超时返回,该read接口将在下述第4个接口进行说明。
4、read接口
read接口用于从循环缓冲(buffer)队列里取数据,具体原理将在方法实施例505进行详细说明。
5、write接口
write接口用于向串口705写数据,具体原理将在方法实施例505进行详细说明。
6、close接口
close接口首先会注销串口705接收中断的处理函数,并通知CUD恢复访问串口705。
close接口在执行完上述功能操作后,还会对互斥锁(mono_available)进行解锁,以便其他应用程序702也可以使用串口705。
示例性的,当有应用程序702需要访问串口705时,MUD调用禁止接口并向CUD发送暂停控制台701访问串口705的通知,以使得控制台701停止访问串口705。
示例性的,在现有技术中,控制台701访问串口705存在一种特殊情况,即:当控制台701向串口705输出数据时,不论当前CUD有没有被禁止,该控制台701都会先保存CUD当前的状态,然后使能接口,再向串口705发送数据,待数据发送完毕后再将CUD恢复成之前保存的状态。
针对该特殊情况,可以在该Linux操作系统中增加一个标识符,当MUD访问串口705时,将该标识符置为TRUE;当MUD不需要使用串口705时,将该标识符置为FALSE。当控制台701向串口705写数据前,先检查该标识符的状态,如果该标识符为TRUE,控制台701不向串口705写数据;如果该标识符为FALSE,控制台701向串口705写入数据。
示例性的,在本发明实施例中,MUD中是否使用串口705的标识符可以为“monoflag”,设置“monoflag”标识符状态的函数可以为“pl011_set_monoflag”,控制台701向串口705输出数据的函数可以为“pl011_console_write”,在该函数的入口处判断“monoflag”标识符是否为TRUE,如果该“monoflag”标识符为TRUE,控制台701不访问串口705;如果该“monoflag”标识符为FALSE,控制台701可以访问串口705。
例如,具体的增加该标识符的方法可以为:
Figure BDA00003421022200211
示例性的,“monoflag”标识符的状态由open接口和close接口来设置,当某个应用程序702打开独占串口设备前,如果该open接口发现互斥锁(mono_available)未上锁,则打开独占串口设备成功,应用程序702独占访问串口并对互斥锁(mono_available)上锁,该open接口将“monoflag”标识符置为TRUE;当应用程序702要关闭独占串口设备时,该close接口将“monoflag”标识符置为FALSE。
示例性的,MUD中设置write接口和read接口,MUD通过write接口完成应用程序702对串口705的写访问操作,MUD通过read接口完成应用程序702对串口705的读访问操作。
示例性的,read接口用于从循环缓冲(buffer)队列里取数据,MUD依靠串口705的接收中断来获取串口705数据,在接收中断处理函数中将收到的数据保存到一个循环缓冲(buffer)队列里,而应用程序702则调用read接口直接从循环缓冲(buffer)队列里取数据。
如图6,为本发明实施例提供的一种循环缓冲队列的示意图,如图所示,当MUD收到串口数据时,会先将数据写入MUD写(write)指针指向的缓冲(buffer)位置,然后再将写(write)指针后移一位,如果移动指针前MUD写(write)指针已经指向了队尾,则将MUD写(write)指针指向队头;当应用程序从串口705读数据时,会先将MUA读(read)指针指向的缓冲(buffer)读出来,然后再将MUA读(read)指针后移一位,如果移动指针前MUA读(read)指针已经指向了队尾,则将MUA读(read)指针指向队头。
示例性的,write接口用于向串口705写数据,当MUD需要向串口705发送数据时,首先检查串口705的发送先进先出(First Input First Output,简称FIFO)队列是否已满,如果已满,则MUD等待发送FIFO有空位时再发送;如果FIFO有空位时,则MUD直接向串口705发送数据。
示例性的,应用程序702还可以用于:在用户停止访问时,通过第二串口驱动704停止访问串口705;
第二串口驱动704还可以用于:调用使能第一串口驱动703的接口并向第一串口驱动703发送恢复控制台701访问串口705的通知;
第一串口驱动703还可以用于:根据第二串口驱动704发送的通知恢复访问串口705。
示例性的,在用户停止访问应用程序702时,应用程序702将该用户停止访问应用程序702的请求发送给MUD,MUD根据接收到的停止访问请求停止访问串口705。
示例性的,MUD用于:注销串口705接收中断的处理函数,然后将“monoflag”标识符置为FALSE,并通知CUD恢复访问串口705;对互斥锁(mono_available)进行解锁,以便嵌入式操作系统70中的其它应用程序702可以独占串口。
本发明实施例提供的一种嵌入式操作系统70,通过在嵌入式操作系统70中导出禁止接口、使能接口和提供一套第二串口驱动704,实现当应用程序702访问串口705时,控制台701停止访问串口705;当应用程序702停止访问串口705时,控制台701恢复访问串口705,使得控制台701和应用程序702能够分时复用串口705,避免了通信冲突。克服了现有技术中当嵌入式系统70中只有一个串口705时,该系统中的应用程序702通过该串口705与系统外的其他设备通信时会出现通信冲突的缺陷。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

Claims (20)

1.一种串口分时复用的方法,其特征在于,应用于嵌入式操作系统,所述嵌入式操作系统包括:控制台、应用程序、第一串口驱动、第二串口驱动和一个串口,其中,所述第一串口驱动用于所述控制台访问所述串口,所述第二串口驱动用于所述应用程序访问所述串口;
所述方法包括:
所述第一串口驱动导出禁止接口和使能接口,所述禁止接口用于禁止所述第一串口驱动访问所述串口,所述使能接口用于使能所述第一串口驱动访问所述串口;
在所述应用程序需要访问所述串口时,所述第二串口驱动通过所述禁止接口通知所述控制台暂停访问所述串口,所述应用程序通过所述第二串口驱动访问所述串口;
在所述应用程序不需要访问所述串口时,所述应用程序结束访问所述串口,所述第二串口驱动通过所述使能接口通知所述控制台恢复访问所述串口。
2.根据权利要求1所述的串口分时复用的方法,其特征在于,所述在所述应用程序需要访问所述串口时,所述第二串口驱动通过所述禁止接口通知所述控制台暂停访问所述串口,所述应用程序通过所述第二串口驱动访问所述串口,包括:
所述应用程序根据用户的访问请求向所述第二串口驱动发送访问所述串口的请求;
所述第二串口驱动调用所述禁止接口并向所述第一串口驱动发送暂停所述控制台访问所述串口的通知;
所述第一串口驱动根据所述第二串口驱动发送的通知暂停访问所述串口;
所述应用程序通过所述第二串口驱动访问所述串口。
3.根据权利要求2所述的串口分时复用的方法,其特征在于,
所述在所述应用程序不需要访问所述串口时,所述应用程序结束访问所述串口,所述第二串口驱动通过所述使能接口通知所述控制台恢复访问所述串口,包括:
在用户停止访问所述应用程序时,所述应用程序通过所述第二串口驱动停止访问所述串口;
所述第二串口驱动调用所述使能接口并向所述第一串口驱动发送恢复所述控制台访问所述串口的通知;
所述第一串口驱动根据所述第二串口驱动发送的通知恢复访问所述串口。
4.根据权利要求2或3所述的串口分时复用的方法,其特征在于,所述第二串口驱动内设置有互斥锁,
相应的,在所述第二串口驱动调用所述禁止接口并向所述第一串口驱动发送暂停所述控制台访问所述串口的通知之前,所述方法还包括:
所述第二串口驱动检查所述互斥锁的状态;所述互斥锁的状态为未上锁或者上锁。
5.根据权利要求4所述的串口分时复用的方法,其特征在于,若所述互斥锁的状态为未上锁,所述方法还包括:
所述第二串口驱动对所述互斥锁上锁,以实现所述应用程序通过所述第二串口驱动独占访问所述串口。
6.根据权利要求5所述的串口分时复用的方法,其特征在于,所述方法还包括:
在所述应用程序不需要访问所述串口时,所述第二串口驱动在停止访问所述串口后,对所述互斥锁解锁。
7.根据权利要求4所述的串口分时复用的方法,其特征在于,若所述互斥锁的状态为上锁,所述方法还包括:
所述第二串口驱动向所述应用程序返回访问失败信息。
8.根据权利要求1-7任一项所述的串口分时复用的方法,其特征在于,所述第二串口驱动设置有写串口数据接口和读串口数据接口,相应的,
所述第二串口驱动用于所述应用程序访问所述串口,包括:
所述第二串口驱动通过所述写串口数据接口完成所述应用程序对所述串口的写访问操作;
所述第二串口驱动通过所述读串口数据接口完成所述应用程序对所述串口的读访问操作。
9.根据权利要求8所述的串口分时复用的方法,其特征在于,所述第二串口驱动通过所述写串口数据接口完成所述应用程序对所述串口的写访问操作,包括:
当所述第二串口驱动向所述串口写数据时,所述第二串口驱动检查所述串口的发送先入先出队列FIFO是否已满,如果所述发送FIFO已满,所述第二串口驱动等待发送FIFO有空位时再向所述串口发送数据;如果所述发送FIFO未满,所述第二串口驱动向所述串口直接发送数据。
10.根据权利要求9所述的串口分时复用的方法,其特征在于,所述第二串口驱动通过所述读串口数据接口完成所述应用程序对所述串口的读访问操作,包括:
所述第二串口驱动根据所述串口的接收中断来获取所述串口数据,接收中断处理函数将收到的所述串口数据保存到所述循环缓冲队列里;
所述应用程序调用所述第二串口驱动的所述读串口数据接口直接从所述循环缓冲队列里取所述串口数据。
11.一种嵌入式操作系统,其特征在于,所述系统包括:控制台、应用程序、第一串口驱动、第二串口驱动和一个串口,其中,所述第一串口驱动用于所述控制台访问所述串口,所述第二串口驱动用于所述应用程序访问所述串口;
所述第一串口驱动还用于:导出禁止接口和使能接口,所述禁止接口用于禁止所述第一串口驱动访问所述串口,所述使能接口用于使能所述第一串口驱动访问所述串口;
所述应用程序还用于:在所述应用程序需要访问所述串口时,通过所述第二串口驱动访问所述串口;在所述应用程序不需要访问所述串口时,结束访问所述串口;
所述第二串口驱动还用于:在所述应用程序需要访问所述串口时,通过所述禁止接口通知所述控制台暂停访问所述串口;在所述应用程序不需要访问所述串口时,通过所述使能接口通知所述控制台恢复访问所述串口。
12.根据权利要求11所述的嵌入式操作系统,其特征在于,
所述应用程序还用于:根据用户的访问请求向所述第二串口驱动发送访问所述串口的请求;通过所述第二串口驱动访问所述串口;
所述第二串口驱动还用于:调用所述禁止接口并向所述第一串口驱动发送暂停所述控制台访问所述串口的通知;
所述第一串口驱动还用于:根据所述第二串口驱动发送的通知暂停访问所述串口。
13.根据权利要求12所述的嵌入式操作系统,其特征在于,
所述应用程序还用于:在用户停止访问所述应用程序时,通过所述第二串口驱动停止访问所述串口;
所述第二串口驱动还用于:调用所述使能接口并向所述第一串口驱动发送恢复所述控制台访问所述串口的通知;
所述第一串口驱动还用于:根据所述第二串口驱动发送的通知恢复访问所述串口。
14.根据权利要求12或13所述的嵌入式操作系统,其特征在于,所述第二串口驱动内设置有互斥锁,
所述第二串口驱动还用于:检查所述互斥锁的状态;所述互斥锁的状态为未上锁或者上锁。
15.根据权利要求14所述的嵌入式操作系统,其特征在于,若所述互斥锁的状态为未上锁,
所述第二串口驱动还用于:对所述互斥锁上锁,以实现所述应用程序通过所述第二串口驱动独占访问所述串口。
16.根据权利要求15所述的嵌入式操作系统,其特征在于,
所述第二串口驱动还用于:在所述应用程序不需要访问所述串口时,所述第二串口驱动在停止访问所述串口后,对所述互斥锁解锁。
17.根据权利要求14所述的嵌入式操作系统,其特征在于,若所述互斥锁的状态为上锁,
所述第二串口驱动还用于:向所述应用程序返回访问失败信息。
18.根据权利要求11-17任一项所述的嵌入式操作系统,其特征在于,所述第二串口驱动设置有写串口数据接口和读串口数据接口,相应的,
所述第二串口驱动还用于:通过所述写串口数据接口完成所述应用程序对所述串口的写访问操作;通过所述读串口数据接口完成所述应用程序对所述串口的读访问操作。
19.根据权利要求18所述的嵌入式操作系统,其特征在于,
所述第二串口驱动还用于:当所述第二串口驱动向所述串口写数据时,检查所述串口的发送先入先出队列FIFO是否已满,如果所述发送FIFO已满,等待发送FIFO有空位时再向所述串口发送数据;如果所述发送FIFO未满,向所述串口直接发送数据。
20.根据权利要求19所述的嵌入式操作系统,其特征在于,
所述第二串口驱动还用于:根据所述串口的接收中断来获取所述串口数据,接收中断处理函数将收到的所述串口数据保存到所述循环缓冲队列里;
所述应用程序还用于:调用所述第二串口驱动的所述读串口数据接口直接从所述循环缓冲队列里取所述串口数据。
CN201310263610.6A 2013-06-27 2013-06-27 一种串口分时复用的方法及系统 Expired - Fee Related CN103365798B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201310263610.6A CN103365798B (zh) 2013-06-27 2013-06-27 一种串口分时复用的方法及系统
PCT/CN2014/074952 WO2014206132A1 (zh) 2013-06-27 2014-04-09 一种串口分时复用的方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310263610.6A CN103365798B (zh) 2013-06-27 2013-06-27 一种串口分时复用的方法及系统

Publications (2)

Publication Number Publication Date
CN103365798A true CN103365798A (zh) 2013-10-23
CN103365798B CN103365798B (zh) 2016-08-31

Family

ID=49367196

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310263610.6A Expired - Fee Related CN103365798B (zh) 2013-06-27 2013-06-27 一种串口分时复用的方法及系统

Country Status (2)

Country Link
CN (1) CN103365798B (zh)
WO (1) WO2014206132A1 (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104008008A (zh) * 2014-06-17 2014-08-27 厦门雅迅网络股份有限公司 一种Linux系统中复用调试串口的方法
WO2014206132A1 (zh) * 2013-06-27 2014-12-31 华为技术有限公司 一种串口分时复用的方法及系统
CN106095716A (zh) * 2016-06-24 2016-11-09 武汉光迅科技股份有限公司 一种基于首尾循环队列的串口通信方法
CN112380000A (zh) * 2020-10-23 2021-02-19 成都佰维存储科技有限公司 串口共享方法、装置、可读存储介质及电子设备
CN112885061A (zh) * 2021-01-22 2021-06-01 江苏林洋能源股份有限公司 一种基于电表实现多设备分时通信的方法
CN114327664A (zh) * 2022-03-15 2022-04-12 武汉普赛斯电子技术有限公司 插卡式机箱设备的软件管理方法、计算机设备及存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1758187A (zh) * 2005-11-25 2006-04-12 北京中星微电子有限公司 虚拟串口装置
KR20060031773A (ko) * 2004-10-09 2006-04-13 엘지전자 주식회사 퍼스널 컴퓨터를 이용한 이동통신 단말기의 제어 시스템
CN101221550A (zh) * 2008-01-30 2008-07-16 许新朋 一种串行通讯的方法及芯片
CN101500331A (zh) * 2008-02-02 2009-08-05 中兴通讯股份有限公司 一种对串口进行分时复用的方法及移动终端
CN202150110U (zh) * 2011-06-02 2012-02-22 安徽工程大学 一种基于单片机的多串口多路分时复用串行通信装置
CN202372976U (zh) * 2011-12-15 2012-08-08 福建鑫诺通讯技术有限公司 一种分时复用串口的切换电路
CN102866976A (zh) * 2012-09-17 2013-01-09 山东神戎电子股份有限公司 一种嵌入式系统中串口分时复用方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6438146B1 (en) * 1998-04-13 2002-08-20 International Business Machines Corporation Multiplexed asynchronous serial communication systems methods and computer program products
CN101141402A (zh) * 2007-09-30 2008-03-12 华为技术有限公司 串口复用的方法和装置
CN103365798B (zh) * 2013-06-27 2016-08-31 华为技术有限公司 一种串口分时复用的方法及系统

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20060031773A (ko) * 2004-10-09 2006-04-13 엘지전자 주식회사 퍼스널 컴퓨터를 이용한 이동통신 단말기의 제어 시스템
CN1758187A (zh) * 2005-11-25 2006-04-12 北京中星微电子有限公司 虚拟串口装置
CN101221550A (zh) * 2008-01-30 2008-07-16 许新朋 一种串行通讯的方法及芯片
CN101500331A (zh) * 2008-02-02 2009-08-05 中兴通讯股份有限公司 一种对串口进行分时复用的方法及移动终端
CN202150110U (zh) * 2011-06-02 2012-02-22 安徽工程大学 一种基于单片机的多串口多路分时复用串行通信装置
CN202372976U (zh) * 2011-12-15 2012-08-08 福建鑫诺通讯技术有限公司 一种分时复用串口的切换电路
CN102866976A (zh) * 2012-09-17 2013-01-09 山东神戎电子股份有限公司 一种嵌入式系统中串口分时复用方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
GZXTTKX: "串口驱动分析", 《百度文库》 *

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2014206132A1 (zh) * 2013-06-27 2014-12-31 华为技术有限公司 一种串口分时复用的方法及系统
CN104008008A (zh) * 2014-06-17 2014-08-27 厦门雅迅网络股份有限公司 一种Linux系统中复用调试串口的方法
CN104008008B (zh) * 2014-06-17 2019-02-22 厦门雅迅网络股份有限公司 一种Linux系统中复用调试串口的方法
CN106095716A (zh) * 2016-06-24 2016-11-09 武汉光迅科技股份有限公司 一种基于首尾循环队列的串口通信方法
CN106095716B (zh) * 2016-06-24 2020-06-02 武汉光迅科技股份有限公司 一种基于首尾循环队列的串口通信方法
CN112380000A (zh) * 2020-10-23 2021-02-19 成都佰维存储科技有限公司 串口共享方法、装置、可读存储介质及电子设备
CN112885061A (zh) * 2021-01-22 2021-06-01 江苏林洋能源股份有限公司 一种基于电表实现多设备分时通信的方法
CN112885061B (zh) * 2021-01-22 2022-12-13 江苏林洋能源股份有限公司 一种基于电表实现多设备分时通信的方法
CN114327664A (zh) * 2022-03-15 2022-04-12 武汉普赛斯电子技术有限公司 插卡式机箱设备的软件管理方法、计算机设备及存储介质
CN114327664B (zh) * 2022-03-15 2022-06-17 武汉普赛斯电子技术有限公司 插卡式机箱设备的软件管理方法、计算机设备及存储介质

Also Published As

Publication number Publication date
CN103365798B (zh) 2016-08-31
WO2014206132A1 (zh) 2014-12-31

Similar Documents

Publication Publication Date Title
CN103365798A (zh) 一种串口分时复用的方法及系统
US10691618B2 (en) Secure enclaves for use by kernel mode applications
JP5197571B2 (ja) マルチポート・メモリ・デバイスにおけるインターポート通信
US9164853B2 (en) Multi-core re-initialization failure control system
US9081709B2 (en) Virtualizable and forward-compatible hardware-software interface
CN102724035B (zh) 一种加密卡的加解密方法
US5907862A (en) Method and apparatus for the sharing of a memory device by multiple processors
CN103942178A (zh) 多核处理器上实时操作系统与非实时操作系统之间的通信方法
CN101065740A (zh) USB便携式(On-The-Go)控制器
CN104123194A (zh) 内核态与用户态的通信结构及通信方法
US11494221B2 (en) Hardware control core controlling operation of hardware devices by executing device drivers within the hardware control core used by virtual machine cores via shared memory having an uplink and downlink memory
CN108885572B (zh) 安全驱动程序平台
WO2023221753A1 (zh) 串口通信方法及相关装置
CN112291027A (zh) 时钟选择方法、装置、设备及计算机可读存储介质
CN111124985A (zh) 一种移动终端只读控制方法及装置
CN107239321B (zh) 一种基于薄虚拟机监控器的usb存储设备安全访问控制方法
US20180052700A1 (en) Facilitation of guest application display from host operating system
US5247640A (en) Dual access control system including plural magnetic disk control units and contention control circuitry
CN106649187B (zh) 一种芯片自动化外设协议选择的方法
US10324902B2 (en) Method and apparatus for locking file in memory
CN111427815A (zh) 一种基于spi接口的核间通讯方法、终端及存储介质
CN111427813A (zh) 一种基于串口的核间通讯方法、终端及存储介质
JP4509906B2 (ja) PCIExpressを有する仮想USBフラッシュメモリ保存装置
CN101231600A (zh) 通用的高效率的计算机进程间通讯机制
CN104536932B (zh) 专用低速usb设备的通用通讯方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20160831

Termination date: 20180627

CF01 Termination of patent right due to non-payment of annual fee