f_close错误(写入SD卡是我的最终项目)
Error with f_close (writing to SD card my final project)
我是机器人"入门"课程的大学生。今年年初,我们被告知要购买一块Netburner 5270板。在这一年里,我们学习了一些基本的代码,但现在我们的最终项目即将到期,我犯了一个错误。我的代码非常基本。我希望它首先检查按钮是否被按下,如果是,检查dipswitch1是否为高电平,如果是高电平,然后打开led1,打开伺服(打开门),创建一个字符串,并在我的SD卡上关闭一个文本文件。一切正常。。。70%的时间。
这是一个功能,应该做我的SD卡需要的一切
void Enter_Door(char * FileName) {
iprintf("rnCreating file: %srn", FileName);
int i = 0;
F_FILE* fp;
do {
fp = f_open( FileName, "a+" ); // Creating and Opening File
i++;
if (fp == 0) { /// Does NOT open
OSTimeDly(TICKS_PER_SECOND / 2);
}
} while (fp == 0 && i < 5);
if (fp == 0) {
iprintf("rn Error in Opening:%srn", FileName);
} else {
const unsigned int write_buffer_size = 100;
char write_buf[write_buffer_size];
sniprintf(write_buf, write_buffer_size, "Person Entered at %ld secondsrn", Secs);
int n = f_write( write_buf, 1, strlen( write_buf ), fp );
iprintf("Wrote %d bytes: %s", n, write_buf);
iprintf("Closing file %srnrn", FileName);
int rv = f_close( fp ); // Close a previously opened file of type F_FILE
do {
i++;
if (rv != 0) { /// Does NOT open
OSTimeDly(TICKS_PER_SECOND / 2);
}
} while (rv != 0 && i > 10);
if (rv != 0) {
f_close_PrintError(FileName);
DisplayEffsErrorCode(rv);
}
**我最近添加了两个do-while循环来尝试重做调用,我不确定我是否写了那个写(这也是我的第一个编码类)
我的错误发生在f_close函数中。我会连续按下按钮10次,一切都会工作,但第11次我会出错,但第12次它会再次工作吗?我的典型错误是:*任务(Main)期间f_close("Enter.txt")出错;F_er_NOTOPEN-
或
*任务(Main)期间f_close("Enter.txt")出错;写入
或
*任务(Main)期间f_close("Enter.txt")出错;F_er_NOTFORMATED
就像我说的,我不会犯很多错误,但当我犯了错误时,它就是这三个错误之一。我真的不知道发生了什么,甚至不知道如何修复它。这段代码是在NBeclipse上写的。如果有人有任何建议或提示,我将非常感谢。
在以下代码中,您没有正确使用f_close:
int rv = f_close( fp ); // Close a previously opened file of type F_FILE
do {
i++;
if (rv != 0) { /// Does NOT open
OSTimeDly(TICKS_PER_SECOND / 2);
}
} while (rv != 0 && i > 10);
尝试将f_close添加到循环中:
int rv;
i = 0;
do {
rv = f_close( fp ); // Close a previously opened file of type F_FILE
if (rv != 0) /// Does NOT open
OSTimeDly(TICKS_PER_SECOND / 2);
i++;
} while (rv != 0 && i > 10);
我不知道这是否会专门解决你的问题,但看看你的代码,你调用f_close并在循环之前将"rv"设置为该函数的返回值。在循环中,您先递增"i",然后检查"rv"的值。这重复了10次,然后退出了循环。您需要在循环内部调用f_close,以便在每次迭代中设置"rv"。否则,您只是在使用一个空循环。
此外,在再次使用"i"之前,需要将其重新初始化为0。如果不全面查看您的代码,我可以看到,如果在打开代码顶部的文件时出错,那么"I"可能已经设置为值5。除非你的意图是从5开始计算值,然后再运行f_close循环5次,否则这是一种糟糕的做法。
- cmake在我的项目中所需的所有静态库都不成功
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 编译器现在遵循C++14标准,我的项目不再编译神秘的SFML错误
- 如何在我的项目中从 CMAKE 中的同一项目获取多个库
- 为什么我的项目没有保存名称中所做的修改
- 如何自动获取我的项目的路径并删除一些文件
- Qt - 为什么Visual Studio 2019在qml资源中添加10Mb文件后无法再编译我的项目?
- 我必须构建我的项目 2 次,第一次失败,因为它无法打开库
- 我怎样才能简单地将opencv 包含在我的项目中与CMake
- 如何在Cmake中正确查找头路径,以便在我的项目中构建Box2D
- 阻止我的项目调用__CxxFrameHandler3(CRT函数)
- 我的项目中某些仅标头文件不能包含使用 CMake 和 Vscode 的"SFML/Graphics.hpp"
- 如何从支持linux/mac操作系统的第三方代码为我的c#项目创建dll
- 如何在bazel中同时处理外部依赖项和我的项目
- :-1: 错误: LNK1104: 无法打开文件"我的项目.obj"
- 如何使用 Xcode 8.2.1 在我的项目中添加 cpprestsdk 库
- SQLite - 从源代码构建库或将源代码直接包含在我的项目中
- 为什么当我的项目是使用 Android NDK r16 构建时,我会收到来自 Android NDK r11 的错误消息
- 我的C++项目找不到.exe
- 如何在我的项目包中使用C 库GTSAM