基于LPC2119和μC/OSII 的CAN中繼器設計
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中繼器,在實驗調試過程中,運行狀況良好,工作穩定。


![[Android開發視頻教學]調試程序(17)](http://editerupload.eepw.com.cn/201010/683c167fad51533886b36639ff2dafb2.jpg)

![[Android開發視頻教學]Handler的使用(二)(15)](http://editerupload.eepw.com.cn/201010/060036606db1d754da56db282c235876.jpg)



![[Android開發視頻教學]SQLite使用方法(16)](http://editerupload.eepw.com.cn/201010/fea269731ea0ed920e4ec7e9e0fc592e.jpg)
![[Android開發視頻教學]文件下載(18)](http://editerupload.eepw.com.cn/201010/1cb9881533ef9443d97dc579762a9f8f.jpg)

![[Android開發視頻教學]Handler的使用(一)(14)](http://editerupload.eepw.com.cn/201010/eb9c23b6c856aeea242e44a15bb33adf.jpg)


評論