基于代碼生成的車身網絡電控系統設計
(2)ISR的定位問題。中斷服務程序的聲明和定義都必須定位于non-banked區域,通過使用“#pragma CODE_SEG NON_BANKED”實現。同時,中斷服務程序末尾需要添加“#pragma CODE_SEG DEFAULT”,否則后面的函數也會被定位在non-banked區域而導致錯誤。因此,中斷服務程序必須被“#pragma CODE_SEG NON_BANKED”和“#pragma CODE_SEG DEFAULT”包圍起來。這也可通過修改代碼生成模板實現。結合ISR返回值的宏定義,只需在當函數返回值的前3個字符是“ISR”時,在函數前后輸出上述兩條pragma預編譯指令即可。生成ISR聲明的代碼生成模板的核心部分如下:

仍以上述CAN0模塊的接收中斷為例,最終生成的函數聲明如下;

3 調試與驗證
本設計除了使用USBCAN卡作為數據采集節點以外,為了驗證兩種總線協議的實現是否符合標準,更直觀地查看總線幀中各個字段的值以及隨時檢測總線上是否發生幀錯誤等,使用PC示波器PicoScope 5203搭配總線協議分析軟件WaveBPS捕獲兩種總線信號并進行協議分析。Pi-coScope的兩個通道可同時捕獲CAN總線及LIN總線上的信號,進一步方便了網關節點的調試。
圖5為在控制面板節點(源地址為0x26)打開左轉向燈時發送給車燈節點(目標地址為0x20)的CAN數據幀。其中,標記為S的位是根據位填充規則自動插入的填充位。圖6為車燈節點收到上述CAN數據幀后,根據網關路由策略及幀轉換規則,發送到LIN總線上的數據幀。本文引用地址:http://www.czjhyjcfj.com/article/197566.htm
4 結論
本設計借助EA的代碼生成功能,通過修改代碼生成模板以滿足車身網絡電控系統開發中C語言及編譯器的要求,進行了車身網絡系統的開發和初步實驗驗證。此方法極大地方便了設計開發,并可提高系統的可靠性。
評論