嵌入式bug 踩坑记录

坑1: for 循环嵌套switch

泵送数字化调试项目,当主控调用ubus write ,超时失败,中间几百ms 无打印。

怀疑过程:can 接收数据后处理太慢,阻塞 ;can 发送阻塞;websocket 消息风暴导致处理不过来 阻塞;ubus 消息太多 ,ubus 阻塞

问题:

卡在哪里,就分析下一步走向,然后加打印,最终定位是在can 处理过程中,for 循环嵌套switch,在switch 中 使用break 跳出循环,实际这里要退出程序,要使用return .

总结:for 循环嵌套switch 要注意,多数考虑 return 而不是break;或者先遍历找到后,退出for 循环,避免for +switch组合。

避坑:for 循环的作用是遍历找到匹配的对象,然后根据对象的参数来来处理(switch);

因此 可以吧 for 循环遍历写成一个函数来调用,匹配成功 再处理(switch 分支)