如何在嵌入式 C 中的文本文件中写入数字
How to write numbers in text files in embedded C
我正在使用 EFM32wg280f256,我想通过以下方式调试我正在编写的代码:在 SD 内存中打开一个文件并写入我正在使用的缓冲区的内容。
这是我尝试的最小示例:
#include <stdbool.h>
#include "ff.h"
#include <stdio.h>
#include <complex.h>
#include "arm_math.h"
#include "audioMoth.h"
#define NUMBER_OF_SAMPLES_IN_BUFFERS_DATA 4
static float32_t* buffersDATA[12];
int main(void) {
//Create buffers
buffersDATA[0] = (float32_t*)AM_EXTERNAL_SRAM_START_ADDRESS;
for (int i = 1; i < 12; i += 1) {
buffersDATA[i] = buffersDATA[i - 1] + NUMBER_OF_SAMPLES_IN_BUFFERS_DATA;
}
//Example of collected data
float32_t var0[] = {-29.499557,-67.498978,-54.499176,-53.499191};
//Pass collected data to one of created buffers
for (int j = 0; j <NUMBER_OF_SAMPLES_IN_BUFFERS_DATA; j+= 1){
*(buffersDATA[0]+j) = var0[j];
}
//Initialize file system
AudioMoth_enableFileSystem();
// Write text file
FIL fpt;
f_open(&fpt,"dataVAR.txt", FA_CREATE_ALWAYS | FA_WRITE);
for (int i = 0; i <NUMBER_OF_SAMPLES_IN_BUFFERS_DATA; i+= 1){
char str[8];
sprintf(str, "%d, ", (int)var0[i]);
f_puts(str,&fpt);
}
f_close(&fpt);
// Write another text file
FIL fptr;
f_open(&fptr,"data.txt", FA_CREATE_ALWAYS | FA_WRITE);
for (int i = 0; i <NUMBER_OF_SAMPLES_IN_BUFFERS_DATA; i+= 1){
char str[8];
sprintf(str, "%d, ", (int)*(buffersDATA[0]+i));
f_puts(str,&fptr);
}
f_close(&fptr);
}
类型转换是因为 sprintf
不支持浮点值,但整数足以让我知道我是否做得好。
当我打开dataVAR.txt时:
-29, -67, -54, -53,
但是data.txt:
0, 0, 0, 0,
当它们应该相同时。
我已经在可执行文件中尝试过相同的操作(对其进行调整)以验证我是否正确传递了值(看起来是这样)。
问题出在哪里?
提前致谢。
好的,问题是我没有初始化单片机和SRAM外部芯片之间的通信。
我做到了,一切都按预期工作。
我正在使用 EFM32wg280f256,我想通过以下方式调试我正在编写的代码:在 SD 内存中打开一个文件并写入我正在使用的缓冲区的内容。
这是我尝试的最小示例:
#include <stdbool.h>
#include "ff.h"
#include <stdio.h>
#include <complex.h>
#include "arm_math.h"
#include "audioMoth.h"
#define NUMBER_OF_SAMPLES_IN_BUFFERS_DATA 4
static float32_t* buffersDATA[12];
int main(void) {
//Create buffers
buffersDATA[0] = (float32_t*)AM_EXTERNAL_SRAM_START_ADDRESS;
for (int i = 1; i < 12; i += 1) {
buffersDATA[i] = buffersDATA[i - 1] + NUMBER_OF_SAMPLES_IN_BUFFERS_DATA;
}
//Example of collected data
float32_t var0[] = {-29.499557,-67.498978,-54.499176,-53.499191};
//Pass collected data to one of created buffers
for (int j = 0; j <NUMBER_OF_SAMPLES_IN_BUFFERS_DATA; j+= 1){
*(buffersDATA[0]+j) = var0[j];
}
//Initialize file system
AudioMoth_enableFileSystem();
// Write text file
FIL fpt;
f_open(&fpt,"dataVAR.txt", FA_CREATE_ALWAYS | FA_WRITE);
for (int i = 0; i <NUMBER_OF_SAMPLES_IN_BUFFERS_DATA; i+= 1){
char str[8];
sprintf(str, "%d, ", (int)var0[i]);
f_puts(str,&fpt);
}
f_close(&fpt);
// Write another text file
FIL fptr;
f_open(&fptr,"data.txt", FA_CREATE_ALWAYS | FA_WRITE);
for (int i = 0; i <NUMBER_OF_SAMPLES_IN_BUFFERS_DATA; i+= 1){
char str[8];
sprintf(str, "%d, ", (int)*(buffersDATA[0]+i));
f_puts(str,&fptr);
}
f_close(&fptr);
}
类型转换是因为 sprintf
不支持浮点值,但整数足以让我知道我是否做得好。
当我打开dataVAR.txt时:
-29, -67, -54, -53,
但是data.txt:
0, 0, 0, 0,
当它们应该相同时。
我已经在可执行文件中尝试过相同的操作(对其进行调整)以验证我是否正确传递了值(看起来是这样)。
问题出在哪里?
提前致谢。
好的,问题是我没有初始化单片机和SRAM外部芯片之间的通信。
我做到了,一切都按预期工作。