应用场景:
设备跑的是Linux系统,与PC上位机进行通信,上位机可以给Linux发送设备配置信息,Linux将配置信息写入文件中以备设备断电重启时使用。
bug现象:
设备正常运行,设备配置信息为A,此时通过上位机给给Linux发送行的设备信息B,并进入Linux系统查看,设备配置信息已被正确写入文件中, 然后给设备断电重启,待设备运行稳定发现设备配置信息仍为A。
bug分析:
1. 可以确定的是上位机向Linux系统发送设备配置信息的信道连接是没有问题的;
2. Linux进行设备信息保存的过程是正常的。
解决过程:
1. 在Linux将设备配置信息写入文件后,再重新读出,该方法不能解决问题,上位机发送完配置信息后立即给设备断电重启,依然会出现上述现象;
2. 在Linux将设备信息写入文件后,调用fflush(),手动冲刷缓存,该解决方法和 1 一样,不能完全解决问题;
3. 在Linux将设备信息写入文件后,system("sync"); 强制同步缓存和硬盘,问题得到解决。
综上,应该是fwrite()只是将数据写在了缓存中,而没有同步到硬盘(SD卡)中去,Linux系统应该也有缓存同步机制,但我还不太清楚具体是怎样的,应为在上面的解决过程中,如果在上位机发送完配置信息后,等待 2 分钟, 数据还是可以保存的,但是设备在实际使用中是不一定能等这么久的时间的所以最终使用的方法3的解决方案。关于Linux系统缓存的同步机制后期再研究了。