基于LPC2292的汽車(chē)智能組合儀表設計
每個(gè)任務(wù)在建立時(shí)均分配一個(gè)優(yōu)先級(范圍為0 ~63, 0為最高,63為最低)。這6個(gè)任務(wù)的優(yōu)先級依次分配為1, 2, 3, 4, 5, 6;報警任務(wù)需要及時(shí)響應,具有最高的優(yōu)先級;而里程顯示、存儲任務(wù)優(yōu)先級最低。較高優(yōu)先級的任務(wù)必須調用至少一項系統服務(wù)而暫時(shí)放棄CPU的使用權,否則低優(yōu)先級任務(wù)無(wú)法得到運行。
任務(wù)的一般結構如下:
void UserTask (void *pdata)
{ for(;;)
{調用μC /OS II的某種系統服務(wù):
OSMboxPend ( )/OSMboxPost ( );(1)
OSQPend ( )/OSQPost ( ); (2)
OSSemPend ( )/OSSemPend ( ): (3)
OSTaskDel (OS PRIG SELF);(4)
OSTaskSuspend (OS_ PR工OSELF); (5)
OSTimeDly( )/OSTimeDlyHMSM(); (6)
}}
(1)-(6)是一些主要的系統服務(wù)函數,這些函數里均進(jìn)行一次任務(wù)調度,或者可能會(huì )使當前任務(wù)放棄CPU使用權而運行其他的任務(wù)。用戶(hù)任務(wù)必須至少調用一個(gè)服務(wù)函數。
另外程序還有5個(gè)用C語(yǔ)言編寫(xiě)的用戶(hù)中斷服務(wù)程序:一個(gè)CAN接收中斷(用于接收總線(xiàn)信息)、4個(gè)定時(shí)器輸出比較中斷(用于產(chǎn)生驅動(dòng)步進(jìn)電機的周期性脈沖)。
因此本例程序可以這樣規劃,首先調用OSInit(),對μC /OS-II做初始化,然后創(chuàng )建一個(gè)信號量,因為后面的任務(wù)都要用到Printp( )函數,而Printp( )是一個(gè)不可重入函數,調用前要防止多個(gè)任務(wù)同時(shí)調用,這個(gè)信號量用于保護Printp()函數。接著(zhù)創(chuàng )建6個(gè)任務(wù),并對這6個(gè)任務(wù)分配優(yōu)先級,最后調用OSStart ( )以啟動(dòng)內核,于是任務(wù)在操作系統的管理和調度下運行和切換。圖2是程序的簡(jiǎn)要流程圖。
圖2 程序流程圖
4 結束語(yǔ)
隨著(zhù)汽車(chē)電氣系統的總線(xiàn)化,高集成、嵌入式、總線(xiàn)化是汽車(chē)儀表發(fā)展的必然趨勢?;?a class="contentlabel" href="http://dyxdggzs.com/news/listbylabel/label/LPC2292">LPC2292的汽車(chē)智能組合儀表,實(shí)時(shí)顯示和保存車(chē)速、發(fā)動(dòng)機轉速、水溫、油位、總里程、子里程等車(chē)況參數,使汽車(chē)具有“黑匣子”功能。并且采用CAN總線(xiàn)建立通信網(wǎng)絡(luò ),集車(chē)輛儀表、視頻監控、語(yǔ)音輸出于一體,解決了分開(kāi)安裝不便、可靠性差的缺陷,提高了系統的可靠性。
評論