完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
先贴代码。
环境:ESP32-C3,使用了console、vfs组件Code: Select all /** * @brief 缓存写入文件 * @param buf:存入缓存 * @param len:存入长度 * @note fclose+fopen可以立即存入文件 */void FS_SaveBufToFile(uint8_t *buf, int len){ if(RecFile.state == 01) { fwrite(buf, len, 1, RecFile.REC); // fwrite(buf, 1, len, RecFile.REC); // fflush(RecFile.REC); // fsyncs(RecFile.REC); // pwrite(RecFile.REC, buf, len, 0); fclose(RecFile.REC); // vTaskDelay(100 / porttiCK_PERIOD_MS); RecFile.REC = fopen(RecFile.path, "a+"); // fprintf(RecFile.REC, "%s", buf); ESP_LOGI(TAG, "W"); } return;} 希望能实现的效果是该函数执行完后,直接取下TF卡,能看到数据已经被写入到文件中。 但是在尝试将数据写入TF卡时,发现数据不能立即写入到卡中。 无论是使用fprintf还是fwrite加fflush都无法立即写入,仅当使用fclose时才能写入数据。 目前只能不断的fclose+fopen,实在是太不优雅了 |
|
相关推荐
2个回答
|
|
f.write()之后需要调用f.flush()才能真正把数据写入TF卡。
|
|
|
|
从您提供的代码片段来看,您正在尝试使用ESP32-C3将数据实时写入TF卡。但是,由于代码片段不完整,我无法确定问题的具体原因。然而,我可以提供一些建议来帮助您解决这个问题。
1. 确保您的ESP32-C3已经正确连接到TF卡。检查硬件连接是否正确,包括电源、数据线等。 2. 确保您已经正确初始化了SPI接口和VFS(虚拟文件系统)。这通常包括配置SPI接口的时钟、MOSI、MISO和CS(片选)引脚。 3. 在您的代码中,确保您已经正确打开了文件。在`FS_SaveBufToFile`函数中,您应该在写入数据之前使用`fopen`函数打开文件。例如: ```c FILE *file = fopen("your_file_path", "w+"); if (file == NULL) { // 处理错误 } ``` 4. 在写入数据后,确保使用`fclose`函数关闭文件。这将确保数据被刷新到TF卡上。例如: ```c fclose(file); ``` 5. 如果您希望实现实时写入,可以考虑使用缓冲区。在这种情况下,您可以将数据先写入到一个缓冲区中,然后在缓冲区满时再将数据写入到TF卡。这样可以减少对TF卡的访问次数,提高写入速度。 6. 检查您的TF卡是否支持高速写入。如果TF卡的写入速度较慢,可能会影响到实时写入的性能。 7. 如果问题仍然存在,您可以尝试使用其他库或方法来实现数据写入,例如使用`esp_vfs_fat`库。 8. 最后,确保您的ESP32-C3固件和相关库是最新的,以获得最佳的性能和兼容性。 希望这些建议能帮助您解决问题。如果您需要更详细的帮助,请提供更完整的代码和错误信息。 |
|
|
|
只有小组成员才能发言,加入小组>>
545浏览 6评论
457浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
437浏览 5评论
441浏览 4评论
411浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 00:59 , Processed in 0.767311 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号