Mi firmware en un ciclo por 10 segundos está moviendo la cadena a la salida (archivo csv en la tarjeta SD). El problema es que la cadena a veces de forma no determinista está cambiando agregando valores que no deberían estar allí o poner espacio en el medio. ¿Está esto relacionado con la función sprintf o la memoria dinámica asignada para esa cadena?
Editar: estoy adjuntando código
void archPolling()
{
double archCountVal[200];
float archDataVal[100];
char *FilStringMeas = malloc(sizeof(char) * 2048);
char *FilArchive = malloc(sizeof(char) * 4096);
vArchEvent eventArch = STATE_POLLING;
unsigned char CiphCRC[5];
FIL FilData;
UINT bw;
int queueSize = 0;
if ( xSemaphoreTake( MutexMeasurment, 200 ) == pdTRUE)
{
eventArch = STATE_COLLECT;
}
if (eventArch == STATE_COLLECT)
{
while (uxQueueMessagesWaiting(xDataQueue) > 0)
{
xQueueReceive(xDataQueue, &archDataVal[queueSize], 0);
queueSize++;
}
xSemaphoreGive(MutexMeasurment);
if (queueSize > 0 && timerFlag == 1)
eventArch = STATE_FORM;
else
eventArch = STATE_POLLING;
}
if (eventArch == STATE_FORM)
{
//portENTER_CRITICAL();
HAL_RTC_GetTime(&RtcHandle, &RTCTimeArch, FORMAT_BIN);
HAL_RTC_GetDate(&RtcHandle, &RTCDateArch, FORMAT_BIN);
sprintf(FilArchive, "%02d-%02d-%02d,%02d:%02d:%02d,1", RTCDateArch.Date, RTCDateArch.Month, RTCDateArch.Year, RTCTimeArch.Hours, RTCTimeArch.Minutes, RTCTimeArch.Seconds);
sprintf(FilStringMeas, ",");
for (int i = 0; i < queueSize; i++)
{
sprintf(FilStringMeas, "%s%f,", FilStringMeas, archDataVal[i]);
}
strcat(FilArchive, FilStringMeas);
archCRC((BYTE *) FilArchive, strlen(FilArchive), CiphCRC);
strcat(FilArchive, (char *) CiphCRC);
strcat(FilArchive, "\n");
//portEXIT_CRITICAL();
eventArch = STATE_SYNC;
}
if (eventArch == STATE_SYNC)
{
f_open(&FilData, "0:55AD001.csv", FA_OPEN_EXISTING | FA_WRITE);
f_lseek(&FilData, f_size(&FilData));
f_write(&FilData, FilArchive, strlen(FilArchive) * sizeof(char), &bw);
f_close(&FilData);
timerFlag = 0;
eventArch = STATE_POLLING;
}
free(FilStringMeas);
free(FilArchive);
}