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