gpt4 book ai didi

c - 结构体指针赋值

转载 作者:行者123 更新时间:2023-11-30 15:55:58 25 4
gpt4 key购买 nike

我试图将一个结构传递给一个函数(通过引用)并在该函数中设置该结构的多个值。

这是结构:

struct Sensor
{
BYTE accel_data[6];
BYTE gyro_data[6];
int ax;
int ay;
int az;
int gx;
int gy;
int gz;
};

这是 main() 中的声明:

struct Sensor s;

这是函数的传递:

readAccel(&s);

readAccel函数:

void readAccel(struct Sensor* s)
{
int ax, ay, az;
// Read data from Accelerometer Chip

i2c_multiRead(ACCEL_READ_ADDR, ACCEL_DATA_ADDR, s->accel_data, 6);

ax = make16(s->accel_data[1],s->accel_data[0]);
ay = make16(s->accel_data[3],s->accel_data[2]);
az = make16(s->accel_data[5],s->accel_data[4]);

fprintf(COM_A,"x: %d\ty: %d\tz: %d\r\n", ax, ay, az);

s->ax = ax;
s->ay = ay;
s->az = az;

fprintf(COM_A,"x: %d\ty: %d\tz: %d\r\n", s->ax, s->ay, s->az);
}

由于某种原因,readAccel() 底部的三个赋值行不起作用。第一个打印语句给出了正确的加速度计值。第二个打印语句为 x 提供了正确的值,但 y 是一个垃圾值,并且 z 始终为 0。

这是在 pic 微芯片上运行的稍微不标准的 c(ccs c 编译器)。编译器有一些怪癖(整数是 16 位,所有变量都必须在函数开头声明,等等),但我认为这不应该是这不起作用的原因(尽管我认为这是可能的) )。

感谢您抽出宝贵时间提供帮助!

编辑:

这是 i2c_multiread 函数:

void i2c_multiRead(char deviceAddrR, char registerAddr, BYTE data[], int numBytes)
{
int x;
i2c_start();
i2c_write(deviceAddrR-0b00000001);
i2c_write(registerAddr);
i2c_start();
i2c_write(deviceAddrR);
for(x=0; x<numBytes-1; x++)
{
data[x]=i2c_read();
}
data[numBytes-1] = i2c_read(0); //NACK on last read
i2c_stop();
}

void main ()
{
struct Sensor s;
int raw_accel_data[6];
int i, data;
char data_ready;
fprintf(COM_A,"keyspan working \n\r");
initAccel(&s);
//initGyro(&s);
fprintf(COM_A,"ALL SYSTEMS GO (accel initialized successfully)\n\r");

while(true) {

//data_ready = i2c_singleRead(ACCEL_READ_ADDR,ACCEL_INT_MAP);
//data_ready = data_ready >> 7;
readAccel(&s);
//readGyro(&s);
//displayGyroData(&s);
//displayGyroRawData(&s);

delay_ms(100);
}
// Address of ITG (Gyro Chip)
// Read: 0xD1
// Write: 0xD0
}

最佳答案

这可能只是您的 fprintf 实现的一个“功能”吗?

fprintf(COM_A,"x: %d\ty: %d\tz: %d\r\n", s->ax, s->ay, s->az);

格式字符串表示您将提供 3 个整数,但实际上您提供的是 3 个字节。 fprintf 实现可能为第二个和第三个参数生成错误的地址。

关于c - 结构体指针赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11587683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com