我需要点击一个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 /频率)。