據(jù)之前,預(yù)定義待接收的數(shù)據(jù)來源標(biāo)識;
[0115]所述裝置還包括檢測模塊,用于接收模塊接收數(shù)據(jù)發(fā)送節(jié)點發(fā)送的包括至少一個數(shù)據(jù)成員的數(shù)據(jù)之后,若檢測到所述數(shù)據(jù)發(fā)送節(jié)點標(biāo)識與所述預(yù)定義的待接收的數(shù)據(jù)來源標(biāo)識匹配,觸發(fā)第一處理模塊執(zhí)行所述生成用于存儲所述數(shù)據(jù)成員的成員變量的步驟。
[0116]作為一種可選的實施方式,所述數(shù)據(jù)成員占用的存儲空間不大于所述生成的用于存儲所述數(shù)據(jù)成員的成員變量的占用的標(biāo)準(zhǔn)存儲空間。
[0117]作為一種可選的實施方式,所述裝置還包括修改模塊,用于第二處理模塊在所述成員變量所占用的內(nèi)存空間中存儲所述數(shù)據(jù)成員之后,發(fā)送模塊所述向數(shù)據(jù)接收節(jié)點發(fā)送所述結(jié)構(gòu)體變量之前,替換所述結(jié)構(gòu)體變量中存儲的所述數(shù)據(jù)成員為目標(biāo)數(shù)據(jù)成員。
[0118]可以看出,本發(fā)明實施例技術(shù)方案中,終端接收數(shù)據(jù)發(fā)送節(jié)點發(fā)送的包括至少一個數(shù)據(jù)成員的數(shù)據(jù),根據(jù)數(shù)據(jù)成員的不同生成不同的用于存儲所述數(shù)據(jù)成員的成員變量去分區(qū),并以指定位大小的方式確定所述成員變量占用的存儲空間為所述數(shù)據(jù)成員占用的存儲空間,然后生成包括所述成員變量的結(jié)構(gòu)體變量,并在所述成員變量所占用的內(nèi)存空間中存儲所述數(shù)據(jù)成員,最終向數(shù)據(jù)接收節(jié)點發(fā)送所述結(jié)構(gòu)體變量,以使數(shù)據(jù)接收節(jié)點在接收所述結(jié)構(gòu)體變量之后,直接提取所述結(jié)構(gòu)體變量中的所述數(shù)據(jù)成員,在本實施例中任意一個數(shù)據(jù)節(jié)點接收和發(fā)送數(shù)據(jù)時,直接將數(shù)據(jù)拷貝到結(jié)構(gòu)體變量中,無需進(jìn)行拆包和組包,進(jìn)而有利于提高數(shù)據(jù)處理效率、更好地利用數(shù)據(jù)空間。
[0119]請參考圖4,圖4是本發(fā)明第四實施例公開的一種數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖。本發(fā)明實施例的所述裝置可設(shè)置在在諸如智能手機(jī)、平板電腦、智能可穿戴設(shè)備、車載設(shè)備等帶通信網(wǎng)絡(luò)功能的終端中,如圖4所示,本發(fā)明實施例中的數(shù)據(jù)處理裝置包括:至少一個處理器401,例如CPU,至少一個接收器403,至少一個存儲器404,至少一個發(fā)送器405,至少一個通信總線402。其中,通信總線402用于實現(xiàn)這些組件之間的連接通信。其中,本發(fā)明實施例中裝置的接收器403和發(fā)送器405可以是有線發(fā)送端口,也可以為無線設(shè)備,例如包括天線裝置,用于與其他節(jié)點設(shè)備進(jìn)行信令或數(shù)據(jù)的通信。存儲器404可以是高速RAM存儲器,也可以是非不穩(wěn)定的存儲器(non-volatile memory),例如至少一個磁盤存儲器。存儲器404可選的還可以是至少一個位于遠(yuǎn)離前述處理器401的存儲裝置。存儲器404中存儲一組程序代碼,且處理器401用于調(diào)用存儲器中存儲的程序代碼,用于執(zhí)行以下操作:
[0120]接收數(shù)據(jù)發(fā)送節(jié)點發(fā)送的包括至少一個數(shù)據(jù)成員的數(shù)據(jù)。
[0121]可以理解地,當(dāng)CAN總線上的一個節(jié)點(站)發(fā)送數(shù)據(jù)時,它以報文形式廣播給網(wǎng)絡(luò)中所有節(jié)點。對每個節(jié)點來說,無論數(shù)據(jù)是否是發(fā)給自己的,都對其進(jìn)行接收。每組報文開頭為標(biāo)識符,定義了報文的優(yōu)先級,這種報文格式稱為面向內(nèi)容的編址方案,在同一系統(tǒng)中標(biāo)識符是唯一的,不可能有兩個站發(fā)送具有相同標(biāo)識符的報文。當(dāng)一個站要向其它站發(fā)送數(shù)據(jù)時,該站的CPU將要發(fā)送的數(shù)據(jù)和自己的標(biāo)識符傳送給本站的CAN芯片,并處于準(zhǔn)備狀態(tài);當(dāng)它收到總線分配時,轉(zhuǎn)為發(fā)送報文狀態(tài)。CAN芯片將數(shù)據(jù)根據(jù)協(xié)議組織成一定的報文格式發(fā)出,這時網(wǎng)上的其它站處于接收狀態(tài)。每個處于接收狀態(tài)的站對接收到的報文進(jìn)行檢測,判斷這些報文是否是發(fā)給自己的,以確定是否接收它。
[0122]所述處理器401,還用于生成用于存儲所述數(shù)據(jù)成員的成員變量,并確定所述成員變量占用的存儲空間為所述數(shù)據(jù)成員占用的存儲空間。
[0123]可以理解地,根據(jù)所述數(shù)據(jù)成員的不同生成用于存儲所述數(shù)據(jù)成員的不同的成員變量,由成員變量名即可知道每個數(shù)據(jù)成員的含義,解決了現(xiàn)有技術(shù)中,傳統(tǒng)數(shù)組方式在沒有保溫對照的情況下不知道每個字節(jié)所代表的含義以及每位代表的含義。
[0124]所述處理器401,還用于生成包括所述成員變量的結(jié)構(gòu)體變量,并在所述成員變量所占用的內(nèi)存空間中存儲所述數(shù)據(jù)成員。
[0125]所述處理器401,還用于數(shù)據(jù)接收節(jié)點發(fā)送所述結(jié)構(gòu)體變量,所述結(jié)構(gòu)體變量用于指示數(shù)據(jù)接收節(jié)點在接收所述結(jié)構(gòu)體變量之后,提取所述結(jié)構(gòu)體變量中的所述數(shù)據(jù)成員。
[0126]作為一種可選的實施方式,在所述成員變量所占用的內(nèi)存空間中存儲所述數(shù)據(jù)成員包括:
[0127]確定所述數(shù)據(jù)成員的存儲格式;
[0128]在所述成員變量所占用的內(nèi)存空間中按照所述存儲格式存儲所述數(shù)據(jù)成員。
[0129]可以理解的,一般情況下,在定義CAN總線信號定義時,都會明確定義字節(jié)的發(fā)送順序,即:以首先發(fā)送匕7七60(1^13),然后匕7七61,匕7七62,......byte7(MSB)的發(fā)送順序;還是以首先發(fā)送byte7(MSB),然后byte6,byte5,……byteO(LSB)的發(fā)送順序。目前,在實踐和研究過程中發(fā)現(xiàn),多個主機(jī)廠定義的CAN總線字節(jié)發(fā)送順序均為前者,即首先發(fā)送LSB,最后發(fā)送MSB ο
[0130]采用Intel格式編碼的CAN總線信號為:當(dāng)一個信號的數(shù)據(jù)長度不超過1個字節(jié)(8位)并且信號在一個字節(jié)內(nèi)實現(xiàn)(即,該信號沒有跨字節(jié)實現(xiàn))時,該信號的高位將被放在該字節(jié)的高位,信號的低位將被放在該字節(jié)的低位,這樣,信號的起始位就是該字節(jié)的低位;當(dāng)一個信號的數(shù)據(jù)長度超過1個字節(jié)(8位)或者數(shù)據(jù)長度不超過一個字節(jié)但是采用跨字節(jié)方式實現(xiàn)時,該信號的高位將被放在高字節(jié)(MSB)的高位,信號的低位將被放在低字節(jié)(LSB)的低位,這樣,信號的起始位就是低字節(jié)的低位。采用Motel格式編碼的CAN總線信號為:當(dāng)一個信號的數(shù)據(jù)長度不超過1個字節(jié)(8位)并且信號在一個字節(jié)內(nèi)實現(xiàn)(S卩,該信號沒有跨字節(jié)實現(xiàn))時,信號的高位將被放在該字節(jié)的高位,信號的低位將被放在該字節(jié)的低位,這樣,信號的起始位就是該字節(jié)的低位。當(dāng)一個信號的數(shù)據(jù)長度超過1個字節(jié)(8位)或者數(shù)據(jù)長度不超過一個字節(jié)但是采用跨字節(jié)方式實現(xiàn)時,該信號的高位將被放在低字節(jié)(MSB)的高位,信號的低位將被放在高字節(jié)(LSB)的低位,這樣,信號的起始位就是高字節(jié)的低位。
[0131]因為結(jié)構(gòu)的存儲格式可以設(shè)置,因此通過設(shè)置結(jié)構(gòu)體的存儲格式即可實現(xiàn)Intel傳輸格式與Motel傳輸格式的改變。
[0132]作為一種可選的實施方式,所述生成包括所述成員變量的結(jié)構(gòu)體變量之前,還包括:
[0133]確定包括所述成員變量的結(jié)構(gòu)體變量的指定對齊值。
[0134]可以理解地,結(jié)構(gòu)體是一種復(fù)合數(shù)據(jù)類型,其構(gòu)成元素既可以是基本數(shù)據(jù)類型(如整形int、長整形long、浮點float等)的變量,也可以是一些復(fù)合數(shù)據(jù)類型(如數(shù)組、結(jié)構(gòu)、聯(lián)合等)的數(shù)據(jù)單元。在結(jié)構(gòu)中,編譯器為結(jié)構(gòu)的每個成員按其自然邊界分配空間,各個成員按照它們被聲明的順序在內(nèi)存中順序存儲,第一個成員的地址和整個結(jié)構(gòu)的地址相同,為了使CPU能夠?qū)ψ兞窟M(jìn)行快速的訪問,變量的起始地址應(yīng)該具有某些特性,即所謂的“對齊”,比如4字節(jié)的int型,其起始地址應(yīng)該位于4字節(jié)的邊界上,即起始地址能夠被4整除。字節(jié)對齊的作用不僅是便于CPU快速訪問,同時也可以通過合理地利用字節(jié)對齊實現(xiàn)有效地節(jié)省存儲空間。CAN數(shù)據(jù)傳輸采用短幀結(jié)構(gòu),每一幀的有效字節(jié)為8個,當(dāng)給定的數(shù)據(jù)不超過8個字節(jié)時,可以使用CAN數(shù)據(jù)幀的全部的8個字節(jié),當(dāng)給定的數(shù)據(jù)超過8個字節(jié)時,可以通過多個CAN數(shù)據(jù)幀實現(xiàn)數(shù)據(jù)傳輸。
[0135]作為一種可選的實施方式,所述接受的數(shù)據(jù)攜帶所述數(shù)據(jù)發(fā)送節(jié)點標(biāo)識;
[0136]所述接收數(shù)據(jù)發(fā)送節(jié)點發(fā)送的包括至少一個數(shù)據(jù)成員的數(shù)據(jù)之前,所述方法還包括:
[0137]預(yù)定義待接收的數(shù)據(jù)來源標(biāo)識;
[0138]所述接收數(shù)據(jù)發(fā)送節(jié)點發(fā)送的包括至少一個數(shù)據(jù)成員的數(shù)據(jù)之后,還包括:
[0139]若檢測到所述數(shù)據(jù)發(fā)送節(jié)點標(biāo)識與所述預(yù)定義的待接收的數(shù)據(jù)來源標(biāo)識匹配,觸發(fā)執(zhí)行所述生成用于存儲所述數(shù)據(jù)成員的成員變量的步驟。
[0140]作為一種可選的實施方式,所述數(shù)據(jù)成員占用的存儲空間不大于所述生成的用于存儲所述數(shù)據(jù)成員的成員變量的占用的標(biāo)準(zhǔn)存儲空間。
[0141]作為一種可選的實施方式,在所述成員變量所占用的內(nèi)存空間中存儲所述數(shù)據(jù)成員之后,所述向數(shù)據(jù)接收節(jié)點發(fā)送所述結(jié)構(gòu)體變量之前,還包括:
[0142]替換所述結(jié)構(gòu)體變量中存儲的所述數(shù)據(jù)成員為目標(biāo)數(shù)據(jù)成員。
[0143]可以看出,本發(fā)明實施例技術(shù)方案中,終端接收數(shù)據(jù)發(fā)送節(jié)點發(fā)送的包括至少一個數(shù)據(jù)成員的數(shù)據(jù),根據(jù)數(shù)據(jù)成員的不同生成不同的用于存