指针应用 单片机

为什么用指针

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 取地址,把变量的地址传进去
相关推荐
恒锐丰科技林技术员2 小时前
EG1196S:高压宽输入降压 DC‑DC 芯片,电动车工业电源的优选方案
经验分享·嵌入式硬件·硬件工程
>Andre<3 小时前
UFS5.0标准中文全译·卷一:范围、术语与架构
android·linux·嵌入式硬件
剑指offer.3 小时前
ARM裸机开发-点亮LED灯
linux·服务器·嵌入式硬件
朝发如雪3 小时前
快速掌握单片机基础(8)(内存映射与启动寻址方式)(编译工具链与构建流程)(C语言操作寄存器)
单片机
糖糖单片机设计4 小时前
基于STM32的电子密码锁设计与实现(矩阵键盘+防拆检测+GSM远程报警)
人工智能·stm32·单片机·嵌入式硬件
cyl12240714 小时前
2026年10月嵌入式培训指南:在“AI+嵌入式“爆发前夜,如何选择你的职业跳板?
人工智能·嵌入式硬件
充哥单片机设计5 小时前
【STM32开源项目】智能家电控制系统
stm32·单片机·嵌入式硬件·毕业设计·智能家电控制·家电控制
深圳市恒锐丰科技杨生6 小时前
EG2121 250V 单路半桥栅极驱动芯片|屹晶 EGmicro
嵌入式硬件·硬件工程
qq_401700416 小时前
STM32 UART+DMA+IDLE 接收完整实现:从“能跑“到“不丢包“
单片机
深圳市恒锐丰科技杨生7 小时前
EG1165 / EG1165S 600V 半桥 PWM 控制芯片|屹晶 EGmicro
嵌入式硬件·硬件工程