【发布时间】:2017-04-30 06:51:59
【问题描述】:
我正在为数据记录设备编写固件。它以 20 Hz 的频率从传感器读取数据并将数据写入 SD 卡。但是,将数据写入 SD 卡的时间并不一致(大约 200-300 毫秒)。因此,一种解决方案是以一致的速率将数据写入缓冲区(使用定时器中断),并在缓冲区已满时使用第二个线程将数据写入 SD 卡。
这是我的幼稚实现:
#define N 64
char buffer[N];
int count;
ISR() {
if (count < N) {
char a = analogRead(A0);
buffer[count] = a;
count = count + 1;
}
}
void loop() {
if (count == N) {
myFile.open("data.csv", FILE_WRITE);
int i = 0;
for (i = 0; i < N; i++) {
myFile.print(buffer[i]);
}
myFile.close();
count = 0;
}
}
代码存在以下问题:
- 当缓冲区已满时,向 SD 卡写入数据会阻塞读取
- 它可能有竞争条件。
解决此问题的最佳方法是什么?使用循环缓冲区还是双缓冲?如何确保不会发生竞态条件?
【问题讨论】:
标签: io arduino embedded system deadlock