Antecedentes del problema: Para evitar que I2c se cuelgue durante el proyecto, se agregó el mecanismo anti-suspensión I2c. El mecanismo anti-suspensión es el siguiente:
uint32_t I2cWriteData(uint32_t addr, uint8_t *regaddr, uint8_t *data, uint8_t datalen)
{
uint32_t ret = i2cwrite驱动(addr,regaddr,datalen);//中间又重试
if(ret != success)
{
1.将本芯片的SDA和SCL管脚配置成普通GPIO,并将SCL管脚拉高拉低9个周期
2.重新配置i2c功能
3.Reset 该次i2c失败的外设
4.初始化配置这个外设(里面有 I2cWriteData函数)
}
return ret;
}
El problema aparece en el cuarto paso anterior, porque la operación tiene la función I2cWriteData, está obligada a formar una función recursiva, si i2c se puede restaurar, está bien, si no se puede restaurar, inevitablemente causará un infinito bucle y quedarse atascado en esta función.!
Reflexión de la pregunta: use la recursividad con precaución, si hay recursividad, debe haber una condición de salida. ! !