记录下自己比较灵活比较实用的用法。
指针在函数中的数值传递
mpu6050读取的一个例子:
void GetData(T_float_angle *dmp_angle,T_short_xyz *gyr,T_short_xyz *acc)
{
if(mpu_dmp_get_data(&dmp_angle->pit,&dmp_angle->rol,&dmp_angle->yaw)==)
{
mpu6050_GetGyroData(&gyr->x,&gyr->y,&gyr->z);
mpu6050_GetAccData(&acc->x,&acc->y,&acc->z);
}
}
下面这样调用它(变量已在前面定义):
void DataRefresh(void)
{
static u8 rc_cnt=;
GetData(&MPU_Angle,&MPU_Gyr,&MPU_Acc); //在此引用
while(ERROR!=NRF_Rx_Dat(RX_BUF));
DataReceiveTransfer(RX_BUF,,&Rc_in);
Rc_Fun(&Rc_in,FLY_Lock);
}
这样使用的优势在于可以减少变量的定义,把自己需要用到的变量在调用函数的同时讲变量进行不同函数之间的传递,减少中间变量的定义,使得思路清晰,方便。
指针与数组的关系
举一个例子:
void usart1_SendBuf(u8 *buf,u8 len)
{
int i;
for(i=;i<len;i++)
usart1_SendChar(*(buf+i)); //可以换成usart1_SendChar(*buf); buf++;
}
用过调用
u8 code[5]={1,2,3,4,5};
可以实现。
usart1_SendBuf(code,5);
这说明数组名相当于一个指针,同时数组名所在的地址就是指向指针的首个地址。
结构体的定义
一个典型的例子
typedef struct int16_xyz{
int16_t X;
int16_t Y;
int16_t Z;}T_int16_xyz;
通过struct定义了结构体名为int16_xyz,里面包含了int16_t X,Y,Z三个变量,为了方便定义用了typedef方便这个结构体声明类型T_int16_xyz。
只需调用T_int16_xyz GYRO;
这时GYRO中包含了X,Y,Z三个整型变量。
使用结构体会使得结构清晰,提高代码的可读性。