Имя файла SDcard как метка даты - PullRequest
0 голосов
/ 09 мая 2018

Я использую ядерную плату STM32F072RB, и я подключил к ней плату для дыхания SDcard. Я могу читать / писать текстовые файлы, и я также использую RTC. Проект больше похож на регистратор данных.
Я связал LM35 с аналоговым выводом STM32, и я могу записать данные с отметкой времени.

Следующее, что я пытаюсь - это указать имя файла, например, "MAY09_00.TXT". Чтобы получить имя файла, как упомянуто выше, я должен прочитать дату и время RTC и затем поместить его в имя файла. Проблема в том, что когда я читаю дату (которая находится в uint8_t) и приводю ее к (char), она принимает значение char ASCII, а не дату как char. Это похоже на классическую проблему, и я попытался найти онлайн, но не смог найти большую помощь. Я знаю, что я ищу функцию наподобие itoa (), но она действительно для стандартной библиотеки C. Я не знаю, предоставляет ли ST такую ​​служебную библиотеку для своего MCU.

char *fname;
char filename[12] = {' ',' ',' ',' ',' ','_','0','0','.','T','X','T'};

HAL_RTC_GetTime(&hrtc, &time3, RTC_FORMAT_BIN);
  HAL_RTC_GetDate(&hrtc, &date, RTC_FORMAT_BIN);  

  if(date.Month == 1)
  {
    fname = "JAN ";
  }
  else if(date.Month == 2)
  {
    fname = "FEB ";
  }
  else if(date.Month == 3)
  {
    fname = "MAR ";
  }
  else if(date.Month == 4)
  {
    fname = "APR ";
  }
  else if(date.Month == 5)
  {
    fname = "MAY ";
  }

  if(date.Date < 60)
  {
    int i = 0; int j = 0;
    int len = 0;
    for(i=0; *(fname) != NULL; i++)
    {
      filename[i] = *(fname);
      if(*(fname)==' ')
      {
        filename[i] = '0';
      }
      fname++;
    }
    filename[4] = (date.Date); // when I use today's date 9, it takes /t instead of '9'
  }

1 Ответ

0 голосов
/ 09 мая 2018

Вот полная логика. Следующая логика для двузначной даты.

dt = date.Date;
dt = (dt % 10);
dt &= 0x0f;
dt |= 0x30;
filename[3] = (char) dt;

dt2 = date.Date;
dt2 = (dt2 / 10);
dt2 &= 0x0f;
dt2 |= 0x30;
filename[4] = (char) dt2;
...