Agregue el bucle infinito causado por el mecanismo de recuperación I2c

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. ! !

Supongo que te gusta

Origin blog.csdn.net/weixin_43704402/article/details/107730351
Recomendado
Clasificación