用于can總線的數(shù)據(jù)分發(fā)方法和裝置制造方法
【專利摘要】本發(fā)明提出一種用于CAN總線的數(shù)據(jù)分發(fā)方法和裝置,其中所述方法包括以下步驟:接收CAN總線發(fā)送的共享數(shù)據(jù);將共享數(shù)據(jù)分類存儲至至少一個共享數(shù)據(jù)段中;至少一個共享數(shù)據(jù)段分別異步發(fā)送通知事件至至少一個應(yīng)用程序;以及至少一個共享數(shù)據(jù)段分別根據(jù)至少一個應(yīng)用程序的讀請求將對應(yīng)的分類的共享數(shù)據(jù)異步分發(fā)至對應(yīng)的至少一個應(yīng)用程序。根據(jù)本發(fā)明實施例的方法,實現(xiàn)了數(shù)據(jù)的跨進(jìn)程共享和異步分發(fā),并且提高了數(shù)據(jù)分發(fā)的效率。
【專利說明】用于CAN總線的數(shù)據(jù)分發(fā)方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機(jī)通信領(lǐng)域,特別涉及一種用于CAN總線的數(shù)據(jù)分發(fā)方法和裝置。
【背景技術(shù)】
[0002]CAN (Controller Area Network,控制器局域網(wǎng)絡(luò))總線以其穩(wěn)定、高速的特點已經(jīng)廣泛應(yīng)用于汽車車身的數(shù)據(jù)通信,使用CAN總線來進(jìn)行數(shù)據(jù)通信已成為車載應(yīng)用的最好選擇。但是,主要面臨以下問題,在某個操作系統(tǒng)上數(shù)據(jù)的獲取往往是獨占的,只能由單個應(yīng)用程序來獲取,這樣其他需要相同數(shù)據(jù)的應(yīng)用程序就無法正常工作,因此對CAN數(shù)據(jù)的分發(fā)需求就產(chǎn)生了。
[0003]其中,CAN總線的數(shù)據(jù)分發(fā)技術(shù)的核心是實現(xiàn)進(jìn)程間通信,以Windows CE (一個開放的、可升級的32位嵌入式操作系統(tǒng))嵌入式系統(tǒng)為例,能夠?qū)崿F(xiàn)進(jìn)程間通信的有WM_C0PYDATA (一種實現(xiàn)進(jìn)程間通信的方法)消息、共享內(nèi)存段、內(nèi)存映射文件、點對點消息隊列等方式。但是,這些方式存在以下缺陷:(1)WM_C0PYDATA消息的訪問方式是同步的,即發(fā)送消息時必須等到數(shù)據(jù)被接收處理后才能繼續(xù)其他的操作,影響了 CAN數(shù)據(jù)的正常分發(fā);(2)共享內(nèi)存段方式和內(nèi)存映射文件方式都不能實現(xiàn)數(shù)據(jù)的主動分類和發(fā)送;(3)點對點消息隊列方式只能實現(xiàn)一對一的數(shù)據(jù)傳輸,不能實現(xiàn)多進(jìn)程間數(shù)據(jù)的共享。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的目的旨在至少解決上述的技術(shù)缺陷之一。
[0005]為此,本發(fā)明的第一個目的在于提出一種用于CAN總線的數(shù)據(jù)分發(fā)方法,該方法實現(xiàn)了數(shù)據(jù)的跨進(jìn)程共享和異步分發(fā),提高了數(shù)據(jù)分發(fā)的效率。
[0006]本發(fā)明的第二個目的在于提出一種用于CAN總線的數(shù)據(jù)分發(fā)裝置。
[0007]為達(dá)到上述目的,本發(fā)明第一方面實施例的用于CAN總線的數(shù)據(jù)分發(fā)方法包括以下步驟:接收CAN總線發(fā)送的共享數(shù)據(jù);將所述共享數(shù)據(jù)分類存儲至至少一個共享數(shù)據(jù)段中;所述至少一個共享數(shù)據(jù)段分別異步發(fā)送通知事件至至少一個應(yīng)用程序;以及所述至少一個共享數(shù)據(jù)段分別根據(jù)所述至少一個應(yīng)用程序的讀請求將對應(yīng)的分類的所述共享數(shù)據(jù)異步分發(fā)至對應(yīng)的所述至少一個應(yīng)用程序。
[0008]根據(jù)本發(fā)明實施例的用于CAN總線的數(shù)據(jù)分發(fā)方法,使用共享內(nèi)存段分類緩存CAN數(shù)據(jù)以及使用異步方式通知應(yīng)用程序來獲取數(shù)據(jù),至少具有以下有益效果:(1)為每個獲取數(shù)據(jù)的應(yīng)用程序維護(hù)相應(yīng)的附加信息,保證每個應(yīng)用程序獲取正確內(nèi)容和正確時序的數(shù)據(jù);(2)可以保證一個或多個應(yīng)用同時獲取同一類數(shù)據(jù),實現(xiàn)了數(shù)據(jù)的共享;(3)可以異步地分發(fā)CAN數(shù)據(jù),不會因為每個應(yīng)用程序獲取和處理數(shù)據(jù)的差異而影響數(shù)據(jù)分發(fā)的效率和流程;(4)可以實現(xiàn)高速率的CAN數(shù)據(jù)分發(fā)及大數(shù)據(jù)量時的CAN數(shù)據(jù)的高速率分發(fā)。
[0009]為達(dá)到上述目的,本發(fā)明第二方面實施例的用于CAN總線的數(shù)據(jù)分發(fā)裝置,包括:數(shù)據(jù)接收模塊,用于接收CAN總線發(fā)送的共享數(shù)據(jù);分類存儲模塊,用于將所述共享數(shù)據(jù)分類存儲至至少一個共享數(shù)據(jù)段中;異步通知模塊,用于所述至少一個共享數(shù)據(jù)段分別異步發(fā)送通知事件至至少一個應(yīng)用程序;以及異步分發(fā)模塊,用于所述至少一個共享數(shù)據(jù)段分別根據(jù)所述至少一個應(yīng)用程序的讀請求將對應(yīng)的分類的所述共享數(shù)據(jù)異步分發(fā)至對應(yīng)的所述至少一個應(yīng)用程序。
[0010]根據(jù)本發(fā)明實施例的用于CAN總線的數(shù)據(jù)分發(fā)裝置,至少具有以下有益效果:(1)為每個獲取數(shù)據(jù)的應(yīng)用程序維護(hù)相應(yīng)的附加信息,保證每個應(yīng)用程序獲取正確內(nèi)容和正確時序的數(shù)據(jù);(2)可以保證一個或多個應(yīng)用同時獲取同一類數(shù)據(jù),實現(xiàn)了數(shù)據(jù)的共享;(3)可以異步地分發(fā)CAN數(shù)據(jù),不會因為每個應(yīng)用程序獲取和處理數(shù)據(jù)的差異而影響數(shù)據(jù)分發(fā)的效率和流程;(4)可以實現(xiàn)高速率的CAN數(shù)據(jù)分發(fā)及大數(shù)據(jù)量時的CAN數(shù)據(jù)的高速率分發(fā)。
[0011]本發(fā)明附加的方面和優(yōu)點將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過本發(fā)明的實踐了解到。
【專利附圖】
【附圖說明】
[0012]本發(fā)明上述的和/或附加的方面和優(yōu)點從下面結(jié)合附圖對實施例的描述中將變得明顯和容易理解,其中:
[0013]圖1是根據(jù)本發(fā)明一個實施例的用于CAN總線的數(shù)據(jù)分發(fā)方法的流程圖;
[0014]圖2 (a)是初始共享緩沖隊列狀態(tài)圖;
[0015]圖2 (b)是寫入數(shù)據(jù)后共享緩沖區(qū)的狀態(tài)圖;
[0016]圖2 (c)是寫指針和讀指針重合時共享緩沖區(qū)的狀態(tài)圖;
[0017]圖2 (d)是寫指針和讀指針重合后再寫入數(shù)據(jù)后緩沖區(qū)的狀態(tài)圖;
[0018]圖2 (e)是應(yīng)用程序讀走數(shù)據(jù)后共享緩沖區(qū)的狀態(tài)圖;
[0019]圖3是應(yīng)用程序交互的工作流程圖;
[0020]圖4是根據(jù)本發(fā)明一個實施例的用于CAN總線的數(shù)據(jù)分發(fā)裝置的結(jié)構(gòu)示意圖;
[0021]圖5是實現(xiàn)本發(fā)明的總體結(jié)構(gòu)示意圖。
【具體實施方式】
[0022]下面詳細(xì)描述本發(fā)明的實施例,所述實施例的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實施例是示例性的,僅用于解釋本發(fā)明,而不能解釋為對本發(fā)明的限制。
[0023]下文的公開提供了許多不同的實施例或例子用來實現(xiàn)本發(fā)明的不同結(jié)構(gòu)。為了簡化本發(fā)明的公開,下文中對特定例子的部件和設(shè)置進(jìn)行描述。當(dāng)然,它們僅僅為示例,并且目的不在于限制本發(fā)明。此外,本發(fā)明可以在不同例子中重復(fù)參考數(shù)字和/或字母。這種重復(fù)是為了簡化和清楚的目的,其本身不指示所討論各種實施例和/或設(shè)置之間的關(guān)系。此夕卜,本發(fā)明提供了的各種特定的工藝和材料的例子,但是本領(lǐng)域普通技術(shù)人員可以意識到其他工藝的可應(yīng)用于性和/或其他材料的使用。另外,以下描述的第一特征在第二特征之“上”的結(jié)構(gòu)可以包括第一和第二特征形成為直接接觸的實施例,也可以包括另外的特征形成在第一和第二特征之間的實施例,這樣第一和第二特征可能不是直接接觸。
[0024]在本發(fā)明的描述中,需要說明的是,除非另有規(guī)定和限定,術(shù)語“安裝”、“相連”、“連接”應(yīng)做廣義理解,例如,可以是機(jī)械連接或電連接,也可以是兩個元件內(nèi)部的連通,可以是直接相連,也可以通過中間媒介間接相連,對于本領(lǐng)域的普通技術(shù)人員而言,可以根據(jù)具體情況理解上述術(shù)語的具體含義。
[0025]參照下面的描述和附圖,將清楚本發(fā)明的實施例的這些和其他方面。在這些描述和附圖中,具體公開了本發(fā)明的實施例中的一些特定實施方式,來表示實施本發(fā)明的實施例的原理的一些方式,但是應(yīng)當(dāng)理解,本發(fā)明的實施例的范圍不受此限制。相反,本發(fā)明的實施例包括落入所附加權(quán)利要求書的精神和內(nèi)涵范圍內(nèi)的所有變化、修改和等同物。
[0026]為了實現(xiàn)高速率CAN數(shù)據(jù)的跨進(jìn)程共享與異步分發(fā),本發(fā)明提出一種用于CAN總線的數(shù)據(jù)分發(fā)方法。下面參考說明書附圖描述根據(jù)本發(fā)明實施例的用于CAN總線的數(shù)據(jù)分發(fā)方法。
[0027]圖1為本發(fā)明一個實施例的用于CAN總線的數(shù)據(jù)分發(fā)方法的流程圖。
[0028]如圖1所示,根據(jù)本發(fā)明實施例的用于CAN總線的數(shù)據(jù)分發(fā)方法包括下述步驟。
[0029]步驟SlOl,接收CAN總線發(fā)送的共享數(shù)據(jù)。
[0030]步驟S102,將共享數(shù)據(jù)分類存儲至至少一個共享數(shù)據(jù)段中。其中,每個共享數(shù)據(jù)段均以環(huán)形緩沖區(qū)的形式存儲分類的共享數(shù)據(jù)。
[0031]具體地,環(huán)形緩沖區(qū)是嵌入式系統(tǒng)中十分重要的一種數(shù)據(jù)結(jié)構(gòu),顧名思義這個緩沖區(qū)是環(huán)形的,即用一個指針去訪問該緩沖區(qū)的最后一個內(nèi)存位置的后一位置時回到環(huán)形緩沖區(qū)的起點。
[0032]更具體地,在本發(fā)明的實施例中,環(huán)形緩沖區(qū)中包括一個寫指針和至少一個讀指針,寫指針指向下一個寫入位置,至少一個讀指針和至少一個應(yīng)用程序相對應(yīng),且每個讀指針為對應(yīng)的應(yīng)用程序所私有,并指向應(yīng)用程序?qū)?yīng)的下一個讀取位置。當(dāng)環(huán)形緩沖區(qū)處于初始狀態(tài)時,寫指針和讀指針指向同一位置,且寫指針在讀指針之前,具體如圖2 (a)所示。
[0033]下面詳細(xì)介紹將共享數(shù)據(jù)分類存儲至環(huán)形緩沖區(qū)的具體實現(xiàn)過程。
[0034]當(dāng)共享數(shù)據(jù)寫入環(huán)形緩沖區(qū)時,存在兩種情況:(1)如果分類的共享數(shù)據(jù)無重復(fù),當(dāng)寫入數(shù)據(jù)量小于寫指針到讀指針之間可寫入的數(shù)據(jù)量時,則移動寫指針以寫入分類的共享數(shù)據(jù),且寫指針指向下一個寫入位置,寫指針在讀指針之前,如圖2 (b)所示;當(dāng)寫入數(shù)據(jù)量等于大于寫指針到讀指針之間可寫入的數(shù)據(jù)量時,則移動寫指針以寫入分類的共享數(shù)據(jù),并且移動讀指針使其指向?qū)懼羔樦赶虻奈恢茫瑢懼羔樤谧x指針之前,如圖2 (c)所示。
(2)如果分類的共享數(shù)據(jù)有重復(fù),則移動寫指針以寫入分類的共享數(shù)據(jù),且寫指針指向下一個寫入位置,并移動讀指針指向?qū)懼羔樀奈恢?,讀指針在寫指針之前,如圖2 (d)所示。
[0035]步驟S103,至少一個共享數(shù)據(jù)段分別異步發(fā)送通知事件至至少一個應(yīng)用程序。
[0036]具體地,當(dāng)共享數(shù)據(jù)分類存儲至共享數(shù)據(jù)段后,異步地通知需要獲取共享數(shù)據(jù)的應(yīng)用程序獲取數(shù)據(jù),這樣應(yīng)用程序可以根據(jù)自己的需要來獲取、處理數(shù)據(jù)而不會對其它的應(yīng)用程序產(chǎn)生影響。
[0037]步驟S104,至少一個共享數(shù)據(jù)段分別根據(jù)至少一個應(yīng)用程序的讀請求將對應(yīng)的分類的共享數(shù)據(jù)異步分發(fā)至對應(yīng)的至少一個應(yīng)用程序。
[0038]具體地,共享數(shù)據(jù)段根據(jù)應(yīng)用程序的讀請求異步發(fā)送共享數(shù)據(jù)至應(yīng)用程序,即每當(dāng)有應(yīng)用程序的讀請求時,共享數(shù)據(jù)段才發(fā)送共享數(shù)據(jù)。例如,如果有兩個應(yīng)用程序,它們獲取數(shù)據(jù)和處理數(shù)據(jù)的能力有所差異,那么共享數(shù)據(jù)段會根據(jù)應(yīng)用程序隨時發(fā)送來的讀請求將共享數(shù)據(jù)實時地分發(fā)至應(yīng)用程序,應(yīng)用程序間不會相互影響。
[0039]下面詳細(xì)介紹應(yīng)用程序讀取共享數(shù)據(jù)的具體實現(xiàn)過程。
[0040]具體地,應(yīng)用程序接收到通知來讀取數(shù)據(jù)時,存在兩種情況:(1)如果分類的共享數(shù)據(jù)無重復(fù),則獲取寫指針和讀指針之間的數(shù)據(jù),并移動讀指針指向?qū)懼羔樀奈恢谩?2)如果分類的共享數(shù)據(jù)有重復(fù),則獲取環(huán)形緩沖區(qū)中的所有數(shù)據(jù),并移動讀指針指向?qū)懼羔樀奈恢谩_@兩種情況讀取數(shù)據(jù)后的狀態(tài)都如圖2 (e)所示。
[0041]根據(jù)本發(fā)明實施例的用于CAN總線的數(shù)據(jù)分發(fā)方法,使用共享內(nèi)存段分類緩存CAN數(shù)據(jù)以及使用異步方式通知應(yīng)用程序來獲取數(shù)據(jù),至少具有以下有益效果:(1)為每個獲取數(shù)據(jù)的應(yīng)用程序維護(hù)相應(yīng)的附加信息,保證每個應(yīng)用程序獲取正確內(nèi)容和正確時序的數(shù)據(jù);(2)可以保證一個或多個應(yīng)用同時獲取同一類數(shù)據(jù),實現(xiàn)了數(shù)據(jù)的共享;(3)可以異步地分發(fā)CAN數(shù)據(jù),不會因為每個應(yīng)用程序獲取和處理數(shù)據(jù)的差異而影響數(shù)據(jù)分發(fā)的效率和流程;(4)可以實現(xiàn)高速率的CAN數(shù)據(jù)分發(fā)及大數(shù)據(jù)量時的CAN數(shù)據(jù)的高速率分發(fā)。
[0042]為了使得本發(fā)明的優(yōu)點更加明顯,下面舉例說明。
[0043]如圖3所示為應(yīng)用程序交互的工作流程圖。圖3的左邊部分的工作流程為當(dāng)CAN總線上有數(shù)據(jù)到來時,將共享數(shù)據(jù)寫入共享數(shù)據(jù)段并異步地通知應(yīng)用程序,任務(wù)完成則結(jié)束,任務(wù)未完成則繼續(xù)等待CAN總線上數(shù)據(jù)的到來并重復(fù)以上步驟;圖3的右邊部分的工作流程為應(yīng)用程序等待事件設(shè)置,收到數(shù)據(jù)到來通知后讀取共享數(shù)據(jù),讀取完成則結(jié)束,讀取未完成則繼續(xù)等待事件設(shè)置并重復(fù)上述步驟。
[0044]為了實現(xiàn)上述實施例,本發(fā)明還提出一種用于CAN總線的數(shù)據(jù)分發(fā)裝置。
[0045]圖4是根據(jù)本發(fā)明一個實施例的用于CAN總線的數(shù)據(jù)分發(fā)裝置的結(jié)構(gòu)圖。
[0046]如圖4所示,用于CAN總線的數(shù)據(jù)分發(fā)裝置包括:數(shù)據(jù)接收模塊100、分類存儲模塊200、異步通知模塊300、異步分發(fā)模塊400。
[0047]具體地,數(shù)據(jù)接收模塊100,用于接收CAN總線發(fā)送的共享數(shù)據(jù)。
[0048]分類存儲模塊200,用于將共享數(shù)據(jù)分類存儲至至少一個共享數(shù)據(jù)段中。其中,每個共享數(shù)據(jù)段均以環(huán)形緩沖區(qū)的形式存儲分類的共享數(shù)據(jù)。
[0049]環(huán)形緩沖區(qū)是嵌入式系統(tǒng)中十分重要的一種數(shù)據(jù)結(jié)構(gòu),顧名思義這個緩沖區(qū)是環(huán)形的,即用一個指針去訪問該緩沖區(qū)的最后一個內(nèi)存位置的后一位置時回到環(huán)形緩沖區(qū)的起點。
[0050]更具體地,在本發(fā)明的實施例中,環(huán)形緩沖區(qū)中包括一個寫指針和至少一個讀指針,寫指針指向下一個寫入位置,至少一個讀指針和至少一個應(yīng)用程序相對應(yīng),且每個讀指針為對應(yīng)的應(yīng)用程序所私有,并指向應(yīng)用程序?qū)?yīng)的下一個讀取位置。當(dāng)環(huán)形緩沖區(qū)處于初始狀態(tài)時,寫指針和讀指針指向同一位置,且寫指針在讀指針之前,具體如圖2 (a)所示。
[0051]下面詳細(xì)介紹將共享數(shù)據(jù)分類存儲至環(huán)形緩沖區(qū)的具體實現(xiàn)過程。
[0052]當(dāng)共享數(shù)據(jù)寫入環(huán)形緩沖區(qū)時,存在兩種情況:(1)如果分類的共享數(shù)據(jù)無重復(fù),當(dāng)寫入數(shù)據(jù)量小于寫指針到讀指針之間可寫入的數(shù)據(jù)量時,則分類存儲模塊200用于移動寫指針以寫入分類的共享數(shù)據(jù),且寫指針指向下一個寫入位置,寫指針在讀指針之前,如圖2 (b)所示;當(dāng)寫入數(shù)據(jù)量等于大于寫指針到讀指針之間可寫入的數(shù)據(jù)量時,則分類存儲模塊200用于移動寫指針以寫入分類的共享數(shù)據(jù),并且移動讀指針使其指向?qū)懼羔樦赶虻奈恢茫瑢懼羔樤谧x指針之前,如圖2 (c)所示。(2)如果分類的共享數(shù)據(jù)有重復(fù),則分類存儲模塊200用于移動寫指針以寫入分類的共享數(shù)據(jù),且寫指針指向下一個寫入位置,并移動讀指針指向?qū)懼羔樀奈恢?,讀指針在寫指針之前,如圖2 Cd)所示。
[0053]異步通知模塊300,用于至少一個共享數(shù)據(jù)段分別異步發(fā)送通知事件至至少一個應(yīng)用程序。
[0054]具體地,當(dāng)共享數(shù)據(jù)分類存儲至共享數(shù)據(jù)段后,異步地通知需要獲取共享數(shù)據(jù)的應(yīng)用程序獲取數(shù)據(jù),這樣應(yīng)用程序可以根據(jù)自己的需要來獲取、處理數(shù)據(jù)而不會對其它的應(yīng)用程序產(chǎn)生影響。
[0055]異步分發(fā)模塊400,用于至少一個共享數(shù)據(jù)段分別根據(jù)至少一個應(yīng)用程序的讀請求將對應(yīng)的分類的共享數(shù)據(jù)異步分發(fā)至對應(yīng)的至少一個應(yīng)用程序。
[0056]具體地,共享數(shù)據(jù)段根據(jù)應(yīng)用程序的讀請求異步發(fā)送共享數(shù)據(jù)至應(yīng)用程序,即每當(dāng)有應(yīng)用程序的讀請求時,共享數(shù)據(jù)段才發(fā)送共享數(shù)據(jù)。例如,如果有兩個應(yīng)用程序,它們獲取數(shù)據(jù)和處理數(shù)據(jù)的能力有所差異,那么共享數(shù)據(jù)段會根據(jù)應(yīng)用程序隨時發(fā)送來的讀請求將共享數(shù)據(jù)實時地分發(fā)至應(yīng)用程序,應(yīng)用程序間不會相互影響。
[0057]下面詳細(xì)介紹應(yīng)用程序讀取共享數(shù)據(jù)的具體實現(xiàn)過程。
[0058]具體地,應(yīng)用程序接收到通知來讀取數(shù)據(jù)時,存在兩種情況:(1)如果分類的共享數(shù)據(jù)無重復(fù),則異步分發(fā)模塊400用于獲取寫指針和讀指針之間的數(shù)據(jù),并移動讀指針指向?qū)懼羔樀奈恢谩?2)如果分類的共享數(shù)據(jù)有重復(fù),則異步分發(fā)模塊400用于獲取環(huán)形緩沖區(qū)中的所有數(shù)據(jù),并移動讀指針指向?qū)懼羔樀奈恢谩_@兩種情況讀取數(shù)據(jù)后的狀態(tài)都如圖2 (e)所示。
[0059]根據(jù)本發(fā)明實施例的用于CAN總線的數(shù)據(jù)分發(fā)裝置,至少具有以下有益效果:(I)為每個獲取數(shù)據(jù)的應(yīng)用程序維護(hù)相應(yīng)的附加信息,保證每個應(yīng)用程序獲取正確內(nèi)容和正確時序的數(shù)據(jù);(2)可以保證一個或多個應(yīng)用同時獲取同一類數(shù)據(jù),實現(xiàn)了數(shù)據(jù)的共享;(3)可以異步地分發(fā)CAN數(shù)據(jù),不會因為每個應(yīng)用程序獲取和處理數(shù)據(jù)的差異而影響數(shù)據(jù)分發(fā)的效率和流程;(4)可以實現(xiàn)高速率的CAN數(shù)據(jù)分發(fā)及大數(shù)據(jù)量時的CAN數(shù)據(jù)的高速率分發(fā)。
[0060]為了更加清晰、直觀的說明本發(fā)明的用于CAN總線的數(shù)據(jù)分發(fā)方法和裝置,下面介紹實現(xiàn)本發(fā)明的總體結(jié)構(gòu)。
[0061]如圖5所示,總體結(jié)構(gòu)包括了 CAN數(shù)據(jù)分發(fā)裝置與硬件驅(qū)動、CAN總線以及各個應(yīng)用程序,通過圖5可以從總體上了解它們之間的關(guān)系以及數(shù)據(jù)的流向情況。CAN數(shù)據(jù)分發(fā)裝置從硬件驅(qū)動獲取共享數(shù)據(jù)后分類緩存在共享數(shù)據(jù)段,然后通知相應(yīng)的應(yīng)用程序獲取數(shù)據(jù)。通過共享數(shù)據(jù)段的緩存可以實現(xiàn)數(shù)據(jù)的多應(yīng)用共享,緩存也可以防止數(shù)據(jù)的丟失。
[0062]在本說明書的描述中,參考術(shù)語“一個實施例”、“一些實施例”、“示例”、“具體示例”、或“一些示例”等的描述意指結(jié)合該實施例或示例描述的具體特征、結(jié)構(gòu)、材料或者特點包含于本發(fā)明的至少一個實施例或示例中。在本說明書中,對上述術(shù)語的示意性表述不一定指的是相同的實施例或示例。而且,描述的具體特征、結(jié)構(gòu)、材料或者特點可以在任何的一個或多個實施例或示例中以合適的方式結(jié)合。
[0063]盡管已經(jīng)示出和描述了本發(fā)明的實施例,本領(lǐng)域的普通技術(shù)人員可以理解:在不脫離本發(fā)明的原理和宗旨的情況下可以對這些實施例進(jìn)行多種變化、修改、替換和變型,本發(fā)明的范圍由權(quán)利要求及其等同物限定。
【權(quán)利要求】
1.一種用于CAN總線的數(shù)據(jù)分發(fā)方法,其特征在于,包括以下步驟: 接收CAN總線發(fā)送的共享數(shù)據(jù); 將所述共享數(shù)據(jù)分類存儲至至少一個共享數(shù)據(jù)段中; 所述至少一個共享數(shù)據(jù)段分別異步發(fā)送通知事件至至少一個應(yīng)用程序;以及 所述至少一個共享數(shù)據(jù)段分別根據(jù)所述至少一個應(yīng)用程序的讀請求將對應(yīng)的分類的所述共享數(shù)據(jù)異步分發(fā)至對應(yīng)的所述至少一個應(yīng)用程序。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,每個所述共享數(shù)據(jù)段以環(huán)形緩沖區(qū)的形式存儲分類的所述共享數(shù)據(jù)。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述環(huán)形緩沖區(qū)中包括一個寫指針和至少一個讀指針,所述寫指針指向下一個寫入位置,所述至少一個讀指針和所述至少一個應(yīng)用程序相對應(yīng),且每個所述讀指針為對應(yīng)的所述應(yīng)用程序所私有,并指向所述應(yīng)用程序?qū)?yīng)的下一個讀取位置。
4.根據(jù)權(quán)利要求2或3所述的方法,其特征在于,當(dāng)所述環(huán)形緩沖區(qū)處于初始狀態(tài)時,所述寫指針和所述讀指針指向同一位置,且所述寫指針在所述讀指針之前。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,如果分類的所述共享數(shù)據(jù)無重復(fù),則移動所述寫指針以寫入分類的所述共享數(shù)據(jù),且所述寫指針指向下一個寫入位置,所述寫指針在所述讀指針之前。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,如果分類的所述共享數(shù)據(jù)有重復(fù),則移動所述寫指針以寫入分類的所述共享數(shù)據(jù),且所述寫指針指向下一個寫入位置,并移動所述讀指針指向所述寫指針的位置,所述讀指針在所述寫指針之前。
7.根據(jù)權(quán)利要求4或5所述的方法,其特征在于,如果分類的所述共享數(shù)據(jù)無重復(fù),則獲取所述寫指針和所述讀指針之間的數(shù)據(jù),并移動所述讀指針指向所述寫指針的位置。
8.根據(jù)權(quán)利要求4或5所述的方法,其特征在于,如果分類的所述共享數(shù)據(jù)有重復(fù),則獲取所述環(huán)形緩沖區(qū)中的所有數(shù)據(jù),并移動所述讀指針指向所述寫指針的位置。
9.一種用于CAN總線的數(shù)據(jù)分發(fā)裝置,其特征在于,包括: 數(shù)據(jù)接收模塊,用于接收CAN總線發(fā)送的共享數(shù)據(jù); 分類存儲模塊,用于將所述共享數(shù)據(jù)分類存儲至至少一個共享數(shù)據(jù)段中; 異步通知模塊,用于所述至少一個共享數(shù)據(jù)段分別異步發(fā)送通知事件至至少一個應(yīng)用程序;以及 異步分發(fā)模塊,用于所述至少一個共享數(shù)據(jù)段分別根據(jù)所述至少一個應(yīng)用程序的讀請求將對應(yīng)的分類的所述共享數(shù)據(jù)異步分發(fā)至對應(yīng)的所述至少一個應(yīng)用程序。
10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,每個所述共享數(shù)據(jù)段以環(huán)形緩沖區(qū)的形式存儲分類的所述共享數(shù)據(jù)。
11.根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述環(huán)形緩沖區(qū)中包括一個寫指針和至少一個讀指針,所述寫指針指向下一個寫入位置,所述至少一個讀指針和所述至少一個應(yīng)用程序相對應(yīng),且每個所述讀指針為對應(yīng)的所述應(yīng)用程序所私有,并指向所述應(yīng)用程序?qū)?yīng)的下一個讀取位置。
12.根據(jù)權(quán)利要求10或11所述的裝置,其特征在于,當(dāng)所述環(huán)形緩沖區(qū)處于初始狀態(tài)時,所述寫指針和所述讀指針指向同一位置,且所述寫指針在所述讀指針之前。
13.根據(jù)權(quán)利要求12所述的裝置,其特征在于,如果分類的所述共享數(shù)據(jù)無重復(fù),則所述分類存儲模塊還用于:移動所述寫指針以寫入分類的所述共享數(shù)據(jù),且所述寫指針指向下一個寫入位置,所述寫指針在所述讀指針之前。
14.根據(jù)權(quán)利要求12所述的裝置,其特征在于,如果分類的所述共享數(shù)據(jù)有重復(fù),則所述分類存儲模塊還用于:移動所述寫指針以寫入分類的所述共享數(shù)據(jù),且所述寫指針指向下一個寫入位置,并移動所述讀指針指向所述寫指針的位置,所述讀指針在所述寫指針之N /.刖。
15.根據(jù)權(quán)利要求13或14所述的裝置,其特征在于,如果分類的所述共享數(shù)據(jù)無重復(fù),則所述異步分發(fā)模塊還用于:獲取所述寫指針和所述讀指針之間的數(shù)據(jù),并移動所述讀指針指向所述寫指針的位置。
16.根據(jù)權(quán)利要求13或14所述的裝置,其特征在于,如果分類的所述共享數(shù)據(jù)有重復(fù),則所述異步分發(fā)模塊還用于:獲取所述環(huán)形緩沖區(qū)中的所有數(shù)據(jù),并移動所述讀指針指向所述寫指針的位置。
【文檔編號】G06F9/54GK104346227SQ201310311915
【公開日】2015年2月11日 申請日期:2013年7月23日 優(yōu)先權(quán)日:2013年7月23日
【發(fā)明者】肖勇 申請人:比亞迪股份有限公司