新聞中心

        EEPW首頁 > 汽車電子 > 設計應用 > 基于代碼生成的車身網絡電控系統設計

        基于代碼生成的車身網絡電控系統設計

        作者: 時間:2010-12-09 來源:網絡 收藏


        LIN從機節點使用Freescale公司8位單片機MC9S08DZ60作為主控芯片,使用其SCI模塊連接LIN收發器TJAl020,再連接其他外圍執行器組成。LIN從機節點功能框圖如圖3所示。


        2.2 軟件建模
        目前,大多數單片機所支持的軟件編譯器均以C語言為主,而在C語言中沒有類及繼承等相關概念,同時出于可移植性的考慮,軟件模型采用分層思想。將整個設計的軟件結構分為4層:第0層為類型定義及中斷服務程序返回值的宏定義,第1層為單片機及其內部功能模塊類的抽象,第2層為外圍硬件類的抽象,第3層為各個節點類的抽象。上層的類通過調用下層類提供的函數實現特定功能,各層的依賴關系如圖4所示。其中,虛線表示調用關系。下面具體介紹第1~3層的建模方法。


        2.2.1 第1層一單片機及其內部功能模塊類的抽象
        第1層的函數功能通過對單片機寄存器的讀寫實現,故使用類的成員函數,將寄存器的讀寫代碼直接寫在成員函數Behavior屬性的Ini-tial框中。如使能S12中的MSCAN模塊的代碼如下:
        CANCTL1(MSCANx)|=CANCTlLl_CANE_MASK;
        其中的CANCTL1是為了便于對多個MSCAN模塊做統一處理,以及便于選擇使用某個特定模塊而手動編寫的函數宏。在使用時只需將MSCANx賦值為相應的整數值(對于MC9S12XSl28,可以是O~4)。
        2.2.2 第2層一外圍硬件類的抽象
        第2層需要調用第1層類的操作,這可以通過活動圖實現。在活動圖中,新建一個Action,根據需要選擇CallOperation(調用成員函數)或Call Behavior(調用活動圖的行為),再指定具體調用哪個成員函數或行為即可(調用的參數通過Action的Arguments屬性傳遞)。最后,將各個Action按照程序流程連接起來。
        這里,使用CAN協議(上層協議使用J1939)發送一個數據幀(活動圖略——編者注)。為了能夠實現行為圖(包括活動圖)的,必須將所有的行為圖及其元素都放在某個類中。活動圖經過轉換后生成的代碼如下所示:

        2.2.3 第3層一各個節點類的抽象
        除了同樣需要調用第1層、第2層類的操作之外,第3層還需要對中斷服務程序(ISR)進行建模。ISR的建模涉及兩個問題:ISR的返回值和ISR的定位。
        (1)ISR的返回值問題。CodeWarrior支持兩種ISR的聲明方式。一種是使用預編譯指令pragma定義一個TRAP_PROC符號,TRAP_PROC會提示編譯器下面的函數是ISR,編譯器會使用一個特殊的中斷返回指令來結束這個函數(一般是RTI指令)。此方法需要同時修改CodeWarrior工程中的PRM文件,將ISR與中斷向量表中的向量聯系起來,不便于使用UML建模。
        另一種是使用與C51類似的interrupt關鍵字,并指定相應的中斷向量號,這樣就同時完成了ISR的聲明和與中斷向量表的關聯。在EA中修改類的模板,添加一個衍型(stereotype)并命名為define,并添加相應的模板代碼。其核心部分代碼如下:

        修改完成后,在建模過程中只需將類的衍型設置為define,將類名設置為新定義的符號,類的父類設置為原符號即可。以CANO模塊的接收中斷的返回值為例,可將類名設置為ISR_CAN0_RX,將父類設置為interrupt 38void(此父類并不存在)。最后生成的代碼如下:
        #define ISR_CAN0_RX interrupt 38 void
        然后將ISR的返回值指定為ISR_CANO_RX即可。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 兴化市| 体育| 台东县| 武城县| 香河县| 融水| 蕉岭县| 来安县| 蓬安县| 嘉定区| 祁连县| 阿巴嘎旗| 青川县| 新津县| 宜宾县| 久治县| 班戈县| 荃湾区| 时尚| 宣汉县| 衡阳县| 安溪县| 石屏县| 梧州市| 三门县| 阳信县| 万荣县| 罗城| 会同县| 依兰县| 浑源县| 涟源市| 平泉县| 宜宾市| 武安市| 西峡县| 连平县| 专栏| 安丘市| 海丰县| 都江堰市|