我有通过I2C读取传感器数据并在缓冲区中填充数据的功能。
void ADXLGetData(ADXLData_t * adxldataptr)
{
Buffer[0] = ADD_X0;
i2cRead(slave_add, reg_add,&buffer[0]);
adxldataptr->datax0 =buffer[1];
adxldataptr->datax1 = buffer[2];
adxldataptr->datay0 = buffer[3];
adxldataptr->datay1 = buffer[4];
adxldataptr->dataz0 = buffer[5];
adxldataptr->dataz1 = buffer[6];
}
其中ADXLData_t是我的6字节结构,缓冲区在我的头文件中声明如下。
volatile char buffer[12];
和其他如下。
char * ADXLGetData(void)
{
ADXLData_t *adxldataptr;
buffer[0] = ADD_X0;
i2cRead(slave_add, reg_add,&buffer[0]);
adxldataptr = (ADXLData_t*)&buffer[0];
return adxldataptr;
}
两者都将读取相同的传感器数据。当我在1ms的定时器间隔读取数据时(包括这个的四个传感器)我在使用第一个功能时出错了。 但如果我使用第二个功能,我的程序运行顺利。 在第一个函数中,我在5-6次迭代中完美地获得数据。 但在第二,我没有得到完美的数据。 我打电话给下面的函数。
用于调用第一个函数
ADXLData_t Acc1dataptr;
ADXLGetData(&Acc1dataptr);
代表第二个
ADXLData_t * Acc1dataptr;
Acc1dataptr = (ADXLData_t*) ADXLGetData();
此函数在另一个不在同一文件中的文件中调用,但我已经包含了所有必需的文件。
请告诉我我做错了什么。?