1.一種汽車CAN總線網(wǎng)關(guān)的報(bào)文收發(fā)方法,其特征是,包括:
步驟(1):針對CAN報(bào)文的接收和發(fā)送分別定義軟件接收緩沖區(qū)和軟件發(fā)送緩沖區(qū),
所述軟件接收緩沖區(qū)由報(bào)文接收中斷服務(wù)程序和軟件接收緩沖區(qū)管理子模塊管理;
所述軟件發(fā)送緩沖區(qū)由報(bào)文發(fā)送函數(shù)、報(bào)文發(fā)送中斷服務(wù)程序和軟件發(fā)送緩沖區(qū)管理子模塊管理;
軟件發(fā)送緩沖區(qū)管理子模塊和軟件接收緩沖區(qū)管理子模塊組成軟件緩沖區(qū)管理模塊;
步驟(2):在軟件緩沖區(qū)管理模塊中,若接收到信號(hào),首先判斷信號(hào)是否是接收到新報(bào)文,若是則進(jìn)入軟件接收緩沖區(qū)管理子模塊;如果否,則進(jìn)入步驟(3);
步驟(3):進(jìn)一步判斷接收到的信號(hào)是否是硬件發(fā)送緩沖區(qū)未滿,若是就進(jìn)入軟件發(fā)送緩沖區(qū)管理子模塊;若否就結(jié)束。
2.如權(quán)利要求1所述的一種汽車CAN總線網(wǎng)關(guān)的報(bào)文收發(fā)方法,其特征是,
所述軟件接收緩沖區(qū)和軟件發(fā)送緩沖區(qū)均為結(jié)構(gòu)體數(shù)組,結(jié)構(gòu)體數(shù)組包括報(bào)文ID、報(bào)文長度和報(bào)文數(shù)據(jù)。
3.如權(quán)利要求1所述的一種汽車CAN總線網(wǎng)關(guān)的報(bào)文收發(fā)方法,其特征是,
軟件接收緩沖區(qū)對應(yīng)的結(jié)構(gòu)體數(shù)組為接收數(shù)組;軟件發(fā)送緩沖區(qū)對應(yīng)的結(jié)構(gòu)體數(shù)組為發(fā)送數(shù)組。
4.如權(quán)利要求1所述的一種汽車CAN總線網(wǎng)關(guān)的報(bào)文收發(fā)方法,其特征是,
接收數(shù)組和發(fā)送數(shù)組的長度根據(jù)CAN網(wǎng)絡(luò)負(fù)載率進(jìn)行設(shè)置,保證在CAN網(wǎng)絡(luò)正常通信的情況下,不會(huì)出現(xiàn)緩沖區(qū)溢出的情形。
5.如權(quán)利要求1所述的一種汽車CAN總線網(wǎng)關(guān)的報(bào)文收發(fā)方法,其特征是,
數(shù)組元素通過索引進(jìn)行尋址,接收數(shù)組和發(fā)送數(shù)組均分別包括兩個(gè)索引:存入索引和取出索引;將索引加一時(shí),判斷索引值是否等于數(shù)組長度,如果索引值等于數(shù)組長度,將索引值置零。
6.如權(quán)利要求1所述的一種汽車CAN總線網(wǎng)關(guān)的報(bào)文收發(fā)方法,其特征是,
所述步驟(2)進(jìn)入軟件接收緩沖區(qū)管理子模塊后的步驟為:
步驟(201):判斷存入索引是否等于取出索引,若是就結(jié)束;若否就進(jìn)入步驟(202);
步驟(202):讀取接收數(shù)組中由取出索引標(biāo)記的元素;
步驟(203):對報(bào)文進(jìn)行處理,將取出的索引加一;判斷取出索引是否等于數(shù)組長度,若等于就將取出索引值置零,然后返回步驟(201);否則直接返回步驟(201)。
7.如權(quán)利要求1所述的一種汽車CAN總線網(wǎng)關(guān)的報(bào)文收發(fā)方法,其特征是,
所述步驟(3)進(jìn)入軟件發(fā)送緩沖區(qū)任務(wù)管理子模塊后的步驟為:
步驟(301):判斷存入索引是否等于取出索引,若是就禁止報(bào)文發(fā)送中斷,結(jié)束;若否就進(jìn)入步驟(302);
步驟(302):判斷CAN控制器硬件發(fā)送緩沖區(qū)是否已滿,若是就結(jié)束;若否就進(jìn)入步驟(303);
步驟(303):將發(fā)送數(shù)組中由取出索引標(biāo)記的數(shù)組元素賦值到CAN控制器的寄存器;將取出索引加一;判斷取出索引值是否等于數(shù)組長度;若是就將取出索引置零,然后返回步驟(301),若否就直接返回步驟(301)。
8.如權(quán)利要求1所述的一種汽車CAN總線網(wǎng)關(guān)的報(bào)文收發(fā)方法,其特征是,
所述步驟(1)與步驟(2)之間還有步驟(10);所述步驟(10)包括:
步驟(101):當(dāng)發(fā)送報(bào)文時(shí),根據(jù)CAN控制器的寄存器判斷硬件發(fā)送緩沖區(qū)是否已滿,若未滿,則將待發(fā)送的報(bào)文填充到硬件發(fā)送緩沖區(qū),CAN控制器自動(dòng)完成報(bào)文發(fā)送任務(wù);若已滿,則將待發(fā)送報(bào)文存入軟件發(fā)送緩沖區(qū),將存入索引加一,同時(shí)開啟CAN報(bào)文發(fā)送中斷;若存入索引值等于接收數(shù)組的長度,則將存入索引值置零;
當(dāng)CAN控制器成功發(fā)送報(bào)文后,觸發(fā)報(bào)文發(fā)送中斷,在CAN報(bào)文發(fā)送中斷服務(wù)程序中,向軟件緩沖區(qū)管理模塊發(fā)送硬件發(fā)送緩沖區(qū)未滿信號(hào);
步驟(102):當(dāng)接收報(bào)文時(shí),在CAN報(bào)文接收中斷服務(wù)程序中,將CAN控制器硬件接收緩沖區(qū)中的數(shù)據(jù)存入由存入索引尋址的軟件接收緩沖區(qū),向軟件緩沖區(qū)管理模塊發(fā)送接收到新報(bào)文的信號(hào),同時(shí)將存入索引加一,若存入索引值等于接收數(shù)組的長度,則將存入索引值置零。
9.一種汽車CAN總線網(wǎng)關(guān)的報(bào)文收發(fā)系統(tǒng),其特征是,包括:
CAN控制器,所述CAN控制器與物理層芯片連接,所述物理層芯片與總線連接,所述CAN控制器上有硬件接收緩沖區(qū)和硬件發(fā)送緩沖區(qū);
MCU,設(shè)有軟件接收緩沖區(qū)和軟件發(fā)送緩沖區(qū),所述軟件接收緩沖區(qū)由報(bào)文接收中斷服務(wù)程序和軟件接收緩沖區(qū)管理子模塊管理;所述軟件發(fā)送緩沖區(qū)由報(bào)文發(fā)送函數(shù)、報(bào)文發(fā)送中斷服務(wù)程序和軟件發(fā)送緩沖區(qū)管理子模塊管理;軟件發(fā)送緩沖區(qū)管理子模塊和軟件接收緩沖區(qū)管理子模塊組成軟件緩沖區(qū)管理模塊;
在軟件緩沖區(qū)管理模塊中,若接收到信號(hào),首先判斷信號(hào)是否是接收到新報(bào)文,若是則進(jìn)入軟件接收緩沖區(qū)管理子模塊;如果否,則進(jìn)一步判斷接收到的信號(hào)是否是硬件發(fā)送緩沖區(qū)未滿,若是就進(jìn)入軟件發(fā)送緩沖區(qū)管理子模塊;若否就結(jié)束。
10.如權(quán)利要求9所述的系統(tǒng),其特征是,
當(dāng)發(fā)送報(bào)文時(shí),根據(jù)CAN控制器的寄存器判斷硬件發(fā)送緩沖區(qū)是否已滿,若未滿,則將待發(fā)送的報(bào)文填充到硬件發(fā)送緩沖區(qū),CAN控制器自動(dòng)完成報(bào)文發(fā)送任務(wù);若已滿,則將待發(fā)送報(bào)文存入軟件發(fā)送緩沖區(qū),將存入索引加一,同時(shí)開啟CAN報(bào)文發(fā)送中斷;若存入索引值等于接收數(shù)組的長度,則將存入索引值置零;
當(dāng)CAN控制器成功發(fā)送報(bào)文后,觸發(fā)報(bào)文發(fā)送中斷,在CAN報(bào)文發(fā)送中斷服務(wù)程序中,向軟件緩沖區(qū)管理模塊發(fā)送硬件發(fā)送緩沖區(qū)未滿信號(hào);
當(dāng)接收報(bào)文時(shí),在CAN報(bào)文接收中斷服務(wù)程序中,將CAN控制器硬件接收緩沖區(qū)中的數(shù)據(jù)存入由存入索引尋址的軟件接收緩沖區(qū),向軟件緩沖區(qū)管理模塊發(fā)送接收到新報(bào)文的信號(hào),同時(shí)將存入索引加一,若存入索引值等于接收數(shù)組的長度,則將存入索引值置零。