添加I2c恢复机制导致的死循环

问题背景:项目过程中,为了防止I2c挂死,添加I2c防挂死机制,防挂死机制如下:

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;
}

问题就出现在上面的第4步,因为该操作里面又有I2cWriteData函数,势必就形成了函数递归,如果i2c能够恢复还好,若一直恢复不了,势必造成死循环,卡在这个函数出不来!

问题反思:慎用递归,如有递归,必有退出条件!!!

猜你喜欢

转载自blog.csdn.net/weixin_43704402/article/details/107730351
I2C