tick工作原理其實就是硬體定時器的工作原理,1個系統tick就代表乙個定時器硬體中斷。定時器的工作原理很簡單,就是內部有乙個遞減的計數器,當減到0時產生乙個中斷,如圖 1-1所示:
圖1-1
定時器工作原理
假設定時器模組的輸入頻率是1mhz,系統定義的1s內tick數是100,也就是100hz,可以計算出遞減計數器要設定的值為1mhz/100hz=10000。可以看出遞減計數器相當於乙個分頻器,輸入端每來乙個脈衝,其值就減去1,當減到0時產生乙個中斷,同時其值自動過載成10000,如此迴圈下去。
圖2-1
系統獲取時間
虛線表示下乙個tick中斷還未產生,如果此時來獲取時間,獲取到的時間只是之前tick累計的時間。假設tick中斷產生時刻和獲取時間那一時刻之間的跨度是4ms,那麼獲取的時間就有4ms的誤差,高精度時鐘就是為了消除這種誤差而誕生的。
上述誤差產生的根本原因是沒有將tick中斷產生時刻和獲取時間那一時刻之間的跨度更新到時間裡去,如果計算出這段時間並加到獲取的時間裡去就可以校正獲取的時間了。結合圖 1-1和圖 2-1,基本的校正原理如下所述:
當系統是多核時,系統產生乙個由cpu0來處理的tick中斷,當cpu0還沒有更新整個系統的tick數時,這時cpu1來獲取時間,按照基本原理的計算之後還要加上乙個tick的時間才是正確的。
程式清單
4-1void bsptickhighresolution (struct timespec *ptv)
} ptv->tv_nsec += (long)((gui64nsecpercnt7 * uidone) >> 7);
if (ptv->tv_nsec >= 1000000000) }
高精度除法(高精度除以高精度)
先貼乙個簡單的高精度除以單精度的 include include include using namespace std int main else ys ys 10 a i 0 while c i 0 i for int j i j 0 j printf d c j if ys printf d ...
高精度除高精度
演算法流程 第一步,讀入被除數 a 和 除數 b,判斷是否 a b,是則輸出 0 並結束演算法,否則令 answer 0 第二步,令餘數 remainder 0,令 i 從被除數最高位的下標開始 第三步,令 remainder remainder 10 a i 令 c 9 第四步,判斷是否 b c ...
高精度除以高精度
原 題 高精除以高精,求它們的商和餘數。演算法分析 高精除以高精是用減法模擬除法,對被除數的每一位都減去除數,一直減到當前位置的數字 包括前面的餘數 小於除數 由於每一位的數字小於10,所以對於每一位最多進行10次計算 代 碼 include include include using namesp...