Union-Axis3i16-int16_t axis[3]- axis.x、axis.y、axis.z
Axis3i32-int32_t axis[3]
Axis3i64-int64_t axis[3]
Axis3f-float axis[3]
- struct在实际问题中,一组数据往往具有不同的数据类型。struct关键字就可以将这些不同数据类型的数据打包成一种构造数据类型。这种构造类型由多个成员组成,每一个成员可以是一个基本数据类型或者另一个构造类型。一般情况下,结构体所占内存大小是其成员所占内存之和。
- union关键字用法与struct非常相似,但也有区别。struct中的所有数据成员是共存的,不管有没有调用,编译器都会分配内存;而union中的数据成员是互斥的,它只配置一个足够大的空间来容纳最大长度的数据成员。即union中所有数据成员共用一个空间,同一时间只能存储其中一个数据成员,所有数据成员具有相同起始地址。
//静态全局变量
static sensorData_t sensors;
static sensorData_t sensors1;
static Axis3i16 gyroRaw;
static Axis3i16 gyroRaw1;
static Axis3i16 accRaw;
static Axis3i16 accRaw1;
static Axis3i16 magRaw;
//数据类型
typedef union
{
struct
{
int16_t x;
int16_t y;
int16_t z;
};
int16_t axis[3];
} Axis3i16;
Axis3i16是定义数据类型的,例如:int16_t axis.x/y/z
typedef struct
{
Axis3f bias;
bool isBiasValueFound;
bool isBufferFilled;
Axis3i16* bufHead;
Axis3i16 buffer[SENSORS_NBR_OF_BIAS_SAMPLES];
}BiasObj;
BiasObj gyroBiasRunning;
BiasObj gyroBiasRunning1;
static Axis3f gyroBias;
static Axis3f gyroBias1;
static bool gyroBiasFound = false;
static bool gyroBiasFound1 = false;
static float accScaleSum = 0;
static float accScale = 1;
static bool isInit = false;
static sensorData_t sensors;
static sensorData_t sensors1;
static Axis3i16 gyroRaw;
static Axis3i16 accRaw;
static Axis3i16 gyroRaw1;
static Axis3i16 accRaw1;
static Axis3i16 magRaw;
BiasObj是定义数据类型的,例如, BiasObj中bias->isBiasValueFound
gyroBiasRunning->x bias->isBufferFilled
gyroBiasRunning->y bias->bufHead->x
gyroBiasRunning->z bias->bufHead->y bias->bufHead->z
bias->buffer[i].x
bias->buffer[i].y
bias->buffer[i].z
bias->bias.x
bias->bias.y
bias->bias.z
QUESTION:
//为什么不是如下输出?
state.attitude.pitch
state.attitude.roll
state.attitude.yaw
//而是
state->attitude.pitch
state->attitude.roll
state->attitude.yaw
//上位机获取的姿态
void getAttitudeData(attitude_t* get)
{
get->pitch = -state.attitude.pitch;
get->roll = state.attitude.roll;
get->yaw = -state.attitude.yaw;
}
temp_pry[0]=state->attitude.pitch和state.attitude.pitch出来的值有什么不一样?
是否存在一个是MCU直接算出来的值(每加PID算出来的)
一个是MCU出来再用PID算出来的姿态?
typedef struct
{
attitude_t attitude;
quaternion_t attitudeQuaternion;
point_t position;
velocity_t velocity;
acc_t acc;
bool isRCLocked;
} state_t;
//
typedef struct
{
u32 timestamp; /*时间戳*/
float roll;
float pitch;
float yaw;
} attitude_t;
//
箭头运算符“->” ,箭头运算获取指针指向对象的成员
箭头运算符作用一个指针的运算对象,结果为左值
表达式ptr->men等价于(*ptr).mem。