uint8_t变量判断异常求助:值为0却触发tempStatusSelectorByte>4条件
问题解决:uint8_t变量值看似为0却触发tempStatusSelectorByte>4判断
排查步骤与解决方案
先修正printf的打印变量,确认实际值
你的代码里printf打印的是statusSelectorByte,但赋值的是tempStatusSelectorByte——这俩是完全不同的变量!你看到的打印结果0是另一个变量的值,tempStatusSelectorByte的实际值根本没被输出。把printf改成:printf("settingup -> tempStatusSelectorByte: %u\n", tempStatusSelectorByte);注意用
%u(无符号整数格式符)打印uint8_t类型,避免符号扩展导致的显示偏差。检查readStatusSelectorByte()的返回值类型与逻辑
确保AT24C32_Device.readStatusSelectorByte()的返回类型是uint8_t,如果它返回的是有符号char类型,当读取到的字节值大于127(比如0xF0),赋值给uint8_t后会变成240,自然满足>4的条件。如果函数返回类型不匹配,要么修改函数返回类型为uint8_t,要么赋值时强制转换:tempStatusSelectorByte = (uint8_t)AT24C32_Device.readStatusSelectorByte();排查硬件读取错误
如果修正打印后发现tempStatusSelectorByte确实是大于4的值,说明I2C读取AT24C32的过程存在问题——比如设备地址错误、时序异常、硬件连接松动,导致读取到错误的字节数据。可以单独测试I2C读取逻辑,验证从AT24C32指定地址读取的字节是否正确。
内容的提问来源于stack exchange,提问作者David Moreno García
相关产品推荐
相关产品推荐

