我看到的是这个例子:https://github.com/STMicroelectronics/STMems_Standard_C_drivers/tree/master/lsm9ds1_STdC
我试图理解在下面的代码中,如何在没有任何参数的情况下调用platform_write_imu
static int32_t platform_write_imu(void *handle, uint8_t reg, uint8_t *bufp,
uint16_t len);
static int32_t platform_read_imu(void *handle, uint8_t reg, uint8_t *bufp,
uint16_t len);
static int32_t platform_write_mag(void *handle, uint8_t reg, uint8_t *bufp,
uint16_t len);
static int32_t platform_read_mag(void *handle, uint8_t reg, uint8_t *bufp,
uint16_t len);
/* Main Example --------------------------------------------------------------*/
void lsm9ds1_read_data_polling(void)
{
stmdev_ctx_t dev_ctx_imu;
/* Initialize inertial sensors (IMU) driver interface */
dev_ctx_imu.write_reg = platform_write_imu;
dev_ctx_imu.read_reg = platform_read_imu;
dev_ctx_imu.handle = (void*)&imu_bus;
函数指针void句柄在任何地方都没有定义时,它的作用是什么?此代码构建BTW
static int32_t platform_write_imu(void *handle, uint8_t reg, uint8_t *bufp,
uint16_t len)
{
sensbus_t *sensbus = (sensbus_t*)handle;
#if defined(NUCLEO_F411RE)
HAL_I2C_Mem_Write(sensbus->hbus, sensbus->i2c_address, reg,
I2C_MEMADD_SIZE_8BIT, bufp, len, 1000);
#endif
return 0;
}
只是想知道这里按顺序发生了什么。
dev_ctx_imu.write_reg = platform_write_imu;
/* ... */
它为函数指针分配函数的地址。这不是电话。
当函数指针void句柄不是在任何地方定义?
它不是函数指针,只是指向无效数据的指针。
我只是想知道这里按顺序发生了什么。
这只是一个普通参数。没有任何序列。
BTW要编程uC,你需要更好地学习C。我的建议-学习使用你的电脑,当你了解指针,数组&函数指针很好地返回到嵌入式。