用于can总线的数据分发方法和装置制造方法

文档序号:6506325阅读:112来源:国知局
用于can总线的数据分发方法和装置制造方法
【专利摘要】本发明提出一种用于CAN总线的数据分发方法和装置,其中所述方法包括以下步骤:接收CAN总线发送的共享数据;将共享数据分类存储至至少一个共享数据段中;至少一个共享数据段分别异步发送通知事件至至少一个应用程序;以及至少一个共享数据段分别根据至少一个应用程序的读请求将对应的分类的共享数据异步分发至对应的至少一个应用程序。根据本发明实施例的方法,实现了数据的跨进程共享和异步分发,并且提高了数据分发的效率。
【专利说明】用于CAN总线的数据分发方法和装置

【技术领域】
[0001]本发明涉及计算机通信领域,特别涉及一种用于CAN总线的数据分发方法和装置。

【背景技术】
[0002]CAN (Controller Area Network,控制器局域网络)总线以其稳定、高速的特点已经广泛应用于汽车车身的数据通信,使用CAN总线来进行数据通信已成为车载应用的最好选择。但是,主要面临以下问题,在某个操作系统上数据的获取往往是独占的,只能由单个应用程序来获取,这样其他需要相同数据的应用程序就无法正常工作,因此对CAN数据的分发需求就产生了。
[0003]其中,CAN总线的数据分发技术的核心是实现进程间通信,以Windows CE (一个开放的、可升级的32位嵌入式操作系统)嵌入式系统为例,能够实现进程间通信的有WM_C0PYDATA (一种实现进程间通信的方法)消息、共享内存段、内存映射文件、点对点消息队列等方式。但是,这些方式存在以下缺陷:(1)WM_C0PYDATA消息的访问方式是同步的,即发送消息时必须等到数据被接收处理后才能继续其他的操作,影响了 CAN数据的正常分发;(2)共享内存段方式和内存映射文件方式都不能实现数据的主动分类和发送;(3)点对点消息队列方式只能实现一对一的数据传输,不能实现多进程间数据的共享。


【发明内容】

[0004]本发明的目的旨在至少解决上述的技术缺陷之一。
[0005]为此,本发明的第一个目的在于提出一种用于CAN总线的数据分发方法,该方法实现了数据的跨进程共享和异步分发,提高了数据分发的效率。
[0006]本发明的第二个目的在于提出一种用于CAN总线的数据分发装置。
[0007]为达到上述目的,本发明第一方面实施例的用于CAN总线的数据分发方法包括以下步骤:接收CAN总线发送的共享数据;将所述共享数据分类存储至至少一个共享数据段中;所述至少一个共享数据段分别异步发送通知事件至至少一个应用程序;以及所述至少一个共享数据段分别根据所述至少一个应用程序的读请求将对应的分类的所述共享数据异步分发至对应的所述至少一个应用程序。
[0008]根据本发明实施例的用于CAN总线的数据分发方法,使用共享内存段分类缓存CAN数据以及使用异步方式通知应用程序来获取数据,至少具有以下有益效果:(1)为每个获取数据的应用程序维护相应的附加信息,保证每个应用程序获取正确内容和正确时序的数据;(2)可以保证一个或多个应用同时获取同一类数据,实现了数据的共享;(3)可以异步地分发CAN数据,不会因为每个应用程序获取和处理数据的差异而影响数据分发的效率和流程;(4)可以实现高速率的CAN数据分发及大数据量时的CAN数据的高速率分发。
[0009]为达到上述目的,本发明第二方面实施例的用于CAN总线的数据分发装置,包括:数据接收模块,用于接收CAN总线发送的共享数据;分类存储模块,用于将所述共享数据分类存储至至少一个共享数据段中;异步通知模块,用于所述至少一个共享数据段分别异步发送通知事件至至少一个应用程序;以及异步分发模块,用于所述至少一个共享数据段分别根据所述至少一个应用程序的读请求将对应的分类的所述共享数据异步分发至对应的所述至少一个应用程序。
[0010]根据本发明实施例的用于CAN总线的数据分发装置,至少具有以下有益效果:(1)为每个获取数据的应用程序维护相应的附加信息,保证每个应用程序获取正确内容和正确时序的数据;(2)可以保证一个或多个应用同时获取同一类数据,实现了数据的共享;(3)可以异步地分发CAN数据,不会因为每个应用程序获取和处理数据的差异而影响数据分发的效率和流程;(4)可以实现高速率的CAN数据分发及大数据量时的CAN数据的高速率分发。
[0011]本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。

【专利附图】

【附图说明】
[0012]本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
[0013]图1是根据本发明一个实施例的用于CAN总线的数据分发方法的流程图;
[0014]图2 (a)是初始共享缓冲队列状态图;
[0015]图2 (b)是写入数据后共享缓冲区的状态图;
[0016]图2 (c)是写指针和读指针重合时共享缓冲区的状态图;
[0017]图2 (d)是写指针和读指针重合后再写入数据后缓冲区的状态图;
[0018]图2 (e)是应用程序读走数据后共享缓冲区的状态图;
[0019]图3是应用程序交互的工作流程图;
[0020]图4是根据本发明一个实施例的用于CAN总线的数据分发装置的结构示意图;
[0021]图5是实现本发明的总体结构示意图。

【具体实施方式】
[0022]下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
[0023]下文的公开提供了许多不同的实施例或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。当然,它们仅仅为示例,并且目的不在于限制本发明。此外,本发明可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施例和/或设置之间的关系。此夕卜,本发明提供了的各种特定的工艺和材料的例子,但是本领域普通技术人员可以意识到其他工艺的可应用于性和/或其他材料的使用。另外,以下描述的第一特征在第二特征之“上”的结构可以包括第一和第二特征形成为直接接触的实施例,也可以包括另外的特征形成在第一和第二特征之间的实施例,这样第一和第二特征可能不是直接接触。
[0024]在本发明的描述中,需要说明的是,除非另有规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是机械连接或电连接,也可以是两个元件内部的连通,可以是直接相连,也可以通过中间媒介间接相连,对于本领域的普通技术人员而言,可以根据具体情况理解上述术语的具体含义。
[0025]参照下面的描述和附图,将清楚本发明的实施例的这些和其他方面。在这些描述和附图中,具体公开了本发明的实施例中的一些特定实施方式,来表示实施本发明的实施例的原理的一些方式,但是应当理解,本发明的实施例的范围不受此限制。相反,本发明的实施例包括落入所附加权利要求书的精神和内涵范围内的所有变化、修改和等同物。
[0026]为了实现高速率CAN数据的跨进程共享与异步分发,本发明提出一种用于CAN总线的数据分发方法。下面参考说明书附图描述根据本发明实施例的用于CAN总线的数据分发方法。
[0027]图1为本发明一个实施例的用于CAN总线的数据分发方法的流程图。
[0028]如图1所示,根据本发明实施例的用于CAN总线的数据分发方法包括下述步骤。
[0029]步骤SlOl,接收CAN总线发送的共享数据。
[0030]步骤S102,将共享数据分类存储至至少一个共享数据段中。其中,每个共享数据段均以环形缓冲区的形式存储分类的共享数据。
[0031]具体地,环形缓冲区是嵌入式系统中十分重要的一种数据结构,顾名思义这个缓冲区是环形的,即用一个指针去访问该缓冲区的最后一个内存位置的后一位置时回到环形缓冲区的起点。
[0032]更具体地,在本发明的实施例中,环形缓冲区中包括一个写指针和至少一个读指针,写指针指向下一个写入位置,至少一个读指针和至少一个应用程序相对应,且每个读指针为对应的应用程序所私有,并指向应用程序对应的下一个读取位置。当环形缓冲区处于初始状态时,写指针和读指针指向同一位置,且写指针在读指针之前,具体如图2 (a)所示。
[0033]下面详细介绍将共享数据分类存储至环形缓冲区的具体实现过程。
[0034]当共享数据写入环形缓冲区时,存在两种情况:(1)如果分类的共享数据无重复,当写入数据量小于写指针到读指针之间可写入的数据量时,则移动写指针以写入分类的共享数据,且写指针指向下一个写入位置,写指针在读指针之前,如图2 (b)所示;当写入数据量等于大于写指针到读指针之间可写入的数据量时,则移动写指针以写入分类的共享数据,并且移动读指针使其指向写指针指向的位置,写指针在读指针之前,如图2 (c)所示。
(2)如果分类的共享数据有重复,则移动写指针以写入分类的共享数据,且写指针指向下一个写入位置,并移动读指针指向写指针的位置,读指针在写指针之前,如图2 (d)所示。
[0035]步骤S103,至少一个共享数据段分别异步发送通知事件至至少一个应用程序。
[0036]具体地,当共享数据分类存储至共享数据段后,异步地通知需要获取共享数据的应用程序获取数据,这样应用程序可以根据自己的需要来获取、处理数据而不会对其它的应用程序产生影响。
[0037]步骤S104,至少一个共享数据段分别根据至少一个应用程序的读请求将对应的分类的共享数据异步分发至对应的至少一个应用程序。
[0038]具体地,共享数据段根据应用程序的读请求异步发送共享数据至应用程序,即每当有应用程序的读请求时,共享数据段才发送共享数据。例如,如果有两个应用程序,它们获取数据和处理数据的能力有所差异,那么共享数据段会根据应用程序随时发送来的读请求将共享数据实时地分发至应用程序,应用程序间不会相互影响。
[0039]下面详细介绍应用程序读取共享数据的具体实现过程。
[0040]具体地,应用程序接收到通知来读取数据时,存在两种情况:(1)如果分类的共享数据无重复,则获取写指针和读指针之间的数据,并移动读指针指向写指针的位置。(2)如果分类的共享数据有重复,则获取环形缓冲区中的所有数据,并移动读指针指向写指针的位置。这两种情况读取数据后的状态都如图2 (e)所示。
[0041]根据本发明实施例的用于CAN总线的数据分发方法,使用共享内存段分类缓存CAN数据以及使用异步方式通知应用程序来获取数据,至少具有以下有益效果:(1)为每个获取数据的应用程序维护相应的附加信息,保证每个应用程序获取正确内容和正确时序的数据;(2)可以保证一个或多个应用同时获取同一类数据,实现了数据的共享;(3)可以异步地分发CAN数据,不会因为每个应用程序获取和处理数据的差异而影响数据分发的效率和流程;(4)可以实现高速率的CAN数据分发及大数据量时的CAN数据的高速率分发。
[0042]为了使得本发明的优点更加明显,下面举例说明。
[0043]如图3所示为应用程序交互的工作流程图。图3的左边部分的工作流程为当CAN总线上有数据到来时,将共享数据写入共享数据段并异步地通知应用程序,任务完成则结束,任务未完成则继续等待CAN总线上数据的到来并重复以上步骤;图3的右边部分的工作流程为应用程序等待事件设置,收到数据到来通知后读取共享数据,读取完成则结束,读取未完成则继续等待事件设置并重复上述步骤。
[0044]为了实现上述实施例,本发明还提出一种用于CAN总线的数据分发装置。
[0045]图4是根据本发明一个实施例的用于CAN总线的数据分发装置的结构图。
[0046]如图4所示,用于CAN总线的数据分发装置包括:数据接收模块100、分类存储模块200、异步通知模块300、异步分发模块400。
[0047]具体地,数据接收模块100,用于接收CAN总线发送的共享数据。
[0048]分类存储模块200,用于将共享数据分类存储至至少一个共享数据段中。其中,每个共享数据段均以环形缓冲区的形式存储分类的共享数据。
[0049]环形缓冲区是嵌入式系统中十分重要的一种数据结构,顾名思义这个缓冲区是环形的,即用一个指针去访问该缓冲区的最后一个内存位置的后一位置时回到环形缓冲区的起点。
[0050]更具体地,在本发明的实施例中,环形缓冲区中包括一个写指针和至少一个读指针,写指针指向下一个写入位置,至少一个读指针和至少一个应用程序相对应,且每个读指针为对应的应用程序所私有,并指向应用程序对应的下一个读取位置。当环形缓冲区处于初始状态时,写指针和读指针指向同一位置,且写指针在读指针之前,具体如图2 (a)所示。
[0051]下面详细介绍将共享数据分类存储至环形缓冲区的具体实现过程。
[0052]当共享数据写入环形缓冲区时,存在两种情况:(1)如果分类的共享数据无重复,当写入数据量小于写指针到读指针之间可写入的数据量时,则分类存储模块200用于移动写指针以写入分类的共享数据,且写指针指向下一个写入位置,写指针在读指针之前,如图2 (b)所示;当写入数据量等于大于写指针到读指针之间可写入的数据量时,则分类存储模块200用于移动写指针以写入分类的共享数据,并且移动读指针使其指向写指针指向的位置,写指针在读指针之前,如图2 (c)所示。(2)如果分类的共享数据有重复,则分类存储模块200用于移动写指针以写入分类的共享数据,且写指针指向下一个写入位置,并移动读指针指向写指针的位置,读指针在写指针之前,如图2 Cd)所示。
[0053]异步通知模块300,用于至少一个共享数据段分别异步发送通知事件至至少一个应用程序。
[0054]具体地,当共享数据分类存储至共享数据段后,异步地通知需要获取共享数据的应用程序获取数据,这样应用程序可以根据自己的需要来获取、处理数据而不会对其它的应用程序产生影响。
[0055]异步分发模块400,用于至少一个共享数据段分别根据至少一个应用程序的读请求将对应的分类的共享数据异步分发至对应的至少一个应用程序。
[0056]具体地,共享数据段根据应用程序的读请求异步发送共享数据至应用程序,即每当有应用程序的读请求时,共享数据段才发送共享数据。例如,如果有两个应用程序,它们获取数据和处理数据的能力有所差异,那么共享数据段会根据应用程序随时发送来的读请求将共享数据实时地分发至应用程序,应用程序间不会相互影响。
[0057]下面详细介绍应用程序读取共享数据的具体实现过程。
[0058]具体地,应用程序接收到通知来读取数据时,存在两种情况:(1)如果分类的共享数据无重复,则异步分发模块400用于获取写指针和读指针之间的数据,并移动读指针指向写指针的位置。(2)如果分类的共享数据有重复,则异步分发模块400用于获取环形缓冲区中的所有数据,并移动读指针指向写指针的位置。这两种情况读取数据后的状态都如图2 (e)所示。
[0059]根据本发明实施例的用于CAN总线的数据分发装置,至少具有以下有益效果:(I)为每个获取数据的应用程序维护相应的附加信息,保证每个应用程序获取正确内容和正确时序的数据;(2)可以保证一个或多个应用同时获取同一类数据,实现了数据的共享;(3)可以异步地分发CAN数据,不会因为每个应用程序获取和处理数据的差异而影响数据分发的效率和流程;(4)可以实现高速率的CAN数据分发及大数据量时的CAN数据的高速率分发。
[0060]为了更加清晰、直观的说明本发明的用于CAN总线的数据分发方法和装置,下面介绍实现本发明的总体结构。
[0061]如图5所示,总体结构包括了 CAN数据分发装置与硬件驱动、CAN总线以及各个应用程序,通过图5可以从总体上了解它们之间的关系以及数据的流向情况。CAN数据分发装置从硬件驱动获取共享数据后分类缓存在共享数据段,然后通知相应的应用程序获取数据。通过共享数据段的缓存可以实现数据的多应用共享,缓存也可以防止数据的丢失。
[0062]在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
[0063]尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。
【权利要求】
1.一种用于CAN总线的数据分发方法,其特征在于,包括以下步骤: 接收CAN总线发送的共享数据; 将所述共享数据分类存储至至少一个共享数据段中; 所述至少一个共享数据段分别异步发送通知事件至至少一个应用程序;以及 所述至少一个共享数据段分别根据所述至少一个应用程序的读请求将对应的分类的所述共享数据异步分发至对应的所述至少一个应用程序。
2.根据权利要求1所述的方法,其特征在于,每个所述共享数据段以环形缓冲区的形式存储分类的所述共享数据。
3.根据权利要求2所述的方法,其特征在于,所述环形缓冲区中包括一个写指针和至少一个读指针,所述写指针指向下一个写入位置,所述至少一个读指针和所述至少一个应用程序相对应,且每个所述读指针为对应的所述应用程序所私有,并指向所述应用程序对应的下一个读取位置。
4.根据权利要求2或3所述的方法,其特征在于,当所述环形缓冲区处于初始状态时,所述写指针和所述读指针指向同一位置,且所述写指针在所述读指针之前。
5.根据权利要求4所述的方法,其特征在于,如果分类的所述共享数据无重复,则移动所述写指针以写入分类的所述共享数据,且所述写指针指向下一个写入位置,所述写指针在所述读指针之前。
6.根据权利要求5所述的方法,其特征在于,如果分类的所述共享数据有重复,则移动所述写指针以写入分类的所述共享数据,且所述写指针指向下一个写入位置,并移动所述读指针指向所述写指针的位置,所述读指针在所述写指针之前。
7.根据权利要求4或5所述的方法,其特征在于,如果分类的所述共享数据无重复,则获取所述写指针和所述读指针之间的数据,并移动所述读指针指向所述写指针的位置。
8.根据权利要求4或5所述的方法,其特征在于,如果分类的所述共享数据有重复,则获取所述环形缓冲区中的所有数据,并移动所述读指针指向所述写指针的位置。
9.一种用于CAN总线的数据分发装置,其特征在于,包括: 数据接收模块,用于接收CAN总线发送的共享数据; 分类存储模块,用于将所述共享数据分类存储至至少一个共享数据段中; 异步通知模块,用于所述至少一个共享数据段分别异步发送通知事件至至少一个应用程序;以及 异步分发模块,用于所述至少一个共享数据段分别根据所述至少一个应用程序的读请求将对应的分类的所述共享数据异步分发至对应的所述至少一个应用程序。
10.根据权利要求9所述的装置,其特征在于,每个所述共享数据段以环形缓冲区的形式存储分类的所述共享数据。
11.根据权利要求10所述的装置,其特征在于,所述环形缓冲区中包括一个写指针和至少一个读指针,所述写指针指向下一个写入位置,所述至少一个读指针和所述至少一个应用程序相对应,且每个所述读指针为对应的所述应用程序所私有,并指向所述应用程序对应的下一个读取位置。
12.根据权利要求10或11所述的装置,其特征在于,当所述环形缓冲区处于初始状态时,所述写指针和所述读指针指向同一位置,且所述写指针在所述读指针之前。
13.根据权利要求12所述的装置,其特征在于,如果分类的所述共享数据无重复,则所述分类存储模块还用于:移动所述写指针以写入分类的所述共享数据,且所述写指针指向下一个写入位置,所述写指针在所述读指针之前。
14.根据权利要求12所述的装置,其特征在于,如果分类的所述共享数据有重复,则所述分类存储模块还用于:移动所述写指针以写入分类的所述共享数据,且所述写指针指向下一个写入位置,并移动所述读指针指向所述写指针的位置,所述读指针在所述写指针之N /.刖。
15.根据权利要求13或14所述的装置,其特征在于,如果分类的所述共享数据无重复,则所述异步分发模块还用于:获取所述写指针和所述读指针之间的数据,并移动所述读指针指向所述写指针的位置。
16.根据权利要求13或14所述的装置,其特征在于,如果分类的所述共享数据有重复,则所述异步分发模块还用于:获取所述环形缓冲区中的所有数据,并移动所述读指针指向所述写指针的位置。
【文档编号】G06F9/54GK104346227SQ201310311915
【公开日】2015年2月11日 申请日期:2013年7月23日 优先权日:2013年7月23日
【发明者】肖勇 申请人:比亚迪股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1