<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 汽車(chē)電子 > 設計應用 > 汽車(chē)ECU 標定系統CCP 軟件的實(shí)現

汽車(chē)ECU 標定系統CCP 軟件的實(shí)現

作者: 時(shí)間:2010-07-17 來(lái)源:網(wǎng)絡(luò ) 收藏

 ?。?)中斷處理程序

  中斷級程序的程序流程圖如圖 2 所示。首先根據不同的中斷類(lèi)別進(jìn)入不同的中斷級程序。若為接收完成中斷,則清除中斷源,將接收到的消息放入接收緩沖區;將該消息存入接收緩沖區存入指針所指向的地址,將該指針向下移動(dòng),接收緩沖區計數器加1,并發(fā)出信號量通知應用程序有新的消息已經(jīng)接收到,若有任務(wù)正在等待 上的新消息,則該任務(wù)進(jìn)入就緒狀態(tài)等待OS 的調度。

圖2 中斷級程序的程序流程圖

  若為發(fā)送完成中斷,則將發(fā)送緩沖區的待發(fā)送消息讀出;將有待發(fā)送消息且優(yōu)先級最高的一個(gè)中讀取最舊的消息,發(fā)送緩沖區計數器減1,發(fā)出信號量通知應用程序有一個(gè)消息被發(fā)出,并匯報當前發(fā)送緩沖區的狀態(tài);還應判斷是否為最后一個(gè)待發(fā)送的消息,若不是,則清除中斷源并將消息發(fā)送到上,若是最后一個(gè),則禁止發(fā)送完成中斷后發(fā)送該消息,將這個(gè)發(fā)送完成中斷保留到應用程序下一次發(fā)送消息的時(shí)候允許并產(chǎn)生。

 ?。?)底層驅動(dòng)模塊

  底層驅動(dòng)模塊主要是為應用程序提供了接收和發(fā)送消息的接口函數。當接收消息時(shí)[4],如圖3 實(shí)線(xiàn)所示,應用程序在信號量處等待;收到一個(gè)消息后,ISR從串行端口讀入消息,將其存入環(huán)狀緩沖區。然后ISR 發(fā)出信號量,通知在等待串口數據的任務(wù)已收到一個(gè)消息。等待任務(wù)收到信號量后,進(jìn)入就緒狀態(tài),準備被OS 調度器激活。當內核調度該任務(wù)運行時(shí),該任務(wù)從環(huán)狀緩沖區中取出消息,完成接收消息的過(guò)程。

圖3 緩沖區接收發(fā)送消息

  發(fā)送消息的方法如圖3 虛線(xiàn)所示。當發(fā)送環(huán)狀緩沖區已滿(mǎn)時(shí),信號量作為指示,暫停發(fā)送任務(wù)。為發(fā)送消息,任務(wù)等待信號量。如果環(huán)狀緩沖區未滿(mǎn),則任務(wù)繼續向環(huán)狀緩沖區存儲欲發(fā)送的消息。如果存儲的消息是緩沖區的第一個(gè)字節,則發(fā)送中斷允許,中斷程序準備啟動(dòng)。 發(fā)送ISR 從環(huán)行緩沖區中取出最舊的消息,同時(shí)發(fā)送信號量,通知發(fā)送任務(wù),表明環(huán)狀緩沖區有空間接收另外的消息。接著(zhù)ISR 將消息從 端口發(fā)送到上。

  4.2 Driver

  基于實(shí)時(shí)操作系統的 Driver,在這里是通過(guò)Command 處理機和DAQ 處理機兩部分來(lái)實(shí)現的。

  Command 處理機由一個(gè)系統任務(wù)來(lái)完成[5]。該任務(wù)在OS 初始化后就啟動(dòng)運行,識別CAN 網(wǎng)絡(luò )上的 主設備發(fā)送給該從設備的會(huì )話(huà)命令。根據命令做相應動(dòng)作,并回送命令應答,完成會(huì )話(huà)。DAQ 處理機由1~n 個(gè)系統任務(wù)來(lái)完成。本項目支持對不同時(shí)間要求的監視參數設定不同的DAQ 周期,不同時(shí)間要求的監視參數填入不同的DAQ_List,每個(gè)DAQ_List 由一個(gè)任務(wù)完成周期發(fā)送。

  Command 處理機在收到主設備要求啟動(dòng)某DAQ_List 命令時(shí), 調用OS 函數OSTaskCreate()啟動(dòng)相應的任務(wù),該任務(wù)每完成一次發(fā)送就調用OS 函數OSTimeDlyHMSM( )掛起一定的時(shí)間,這個(gè)時(shí)間就是主設備對這個(gè)DAQ_List 要求的發(fā)送周期。在收到主設備要求停止某DAQ_List 命令時(shí),調用OS 函數OSTaskDel( )函數刪除該任務(wù)。

 ?。?)Command 處理機

  Command 處理機主要是獲取并解讀主設備的CCP 命令,并執行該命令;命令執行完成后,向主設備發(fā)送應答;若執行時(shí)出錯,應答中向主設備報錯;若主設備命令要求對DAQ進(jìn)行操作,則將該操作傳達給DAQ 處理機,由DAQ 處理機完成DAQ 操作。

  Command 處理機由一個(gè)RTOS 任務(wù)來(lái)完成,其示意性代碼如下,GetMsg 函數為CAN 驅動(dòng)程序的接收消息函數,調用此函數則等待獲取CAN 端口接收到的消息幀。一旦接收到新的消息幀則函數返回,用戶(hù)可通過(guò)msg_command 獲取該消息幀的內容。

  void task (void * data) {
  for( ; ; ) {
  GetMsg(msg_command); //等待并獲取一個(gè)CCP 命令
  CCP_Command (msg_command); //將命令送給CCP 命令處理函數
  }
  }

  



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>