我需要點擊一個I2C器件,並在維基百科上找到這個代碼。這個C++函數做了什麼?
#define I2CSPEED 100
void I2C_delay(void) {
volatile int v;
int i;
for (i = 0; i < I2CSPEED/2; ++i) {
v;
}
}
我什麼
v;
確實糊塗了。 延遲多久?
我需要點擊一個I2C器件,並在維基百科上找到這個代碼。這個C++函數做了什麼?
#define I2CSPEED 100
void I2C_delay(void) {
volatile int v;
int i;
for (i = 0; i < I2CSPEED/2; ++i) {
v;
}
}
我什麼
v;
確實糊塗了。 延遲多久?
這可能是因爲訪問volatile
變量會強制執行實際內存讀取操作的平臺。如果這是真的,那麼循環可能至少需要100次內存讀取。這可能需要更長的時間,這取決於CPU的設計方式。
請注意,在大多數典型計算機可能使用的x86 CPU上,這裏不會有實際的內存讀取。但想必這是爲了像樹莓派。
Wikipedia page that contains this same code明確表示它是僞C語言,並不打算成爲您實際運行的代碼,而是更多的編寫代碼的指南。如果你真的要使用這個代碼,你應該用你的平臺的適當的延遲函數替換那個循環。
它取決於微處理器/微控制器的速度,每條指令的指令數和週期數。您可以在從此C/C++代碼生成彙編指令後計算延遲。您可以計算執行上面的代碼所用的週期總數,並乘以一個週期時間(1 /頻率)。