指针应用 单片机

为什么用指针

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 取地址,把变量的地址传进去
相关推荐
粉色挖掘机1 小时前
lib文件查看函数方法之—反汇编查看函数名称
嵌入式硬件·dsp开发·ccs
嵌入式ZYXC2 小时前
第1篇:《面试题:画一个STM32最小系统电路,每个元件的作用》
stm32·单片机·嵌入式硬件·面试·职场和发展
振南的单片机世界2 小时前
printf重定向:一句fputc,串口打印任意变量
stm32·单片机·嵌入式硬件
eng八戒3 小时前
【RA-Eco-RA2L1开发板评测】基于 FSP 实现串口打印功能
单片机·嵌入式硬件
嵌入式ZYXC3 小时前
第2篇:《面试题:LDO和DC-DC的区别?分别用在什么场景?》
stm32·单片机·嵌入式硬件·面试·职场和发展
HAPPY酷4 小时前
单片机OLED进阶:打造赛博朋克风“碎片化消散”文字特效
单片机·嵌入式硬件·microsoft
czhaii4 小时前
GB2312简体中文编码表
单片机·算法
玩转单片机与嵌入式4 小时前
AI 推理会不会堵住实时任务?MCU 上跑模型时,RTOS 和 DMA 该怎么配合?
人工智能·单片机·嵌入式硬件
清风6666664 小时前
基于单片机的超声波人体感应PWM自动调光灯设计与实现
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
fffzd4 小时前
STM32:IIC与温湿度传感器(轮询模式)
stm32·单片机·嵌入式硬件·iic·通信·嵌入式软件·i2c