2017-08-19 99 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 /频率)。