2017-08-19 140 views
-5

我需要點擊一個I2C器件,並在維基百科上找到這個代碼。這個C++函數做了什麼?

#define I2CSPEED 100 

void I2C_delay(void) { 
    volatile int v; 
    int i; 

    for (i = 0; i < I2CSPEED/2; ++i) { 
    v; 
    } 
} 

我什麼

v; 

確實糊塗了。 延遲多久?

回答

5

這可能是因爲訪問volatile變量會強制執行實際內存讀取操作的平臺。如果這是真的,那麼循環可能至少需要100次內存讀取。這可能需要更長的時間,這取決於CPU的設計方式。

請注意,在大多數典型計算機可能使用的x86 CPU上,這裏不會有實際的內存讀取。但想必這是爲了像樹莓派。

Wikipedia page that contains this same code明確表示它是僞C語言,並不打算成爲您實際運行的代碼,而是更多的編寫代碼的指南。如果你真的要使用這個代碼,你應該用你的平臺的適當的延遲函數替換那個循環。

0

它取決於微處理器/微控制器的速度,每條指令的指令數和週期數。您可以在從此C/C++代碼生成彙編指令後計算延遲。您可以計算執行上面的代碼所用的週期總數,並乘以一個週期時間(1 /頻率)。