f_close错误(写入SD卡是我的最终项目)

Error with f_close (writing to SD card my final project)

本文关键字:我的 项目 SD close 错误 写入      更新时间:2023-10-16

我是机器人"入门"课程的大学生。今年年初,我们被告知要购买一块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次,否则这是一种糟糕的做法。