Как писать числа в текстовых файлах во встроенном C - PullRequest
1 голос
/ 18 июня 2020

Я работаю с 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,

когда они должны быть то же самое.

Я пробовал то же самое в исполняемом файле (адаптируя его), чтобы убедиться, что я правильно передаю значения (кажется, так).

В чем проблема?

Заранее спасибо.

1 Ответ

0 голосов
/ 22 июня 2020

Хорошо, проблема заключалась в том, что я не инициализировал связь между микроконтроллером и внешним чипом SRAM.

Я сделал, и все заработало, как ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...