gpt4 book ai didi

c++ - f_close 错误(写入 SD 卡我的最终项目)

转载 作者:太空宇宙 更新时间:2023-11-04 04:52:34 25 4
gpt4 key购买 nike

我是一名机器人学“入门”类(class)的大学生。今年年初,我们被告知要购买 Netburner 5270 板。在这一年里,我们学习了一些基本代码,但现在我们的期末项目快到期了,但我遇到了一个错误。 我的代码非常基础。我希望它首先检查按钮是否被按下,如果它被检查是否 dipswitch1 是高的,如果是然后打开 led1,打开伺服(开门),然后创建 - 写入一个字符串 - 并关闭一个文本文件到我的SD卡。一切正常...70% 的时间。

这个函数可以为我的 SD 卡完成我需要的一切

    void Enter_Door(char * FileName) {
iprintf("\r\nCreating file: %s\r\n", 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("\r\n Error in Opening:%s\r\n", 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 seconds\r\n", Secs);
int n = f_write( write_buf, 1, strlen( write_buf ), fp );
iprintf("Wrote %d bytes: %s", n, write_buf);

iprintf("Closing file %s\r\n\r\n", 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 循环试图重做调用,我不确定我是否写了那个 write(这又是我的第一个编码类(class))

我的错误发生在 f_close 函数中。我将连续按下按钮 10 次,一切正常,但第 11 次我会出错,但第 12 次它会再次工作吗?我的典型错误是:* 任务(主要)期间 f_close("Enter.txt") 出错;F_ERR_NOTOPEN

* 任务(主要)期间 f_close("Enter.txt") 出错;F_ERR_WRITE

* 任务(主要)期间 f_close("Enter.txt") 出错;F_ERR_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 次,这是不好的做法。

关于c++ - f_close 错误(写入 SD 卡我的最终项目),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13730499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com