为什么用指针
C 语言函数只能有一个返回值,用指针就能一次把 6 个数据都 "带出来"
void MPU6050_GetData(int16_t *AccX, int16_t *AccY, int16_t *AccZ,
int16_t *GyroX, int16_t *GyroY, int16_t *GyroZ)
{
uint8_t DataH, DataL;
DataH = MPU6050_ReadReg(MPU6050_ACCEL_XOUT_H);
DataL = MPU6050_ReadReg(MPU6050_ACCEL_XOUT_L);
*AccX = (DataH << 8) | DataL;
DataH = MPU6050_ReadReg(MPU6050_ACCEL_YOUT_H);
DataL = MPU6050_ReadReg(MPU6050_ACCEL_YOUT_L);
*AccY = (DataH << 8) | DataL;
DataH = MPU6050_ReadReg(MPU6050_ACCEL_ZOUT_H);
DataL = MPU6050_ReadReg(MPU6050_ACCEL_ZOUT_L);
*AccZ = (DataH << 8) | DataL;
DataH = MPU6050_ReadReg(MPU6050_GYRO_XOUT_H);
DataL = MPU6050_ReadReg(MPU6050_GYRO_XOUT_L);
*GyroX = (DataH << 8) | DataL;
DataH = MPU6050_ReadReg(MPU6050_GYRO_YOUT_H);
DataL = MPU6050_ReadReg(MPU6050_GYRO_YOUT_L);
*GyroY = (DataH << 8) | DataL;
DataH = MPU6050_ReadReg(MPU6050_GYRO_ZOUT_H);
DataL = MPU6050_ReadReg(MPU6050_GYRO_ZOUT_L);
*GyroZ = (DataH << 8) | DataL;
}
这是返回陀螺仪的6个内部寄存器的返回值,int16_t *来映射他们的数据,当我们要用就自己定义一个变量把地址放进这个函数就可以把数据存储到那个变量里面了。&data这样放进去
int16_t My_Accel_X, My_Accel_Y, My_Accel_Z; int16_t My_Gyro_X, My_Gyro_Y, My_Gyro_Z;
MPU6050_GetData(&My_Accel_X, &My_Accel_Y, &My_Accel_Z, &My_Gyro_X, &My_Gyro_Y, &My_Gyro_Z);
这样My_Accel_X就对应*AccX的值了
| 位置 | 符号 | 作用 |
|---|---|---|
| 函数参数 | int16_t *AccX |
声明这是指针,用来接外面变量的地址 |
| 函数体 | *AccX = ... |
解引用,直接修改外面的变量 |
| 调用时 | &AccX |
取地址,把变量的地址传进去 |