新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 一種基于Salvo的通用CAN/LIN網(wǎng)關(guān)

        一種基于Salvo的通用CAN/LIN網(wǎng)關(guān)

        作者: 時(shí)間:2009-06-19 來(lái)源:網(wǎng)絡(luò) 收藏

        4 軟件
        CAN總線與LIN總線比較相似,比較接近,軟件數(shù)據(jù)處理量不大;而且,軟件本身功能相對(duì)單一,一般不需要操作系統(tǒng)支持。但本文討論的是一個(gè)網(wǎng)關(guān),針對(duì)不同場(chǎng)合系統(tǒng)功能需要適當(dāng)?shù)牟眉艉蛿U(kuò)充,有操作系統(tǒng)的支持更便于系統(tǒng)功能的裁剪和擴(kuò)充,提高系統(tǒng)的可移植性,增加系統(tǒng)性。另外,有操作系統(tǒng)的支持系統(tǒng)開(kāi)發(fā)時(shí)間大大縮短,而且可靠性也大大提高。
        4.1
        系統(tǒng)軟件開(kāi)發(fā)采用RTOS會(huì)占用部分系統(tǒng)硬件資源,目前大多數(shù)RTOS 適用于ARM 或X86 等可配備豐富硬件資源的微處理器系統(tǒng)。 占用系統(tǒng)硬件資源少,且功能強(qiáng)大,適合硬件資源相對(duì)貧乏的,尤其是存儲(chǔ)器資源貧乏的 系列 占用程序存儲(chǔ)器容量取決于用戶調(diào)用的系統(tǒng)函數(shù),一般典型系統(tǒng)占用1~2K 程序存儲(chǔ)器。占用數(shù)據(jù)存儲(chǔ)器容量取決于用戶定義的變量、和事件的數(shù)量,以16 系列為例,每個(gè)全局變量占10b,占5b,事件占3b,一般典型系統(tǒng)占用50~100b 數(shù)據(jù)存儲(chǔ)器。
        Salvo 是一個(gè)優(yōu)先級(jí)切換,支持事件驅(qū)動(dòng)的多任務(wù)實(shí)時(shí)操作系統(tǒng)。Salvo 共支持16 個(gè)任務(wù)優(yōu)先級(jí),且多個(gè)任務(wù)可以共用一個(gè)優(yōu)先級(jí),任務(wù)按優(yōu)先級(jí)高低切換,對(duì)于多個(gè)同一優(yōu)先級(jí)的任務(wù),以時(shí)間片循環(huán)方式切換。Salvo 支持任務(wù)和事件的數(shù)量不限,取決于RAM 的大小。
        4.2 任務(wù)分割及功能確定
        RTOS 的軟件開(kāi)發(fā)主要工作是任務(wù)分割、任務(wù)功能確定和任務(wù)代碼編寫(xiě)。任務(wù)分割的基本原則是任務(wù)內(nèi)的內(nèi)聚度強(qiáng)而任務(wù)間的偶合性弱。為減少Salvo在任務(wù)切換時(shí)占用過(guò)多的系統(tǒng)資源,任務(wù)分割盡量減少任務(wù)數(shù),系統(tǒng)分割成5個(gè)任務(wù)(參見(jiàn)圖4):

        CAN_TXD任務(wù):由ENCANTXD信號(hào)觸發(fā),將經(jīng)PDU_Conversion任務(wù)轉(zhuǎn)換的數(shù)據(jù)送到CAN模塊的發(fā)送緩沖寄存器,并啟動(dòng)CAN發(fā)送器發(fā)送數(shù)據(jù)。
        CAN_RXD任務(wù):由ISR_CANRXD中斷服務(wù)程序發(fā)送ENCANRXD事件觸發(fā),接收CAN模塊接收緩沖器的數(shù)據(jù),發(fā)送CANTOLIN信號(hào)觸發(fā)PDU_Conversion任務(wù)。
        LIN_RXD任務(wù):由ISR_LINRXD中斷服務(wù)程序發(fā)送ENLINRXD事件觸發(fā),接收USART模塊發(fā)送來(lái)的數(shù)據(jù)。根據(jù)LIN協(xié)議分析標(biāo)識(shí)場(chǎng)確定報(bào)文的內(nèi)容和長(zhǎng)度,分析校驗(yàn)和場(chǎng)確定報(bào)文的正確性,發(fā)送LINTOCAN信號(hào)觸發(fā)PDU_Conversion任務(wù)。
        LIN¬_TXD任務(wù):由ENLINTXD信號(hào)觸發(fā),將經(jīng)PDU_Conversion任務(wù)轉(zhuǎn)換的數(shù)據(jù)送到USART模塊,并控制USART模塊安LIN協(xié)議發(fā)送數(shù)據(jù)。
        PDU_Conversion任務(wù):由LINTOCAN或CANTOLIN信號(hào)觸發(fā),將SDU轉(zhuǎn)換成CAN或LIN,并通過(guò)ENCANTXD信號(hào)或ENNLINTXD信號(hào)觸發(fā)CAN_TXD任務(wù)或LIN_TXD任務(wù)向CAN總線或LIN總線發(fā)送數(shù)據(jù)。
        4.3 任務(wù)間通信及任務(wù)優(yōu)先級(jí)
        現(xiàn)場(chǎng)總線一般對(duì)實(shí)時(shí)性要求較高,為提高系統(tǒng)的實(shí)時(shí)性,減少數(shù)據(jù)在網(wǎng)關(guān)的延時(shí),系統(tǒng)采用中斷方式接收CAN總線和LIN總線的數(shù)據(jù)。若CAN總線上有節(jié)點(diǎn)發(fā)送數(shù)據(jù),網(wǎng)關(guān)的CAN模塊接收器接收數(shù)據(jù),存于信息集中緩沖器MAB,同時(shí)根據(jù)接收屏蔽器信息,比較接收過(guò)濾器與接收信息標(biāo)示區(qū)是否相符,若相符將信息集中緩沖器信息裝入接收緩沖器(RXB0或RXB1,18F4680的CAN模塊有兩個(gè)接收緩沖器),并通過(guò)中斷標(biāo)志寄存器PIR3的RXB0IF或RXB1IF(CAN模塊接收緩沖器中斷標(biāo)志位)申請(qǐng)中斷,CPU進(jìn)入ISR_CANRXD中斷服務(wù)程序,在ISR_CANRXD中發(fā)送ENCANRXD事件觸發(fā)CAN_RXD任務(wù)啟動(dòng)。CAN_RXD任務(wù)讀取接收緩沖器中SDU數(shù)據(jù),存入一個(gè)CANSDU全局?jǐn)?shù)組,并發(fā)送CANTOLIN信號(hào)觸發(fā)PDU_Conversion任務(wù)啟動(dòng)。PDU_Conversion任務(wù)接收全局?jǐn)?shù)組CANSDU數(shù)據(jù),轉(zhuǎn)換成LIN總線的協(xié)議數(shù)據(jù)單元,存于LINPDU全局?jǐn)?shù)組,并發(fā)送ENLINTXD信號(hào)觸發(fā)LIN_TXD任務(wù)啟動(dòng)。LIN_TXD任務(wù)接收全局?jǐn)?shù)組LINPDU數(shù)據(jù),控制USART模塊按LIN總線協(xié)議發(fā)送數(shù)據(jù)。以上是網(wǎng)關(guān)從CAN總線接收數(shù)據(jù)發(fā)送到LIN總線的各任務(wù)同步及通信過(guò)程,網(wǎng)關(guān)從LIN總線接收數(shù)據(jù)發(fā)送到CAN總線的各任務(wù)同步及通信過(guò)程基本與其相似。



        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 调兵山市| 财经| 张家川| 沙洋县| 盐池县| 台南市| 东乌珠穆沁旗| 老河口市| 四平市| 开封县| 英吉沙县| 始兴县| 绿春县| 大洼县| 青州市| 蓬溪县| 木里| 多伦县| 汤原县| 泌阳县| 兰考县| 驻马店市| 准格尔旗| 呼伦贝尔市| 财经| 玉屏| 离岛区| 邻水| 山阳县| 剑阁县| 绥棱县| 广元市| 襄汾县| 全州县| 颍上县| 班玛县| 城步| 呼和浩特市| 渝北区| 镇雄县| 大城县|