将指针返回到函数缓冲区

时间:2016-03-04 08:08:10

标签: c

我有通过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();

此函数在另一个不在同一文件中的文件中调用,但我已经包含了所有必需的文件。

请告诉我我做错了什么。?

0 个答案:

没有答案