我認爲這是「vi vs. emacs」類型的問題之一,但無論如何,我會問,因爲我想聽聽人們的意見。重複軟件定時器何時應該與之前的超時有關?
通常在嵌入式系統時間中,微控制器具有硬件定時器外圍設備提供了一種用於軟件定時器子系統的定時基。該子系統允許開發人員創建可用於生成和管理系統事件的任意數量的定時器(受系統資源限制)。通常管理軟件定時器的方式是硬件定時器設置爲以固定的時間間隔(或者有時僅在下一個活動定時器將到期時)生成。在中斷處理程序中,會調用回調函數來執行該計時器的特定事件。像往常一樣,這些回調例程應該很短,因爲它們在中斷環境中運行。
比方說,我創建一個觸發每1ms的計時器,其回調例程需要100us的執行,這是在系統發生興趣的唯一的事情。計時器子系統應該何時安排下一次軟件定時器的處理?從中斷髮生時起1ms,還是回調結束後1ms?
爲了讓事情更有趣,說硬件開發人員走過來說,在某些操作模式中,CPU的速度需要降低至最多20%以節省電力。現在回調例程需要500us而不是100us,但定時器的間隔仍爲1ms。假設這種增加的回撥延遲對待機模式下的系統沒有負面影響。同樣,計時器子系統應該在什麼時候安排下次處理這個軟件時間? T + 1ms或T + 500us + 1ms?
在這兩種情況下或許應該採取折中的辦法,並在T +(execution_time/2)+ 1ms的安排?