• <table id="4yyaw"><kbd id="4yyaw"></kbd></table>
  • <td id="4yyaw"></td>
  • 發布時間:2022-02-25 13:37 原文鏈接: 關于定時器管理模塊的實現的內容

      1、數據結構和函數接口

      定時器管理模塊使用的相關數據結構定義如下:

      字段state保存了定時器節點的狀態,可能取值為空閑(T_FREE)、使用(T_INUSE)或溢出(T_OVERFLOW)。

      字段count保存了定時器節點的定時值,最大取值為65 535。如果設置硬件定時器中斷為10 ms,則軟件定時器最大定時約為655 s,可以滿足大多數應用需要。

      字段msg指向定時器的用戶消息。在啟動定時器時,指向消息的指針被保存在此字段。當定時時間結束后,中斷處理函數會自動發出這個消息以通知用戶任務。

      由于數組的下標是唯一的,可作為識別節點的唯一ID號。下文中提到的節點ID號均表示節點在數組中的下標。

      MAX_TIMER_NUM表示系統允許的最大定時器數,其值取決于具體應用需要。

      本模塊提供的關鍵接口函數如下:

      2、定時器的初始化

      使用定時器管理模塊前,需要進行定時器的初始化。主要是初始化定時器節點數組,將每一個定時器節點設置為空閑狀態,同時將輔助定時器置零,輔助ID指向0xFF(表示空)。

      3、定時器的啟動

      啟動一個定時器,主要是將節點數組中一個空閑狀態的節點置為使用狀態。如果這個新啟用的定時器,是所有定時器中定時值最小的,還要更新輔助定時器。函數以指向定時器消息的指針和定時值為參數,啟動定時器流程如圖2所示。成功啟動定時器后,返回該定時器節點的ID號。

      4、定時器的刪除

      在目標定時器到期之前,由于某種原因用戶可能會要求取消定時器。如重發定時器,用戶在發送數據幀后啟動該定時器,并等待對方返回響應幀。如果在定時時間結束時沒有收到響應幀,用戶就需要重發原數據幀;如果在定時時間結束之前收到響應幀,用戶就需要馬上取消該定時器,然后進行下一次通信過程。

      刪除定時器函數以定時器節點ID號作為輸入參數,將定時器節點設為空閑狀態,并根據需要更新輔助定時器,流程如圖3所示。

      5、定時器的驅動

      軟件定時器的驅動由硬件定時器提供。在硬件定時器中斷中,首先將輔助定時器的值減1。如果輔助定時器值為0,則表示定時值最小的定時器已經超時,應將對應的消息發送給用戶任務,將節點置為空閑狀態,并重新計算其他節點的定時值,同時查找定時值最小的節點,更新輔助定時器。

  • <table id="4yyaw"><kbd id="4yyaw"></kbd></table>
  • <td id="4yyaw"></td>
  • 调性视频