指针应用 单片机

为什么用指针

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 取地址,把变量的地址传进去
相关推荐
HalvmånEver2 小时前
Linux:基于 UDP Socket 的实战项目 --简单双向通信程序
linux·单片机·udp
FreakStudio11 小时前
不用装软件!这款MicroPython浏览器 IDE :让你在手机上也能调试树莓派 Pico
python·单片机·嵌入式·电子diy·tinyml
yuan1999714 小时前
STM32远程升级系统(Bootloader + 上位机)
stm32·单片机·嵌入式硬件
Heartache boy14 小时前
野火STM32_HAL库版课程笔记-ADC多通道采集热敏、光敏、反射传感器(轮询)
笔记·stm32·单片机
AI+程序员在路上15 小时前
嵌入式软件技术大全
linux·开发语言·arm开发·单片机
秀秀更健康16 小时前
STM32的程序下载不进去----VDDA悬空
stm32·单片机·嵌入式硬件
长安第一美人17 小时前
AI辅助下的嵌入式UI系统设计与实践(二)[代码阅读理解]
c++·嵌入式硬件·ui·显示屏·工业应用
我在人间贩卖青春18 小时前
DMA的应用
单片机·dma·gpdma
学嵌入式的小杨同学19 小时前
STM32 进阶封神之路(二十五):ESP8266 深度解析 —— 从 WiFi 通信原理到 AT 指令开发(底层逻辑 + 实战基础)
c++·vscode·stm32·单片机·嵌入式硬件·mcu·智能硬件