问题描述
我只能在 RingBuf
函数内使用 SdFat
库中的 setup()
,但我不明白为什么。是否可以将 RingBuf
和 File32
定义为全局并在设置期间仅配置一次?我正在开发 Teensy 4.1。
例如,此代码有效
#include "sdios.h"
#include "SdFat.h"
#include "RingBuf.h"
#define SD_CONfig SdioConfig(FIFO_Sdio) // Use Teensy Sdio
File32 stateFile;
RingBuf<File32,5> outRingBuff;
// SETUP function
void setup() {
Sdfat32 sdCard;
bool retValBool;
Serial.begin(9600); // Teensy serial is always at full USB speed and buffered... the baud rate here is required but ignored
Serial.println("Initialization SD card START");
// SD Initialization
if (!sdCard.begin(SD_CONfig)) {
sdCard.initErrorHalt(&Serial);
Serial.println("ERROR SD Initialization Failed!");
} else {
Serial.println("Initialization SD card DONE");
// Output file opening
retValBool = stateFile.open("aa.csv",O_RDWR | O_CREAT | O_Trunc);
// Output file opening
if (retValBool) {
outRingBuff.begin(&stateFile);
outRingBuff.write(',');
outRingBuff.write(',');
size_t numBytes = outRingBuff.writeOut(4);
Serial.println(numBytes);
outRingBuff.sync();
stateFile.sync();
stateFile.truncate();
}
}
}
// LOOP function
void loop() {
Serial.print("loop");
delay(800);
}
#include "sdios.h"
#include "SdFat.h"
#include "RingBuf.h"
#define SD_CONfig SdioConfig(FIFO_Sdio) // Use Teensy Sdio
File32 stateFile;
RingBuf<File32,');
size_t numBytes = outRingBuff.writeOut(4);
Serial.println(numBytes);
outRingBuff.sync();
stateFile.sync();
stateFile.truncate();
}
}
}
// LOOP function
void loop() {
Serial.print("loop");
outRingBuff.write('A');
outRingBuff.write('A');
outRingBuff.write('A');
outRingBuff.write('A');
size_t numBytes = outRingBuff.writeOut(4);
Serial.println(numBytes);
outRingBuff.sync();
stateFile.sync();
stateFile.truncate();
delay(800);
}
解决方法
我发现了问题。 SdFat32
对象是在 setup()
函数内部定义的,因此它在 loop()
函数内部是不可访问的。很可能,RingBuf
或 File32
对象都不会直接调用它,因此它不会检索任何错误,但是当 SdFat32
对象被调用时,无法将数据保存在 SD 上无法访问。
我认为应该修复这种行为,我认为应该引发错误或警告。