久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > 基于LPC2119和μC/OSII 的CAN中繼器設計

基于LPC2119和μC/OSII 的CAN中繼器設計

作者: 時間:2016-10-08 來源:網絡 收藏

2.3 系統設計實現

嵌入式CAN中繼器主要實現兩路CAN總線數據之間相互轉發,并且可以根據實際需要,改變某一路CAN控制器的波特率。采用μC/OSII實時操作系統,整個設計由操作系統和一系列用戶應用程序構成。

主函數是程序首先執行的一個函數。該函數永遠不會返回,主要實現系統的硬件和操作系統的初始化。硬件包括中斷、鍵盤、顯示等初始化;操作系統包括任務控制快和事件控制快的初始化,而且在啟動多任務調度之前,必須至少創建一個任務。在此系統中創建了一個啟動任務,主要負責時鐘的初始化和啟動,中斷的啟動,CAN控制器的初始化及啟動及任務的劃分等。在交出CPU的使用權之后,只做一些空閑處理。

(1) 任務的劃分

要完成實時多任務的各種功能,必須對任務進行劃分。本程序根據各個任務的重要性和實時性,把程序分成六個具有不同優先級的任務,包括系統監控、數據轉發、鍵盤輸入、LED顯示、接收隊列監視和波特率設置。表1為任務劃分表。

除了6個主要應用任務之外,還有兩個中斷服務子程序:一個時鐘節拍中斷,用于提供周期性信號源;一個CAN接收中斷,用于把接收數據寫入環形緩沖區。

(2) 任務的同步與調度

通常多任務操作系統的任務不同于一般的函數,它是一個無限循環,而且沒有返回值。如果沒有更高優先級的任務進入就緒態,當前任務是不會放棄對CPU的使用權的。為了實現操作系統的正常運行和有關事件的同步,必須正確處理任務間的通信和事件標志的設置。整個系統的功能結構如圖2所示。

圖2系統功能結構

各個任務具有不同的優先級,通過調用系統掛起函數或延時函數,可以啟動具有更高優先級的進入就緒態的任務。在嵌入式CAN中繼器的設計中,通過對延時參數的設置,系統每隔一定的時鐘節拍,就啟動接收隊列監視任務,定期掃描環形緩沖區。一旦發現讀指針與寫指針不相等時,就將環形緩沖區中新接收到的數據存入TEMPBUF中,同時發送信號量SendSem。數據轉發任務接收到信號量,啟動運行,完成數據轉發功能。

數據轉發任務如下:void CANDATA_ExchangeTask(void *pdata)

{

#if OS_CRITICAL_METHOD == 3/* 給CPU狀態寄存器分配存儲器*/

OS_CPU_SRcpu_sr;

#endif

INT8U err;

pdata=pdata;/*避免編譯器警告*/

for(;;) {

OSSemPend (SendSem,0,err);/*等待發送信號量,若無信號則將本函數掛起,并啟動其他任務,如系統監控或鍵盤輸入或LED顯示等*/

if (CANNUM == CAN1) {/*判斷是哪一路總線接收到數據,如是CAN1,則向CAN2發送數據*/

ToSendData (TEMPBUF,FORTXBUF );/*將存放在TEMPBUF中的數據轉換成可用于發送的數據格式,存放在FORTXBUF中*/

CanSendData (CAN2,0x00,FORTXBUF);/*向另一路總線發送數據*/

}

else {

ToSendData (TEMPBUF,FORTXBUF );

CanSendData (CAN1,0x00,TXBUF);

}

}

}同樣,其他模塊功能——波特率的設置、系統的監控、信息的顯示等,也是通過任務間的通信—信號量的傳遞來實現的,以此來保證時間與任務的同步。

結語

μC/OSII實時操作系統在嵌入式硬件平臺的基礎上,用μC/OSII實時操作系統開發應用程序有其獨到之處,用戶可以直接利用系統的接口函數編寫自己的應用程序,不需另行開發,大大方便了用戶編程,縮短了軟件的開發周期,提高了開發效率。基于μC/OSII和LPC2119的CAN中繼器,在實驗調試過程中,運行狀況良好,工作穩定。


上一頁 1 2 下一頁

關鍵詞:

評論


相關推薦

技術專區

關閉