对于Arduino平台,我想接收16个字节并将它们的值存入一个结构中。目前我已经有了以下代码。
因此,将有一个由64个这些结构组成的数组(每个结构包含16个uint8_t变量)。
有没有办法在不将其变量转换为数组的情况下使用此示例for循环? (以处理变量存储的随机编译器行为)
if( Serial.available() >= sizeof( newSection ) ) { // if atleast one full struct is received
Sections newSection ; // declare a local Sections object and fill it
newSection.leftSensor = Serial.read() ;
newSection.leftSensor = Serial.read() ; // the other variables don't exist yet
newSection.leftSensor = Serial.read() ;
newSection.leftSensor = Serial.read() ;
newSection.leftSensor = Serial.read() ;
newSection.leftSensor = Serial.read() ;
newSection.leftSensor = Serial.read() ;
newSection.leftSensor = Serial.read() ;
newSection.leftSensor = Serial.read() ;
newSection.leftSensor = Serial.read() ;
newSection.leftSensor = Serial.read() ;
newSection.leftSensor = Serial.read() ;
newSection.leftSensor = Serial.read() ;
newSection.leftSensor = Serial.read() ;
newSection.leftSensor = Serial.read() ;
newSection.leftSensor = Serial.read() ;
storeLayout( &newSection ) ;
}
结构体“Sections”尚不存在,但它将包含16个uint8_t类型的变量。虽然这可能完全可行,但我更喜欢使用for循环。
if( Serial.available() >= sizeof( newSection ) ) { // if atleast one full struct is received
Sections newSection ; // declare a local sectuin variable and fill it
uint8_t *ptr ;
ptr = &newSection.leftSensor ; // let pointer point to the first variable of local struct object < -???
for( byte i = 0 ; i < sizeof( newSection ) ; i ++ ) {
*ptr = Serial.read() ;
ptr ++ ;
}
storeLayout( &newSection ) ;
}
我对指针不陌生,但我还没有使用过这个特定的例子,安全起见最好确认一下。
我的问题是:我在这个例子中使用指针是否正确? 如果不正确,应该怎么做?
仅回答“是”即可。
编辑:
我知道结构体填充存储的情况,该结构体将恰好包含16个uint8_t变量。 然而,编译器可能会以随机顺序重新排列结构体变量的存储。
因此,将有一个由64个这些结构组成的数组(每个结构包含16个uint8_t变量)。
有没有办法在不将其变量转换为数组的情况下使用此示例for循环? (以处理变量存储的随机编译器行为)
newSection.leftSensor[i]= Serial.read();
是你需要的全部。 - n. m.struct Sections { uint8_t leftSensor[16]; };
可以让你遍历 16 个元素。你的第一个代码块令人困惑,因为你会重复写入相同的位置 16 次,这似乎没有什么意义。 - Jonathan Leffler