中如何穩定地每隔5ms執行某個函數?
輪詢檢查是否到達5ms,為了減少開銷可以每次sleep 1ms,為了保證精度可以少于1ms,但無論怎么做,在現代分時操作系統上都沒法精確到5ms,只能盡量接近。不過windows和linux都有實時調度模式,你可以試試。
如果你是在嵌入式上直接裸寫的,可以做到更接近5ms,但也達不到絕對精確,嵌入式cpu頻率是已知的(可粗略理解為每秒晶振多少次),每條指令的運行需要多少次晶振(也就能算出每條指令的執行時間),也就能幾乎精確的控制代碼在合何時執行,以及能執行多久。
但這里沒有考慮指令和數據從內存儲設備load進cpu寄存器的時間,也沒有考慮多級cache,以及cache miss時耗費的時間,也沒有考慮有指令流水線參與的更復雜的處理器。即便是cpu生產公司,他能告訴你各個子功能的精確耗時,但綜合起來以后情況就變得很復雜,也許同一個條代碼上一次執行時花10ns,下一次執行也許只用6ns。所以只能提供一個估計的平均耗時以供參考,但不能作為絕對指標。
如果是在有時鐘中斷提供(無論這個時鐘有多精確)的cpu上運行代碼,這些指令的執行時間同樣受上面的因素影響,所以也只能給個平均時間。
這里還沒有考慮數值精度的問題,在不同的表示方法下,以及不同的算術影響下,5ms這個數值的精確度問題。
也沒有考慮多任務系統參與下任務調度帶來的更多影響因素。
所以最終只能取近似,而不能強求絕對精確。
上一篇數組長度的最大值
下一篇考衛健委還能做什么工作