发现并解决的问题:
1 无法跳出下列循环
#define readLen 256;
u8 i = 0;
for(i = 0; i < readLen + 10; i++)
{
//……
}
u8共256字节,(readLen+10)共266字节,当i累加到257时溢出,又回到i=0,因此无法跳出循环。
2 读取照片数据时只能读取帧头,打印时其他字节全为0(包括帧尾)
①怀疑摄像头串口收发有问题:通过PC串口直接向摄像头发送命令,收发成功,排除
②怀疑摄像头无数据发出:用示波器显示RX口电平情况,发现有连续大量数据传入,排除
③将范围锁定在串口接收函数,通过打印发现接收数据函数返回值(接收字节数)为5,与串口打印数据符合,进一步锁定接收数据函数。接收数据函数在两种情况下跳出while(1),一种是接收到足够字节的数据,另一种是一定时间内接收不到数据,在怀疑第一种情况但验证无果的前提下,怀疑第二种情况,将接收等待时间扩大100后,数据接收成功。
综上所述,摄像头发送数据时在第5个字节和第6个字节中间间隔了较长时间,即发送帧头与照片数据中间延时过长,导致MCU误判为无数据接收,从而跳出接收数据函数。
目前进度:
摄像头调试完成,明天修改MPPT算法、编写看门狗。
思路:
排除硬件问题,寻找BUG来源要从BUG所在函数由果寻因反推,不要怀疑编译器,只看逻辑,排除了其他所有可能,就是剩下的那一种可能。