【发布时间】:2019-09-13 11:14:49
【问题描述】:
我正在开发一个带有 ESP32 的 CAN-BUS 记录器。使用 fprintf 将数据写入 SDCard。
我知道我必须使用 fopen() 来打开文件,然后再使用 fclose() 来关闭文件。
我的问题是我应该多久打开和关闭一次文件?只打开一次,然后可能一个小时后关闭它?还是打开,写100个值,关闭,再打开?
我不想丢失大量数据。当带有 CAN-BUS 的摩托车运行时,ESP32 将亮起。如果点火开关关闭,ESP32 将不再通电。我不介意最后 5 秒的数据是否丢失。但我不希望丢失 10 分钟的数据。
我还看到了 fflush() 函数。我应该定期使用它,即每 10 秒一次吗?然后如果文件从不关闭也许没问题?
更多信息:我可以设计设备以确保电源开启足够长的时间,以便执行 fclose()(在此之前没有电源故障)。但如果我不介意最后几秒钟的数据丢失,我想这并不是真的必要。
我把这个问题放到 StackOverflow 中而不是电气工程中,因为这是关于为那个项目编写代码。
我在这里搜索并找到了类似的问题,但我并没有真正找到这个问题的答案。
【问题讨论】:
-
您可以随意打开和关闭文件多少次。您只需要考虑打开/关闭文件的执行开销。最好的解决办法可以是缓冲数据的时间可以松动,5秒,并且每5秒更新一次文件。在大型系统上可能还有其他技术,但你应该是一个嵌入式应用程序,我想文件系统代码在功能上是有限的。
-
ESP32 芯片是否支持掉电中断?如果您有支持硬件来保证一定时间的供电,那么在掉电中断中调用
fclose()可能是一个有效的选择。