新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 一種基于Salvo的通用CAN/LIN網關

        一種基于Salvo的通用CAN/LIN網關

        作者: 時間:2009-06-19 來源:網絡 收藏

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

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



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 固始县| 太原市| 通榆县| 寿阳县| 成都市| 广州市| 凭祥市| 乐安县| 海丰县| 宜良县| 龙州县| 晋江市| 汤原县| 临猗县| 麻江县| 蓬溪县| 甘德县| 通江县| 铁力市| 徐汇区| 万年县| 东阿县| 济阳县| 泗水县| 西乌珠穆沁旗| 金门县| 遂昌县| 调兵山市| 广宁县| 大悟县| 涡阳县| 宜兰县| 红原县| 濉溪县| 房产| 武定县| 绩溪县| 宣威市| 柘荣县| 丽江市| 深泽县|