定時器(通信協定管理模組)

定時器(通信協定管理模組)

本詞條是多義詞,共4個義項
更多義項 ▼ 收起列表 ▲

人類最早使用的定時工具是沙漏水漏,但在鐘錶誕生髮展成熟之後,人們開始嘗試使用這種全新的計時工具來改進定時器,達到準確控制時間的目的。

基本介紹

  • 中文名:定時器
  • 外文名:The timer
  • 目的:準確定位時間
  • 種類:接通延時型定時器等
  • 早期工具沙漏水漏
介紹,管理模組設計,管理模組實現,

介紹

定時器是通信協定正常運行的基本要素之一,主要用於各種定時和幀重傳的任務。通信協定在單片機系統上實現所使用的定時器,定時精度要求不高,但數量要求比較大。由於硬體資源有限,不可能為每一個單獨任務分配一個硬體定時器,只能通過單個硬體定時器模擬多個軟體定時器的方法,來滿足協定中的定時套用需要。
用一定的數據結構將這些軟體定時器組織起來,並提供統一的調用接口,稱為“定時器管理”。定時器管理主要有2種實現方法:
圖1圖1
①靜態數組法。將定時器節點存儲在數組中。優點是邏輯簡單,占用ROM較少。但這種方案有明顯的缺點:當硬體定時器中斷髮生時,要對所有定時器節點進行減法操作,時間開銷很大,且時延不確定(與定時器數目相關)。
delta鍊表法。按照定時器的定時值升序排列,形成鍊表。後一個定時器的定時值是前面所有定時器的值加上本節點的值。這樣,在每次的時鐘中斷處理中,只需對第1個定時器節點進行減法操作,大大減少了時間開銷。但是,該方案邏輯複雜,ROM用量大,需要頻繁分配回收記憶體,容易形成記憶體碎片。

管理模組設計

定時器管理模組的設計基於靜態數組法。使用一個定時器節點數組來保存所有的定時請求,數組的每一項代表一個可用的定時器節點。每一個定時器節點都有一個狀態項,表示該定時器正處於空閒、使用或溢出狀態。定時器的定時值和定時器逾時後要傳送的訊息也存儲在定時器節點中,從而實現用一個硬體定時器為用戶提供多個軟體定時器。
為了解決中斷處理時間開銷大的問題,在模組中引入一個輔助定時器,輔助定時器的值總是等於所有定時器節點中的最小定時值。在硬體定時器中斷處理中,僅對輔助定時器進行減法操作,從而大大縮短了中斷處理的時間。設計原理如圖1所示。

管理模組實現

數據結構和函式接口
定時器管理模組使用的相關數據結構定義如下:
欄位state保存了定時器節點的狀態,可能取值為空閒(T_FREE)、使用(T_INUSE)或溢出(T_OVERFLOW)。
欄位count保存了定時器節點的定時值,最大取值為65 535。如果設定硬體定時器中斷為10 ms,則軟體定時器最大定時約為655 s,可以滿足大多數套用需要。
欄位msg指向定時器的用戶訊息。在啟動定時器時,指向訊息的指針被保存在此欄位。當定時時間結束後,中斷處理函式會自動發出這個訊息以通知用戶任務。
MAX_TIMER_NUM表示系統允許的最大定時器數,其值取決於具體套用需要。
函式式函式式
本模組提供的關鍵接口函式如下:
定時器的初始化
使用定時器管理模組前,需要進行定時器的初始化。主要是初始化定時器節點數組,將每一個定時器節點設定為空閒狀態,同時將輔助定時器置零,輔助ID指向0xFF(表示空)。
定時器的啟動
啟動一個定時器,主要是將節點數組中一個空閒狀態的節點置為使用狀態。如果這個新啟用的定時器,是所有定時器中定時值最小的,還要更新輔助定時器。函式以指向定時器訊息的指針和定時值為參數,啟動定時器流程如圖2所示。成功啟動定時器後,返回該定時器節點的ID號。
圖2圖2
定時器的刪除
在目標定時器到期之前,由於某種原因用戶可能會要求取消定時器。如重發定時器,用戶在傳送數據幀後啟動該定時器,並等待對方返迴響應幀。如果在定時時間結束時沒有收到回響幀,用戶就需要重發原數據幀;如果在定時時間結束之前收到回響幀,用戶就需要馬上取消該定時器,然後進行下一次通信過程。
刪除定時器函式以定時器節點ID號作為輸入參數,將定時器節點設為空閒狀態,並根據需要更新輔助定時器,流程如圖3所示。
定時器的驅動
軟體定時器的驅動由硬體定時器提供。在硬體定時器中斷中,首先將輔助定時器的值減1。如果輔助定時器值為0,則表示定時值最小的定時器已經逾時,應將對應的訊息傳送給用戶任務,將節點置為空閒狀態,並重新計算其他節點的定時值,同時查找定時值最小的節點,更新輔助定時器。
圖3圖3

相關詞條

熱門詞條

聯絡我們