我正在開發一個嵌入式項目,我必須在某個微芯片的兩個字節寄存器中寫入超時值。將整數分解爲兩個字節
超時被定義爲:
timeout = REG_a * (REG_b +1)
我想用在256的整數,以讓說,60000我尋找一種算法,對這些寄存器進行編程,給予timeout-值,計算REG_a和REG_b。
如果一個確切的解決方案是不可能的,我想獲得下一個可能的更大的超時值。
我有什麼迄今所做的:
我目前的解決辦法計算:
temp = integer_square_root (timeout) +1;
REG_a = temp;
REG_b = temp-1;
這導致了在實際工作中也值。不過,我想看看你們是否可以想出更優化的解決方案。
哦,而且我的記憶受到限制,所以大表無法提供。運行時間也很重要,所以我不能簡單地暴力解決方案。
你想最大限度地減少'timeout'和計算值之間的差異嗎?這是練習的目的嗎?否則你看起來很好。 – 2013-04-06 14:07:21
最優化的一個版本是最小化一個寄存器並使其他寄存器最大化。這個寄存器接口可能存在問題,您不希望突然更改這兩個寄存器。由於無法同時進行兩次內存寫入,因此如果在定時器運行時寫入寄存器**,則可能會出現問題。通過最小化一個寄存器,當更小的超時時間可以保持不變,因爲最小值提供了更好的時間粒度。 – 2013-04-08 14:54:09