микроконтроллер — двоичное чтение и запись в стек переполнения

Я делаю проект регистратора данных. В моем регистраторе данных у меня есть 5 датчиков, таких как: температура, влажность, акселерометр, свет и барометр.

Здесь я храню данные на SD-карте в двоичном формате. Я храню акселерометр на 3200 Гц и все остальные датчики на 1 Гц.

Во время записи я добавляю специальный символ к каждому измерению, как показано ниже.

 if(DRDY)
{
fwrite(&accdata,sizeof(char),1,logFile);  // accelerometer special char
accelerometer.getOutput(readings);
int16_t store[3] = {(int16_t)readings[0],(int16_t)readings[1],(int16_t)readings[2]};  // accelerometer data
fwrite((store),sizeof(int16_t),3,logFile);

}if(flag_humi)
{
flag_humi = 0;
fwrite(humidata,sizeof(char),1,logFile); // humidity character
float store2[1] = {sht.readHumidity()};  // humidity data
fwrite(store2,sizeof(float),1,logFile);
}
if(flag_temp)
{
flag_temp = 0;
fwrite(tempdata,sizeof(char),1,logFile);  // temp character
float store1[1] = { sht.readTemp()};   // temp data
fwrite(store1,sizeof(float),1,logFile);
}

При чтении данные разделяются по специальному символу.

   while ((nr = fgetc(logFile)) != EOF){
if (nr == 5){    // 5 is special character  for accelerometer
fread(read,sizeof(int16_t),3,logFile);
pc.printf("\r\n %i, %i, %i ",read[0],read[1],read[2]);
}else if(nr == 10){  // 10 is char for temp
fread(temp_read,sizeof(float),1,logFile);
pc.printf("\r\n %f",temp_read[0]);
}
else  if(nr ==15)   // 15 is character for humidity
{
fread(humi_read,sizeof(float),1,logFile);
pc.printf("\r\n %f",humi_read[0]);
}

Все отлично. Теперь я хотел бы удалить специальный символ для акселерометра, поскольку написание специального символа приводит к потере некоторых образцов.

Я попробовал один раз, написав акселерометр без spl.character и другие датчики с spl.character.

Во время чтения я думал, что смогу читать только акселерометр, потому что у других есть что-то еще.

   while ((nr = fgetc(logFile)) != EOF){
if(nr == 10){  // 10 is char for temp
fread(temp_read,sizeof(float),1,logFile);
pc.printf("\r\n %f",temp_read[0]);
}
else  if(nr ==15)   // 15 is character for humidity
{
fread(humi_read,sizeof(float),1,logFile);
pc.printf("\r\n %f",humi_read[0]);
}
else  {    // 5 is special character  for accelerometer
fread(read,sizeof(int16_t),3,logFile);
pc.printf("\r\n %i, %i, %i ",read[0],read[1],read[2]);
}

Но он показывает все неправильные значения и его невозможно остановить. Как я могу достичь этого?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]