【现象】
变量定义 boolean showdebug_Time=false 为何输出的时候出现值为一个大数字(48,50,51等)
因为非0则1就是真,不是0则为真,造成逻辑判断失败!不该输出的结果输出了...
boolean showdebug_Time=false;//定义条件变量,调试时间输出和计数输出 .........................Serial.print("showDebug_Time=");Serial.println(showDebug_Time);//结果输出48,50,51等数字,bool怎么能有第3种输出结果?
【结果】
找到问题所在,在此记录一下...
【前因后果】
1)定义一个bool变量
boolean showDebug_Time=false;
关于此变量官方的解释,难道因为定义的不对?查资料

boolean并非标准的bool 是扩展过来的
boolean是bool的一个扩展,并非标准类型

真正的bool 只有true,false 并没错误啊
就是改变变量的值控制调试输出,判断是否重启或延时等问题
loop()中打印代码(防止溢出对一个unsigned int做下处理)

就这么一段 输出系统时间 每秒
倒推,发现只要触发MQTT发布消息时就会出现这个问题
check_relay_status(){//就是检查各路继电器输出状态,供电方式,干接点状态发布}
里面就检查电平高低和发布2个功能。
检查电平高低确定没问题if(digitalRead(relay_PIN1)==HIGH)等等
根据状态发布出去 mqtt_pub(pub_topic_name1,"55 AA AA AA AA 82 01 01");等等
没问题,难道 mqtt_pub 出了问题?

方法在这
就是通过EEPROM中读取的配置信息及目前模块运行的数据发布出去
pub_res=mqttClient.publish(_topic,_msg,retained);
确定方法没错。难道是变量的问题?_msg看下输出

看似没什么异常啊,难道???
是不是太长了?还专门写了个小工具 查长度的!一看149个字符!

查询输出是149个字符
而临时变量_tmp咋定义的?
char _tmp[128];难道是这问题引起??尝试修改128为 char _tmp[256];
重新下载!调试!!
运行了数小时,一次异常也没有出现!

运行近9小时 无丢包和数据异常
确定是因为数组申请的长度太小,可能造成了溢出造成了系统定义的各种bool变量出现了怪异的输出,明明输出的是 50 if判断是否大于1 居然不对,既然是真 取反是否为false等各种尝试

断电记忆的是1和3路,故意打开2和4如果重启1-3会开
8小时后依然2,4开,说明系统没有复位重启。故很稳定!
这样的问题遇到不少,可能一个小小的失误造成数小时的研究调试,最后做到稳定!

随时保存或自动保存断电记忆状态输出
【学习关键点总结】
1)排除法,倒推法
2)设置输出点,监控输出数据异常位置
3)查资料,反复尝试
4)数组大小定义要合适,char[]和string类型不一样,关键要会各种转换及指针的理解
5)sprintf()的函数使用,用的很多,做输出模板,注意数据类型的使用 %d %s %lf等等