这个 C++ 函数有什么作用?
What does this C++ function do?
我需要对 I2C 设备进行位操作,我在维基百科上看到了这段代码。
#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 上,此处不会有实际的内存读取。但大概这是为了 Raspberry Pi.
之类的东西
Wikipedia page that contains this same code 清楚地表明它是伪 C,而不是您实际上 运行 编写的代码,而是编写代码的指南。如果您真的要使用这段代码,您可能应该用适合您平台的延迟函数替换该循环。
这取决于microprocessor/microcontroller的速度、指令数和每条指令的循环数。您可以在从此 C/C++ 代码生成汇编指令后计算延迟。您可以计算执行上述代码所花费的周期总数,并将其乘以一个周期时间(1/频率)。
我需要对 I2C 设备进行位操作,我在维基百科上看到了这段代码。
#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 上,此处不会有实际的内存读取。但大概这是为了 Raspberry Pi.
之类的东西Wikipedia page that contains this same code 清楚地表明它是伪 C,而不是您实际上 运行 编写的代码,而是编写代码的指南。如果您真的要使用这段代码,您可能应该用适合您平台的延迟函数替换该循环。
这取决于microprocessor/microcontroller的速度、指令数和每条指令的循环数。您可以在从此 C/C++ 代码生成汇编指令后计算延迟。您可以计算执行上述代码所花费的周期总数,并将其乘以一个周期时间(1/频率)。