Я использую PIC32MX в дизайне, сделанном мной, и все работает отлично.Чтение из определенной части файла PIC32MX
Теперь я пытаюсь реализовать функцию, которая в основном для чтения из файла последовательно, пока не нашел определенный кадр символов, так что я делаю:
while((readedBytes = FSfread((void *)&c,sizeof(char),1,ephpubData->filetouart) != 0) && G_RUNNING && ephpubData->readedBytes < 2520){
privData->txBuffer[privData->txBufferPos++] = c;
ephpubData->readedBytes = ephpubData->readedBytes + readedBytes;
if (privData->txBufferPos == TX_BUFFER_SIZE){
if (verifyDate (task) == 1){
*gpsState = GPS_STATE_VERIFY;
ephpubData->count++;
break;
}
FSfseek(ephpubData->filetouart , ephpubData->readedBytes , SEEK_SET);
privData->txBufferPos = 0;
}
}
В первый раз, когда он находит кадр (с помощью функции verifyDate) все в порядке, и он переходит к разрыву предложения. Когда нужно дочитать второй раз в цикле while (после закрытия/повторного открытия файла и выполнения других действий в коде), он снова переходит в первую позицию. Так что я хочу сохранить последнюю позицию, найденную до разрыва предложения. Я уже пытался использовать функцию поиска для каждой итерации
while((readedBytes = FSfread((void *)&c,sizeof(char),1,ephpubData->filetouart->seek) != 0) && G_RUNNING && ephpubData->readedBytes < 2520)
но это дало мне ошибку.
Если вы собираетесь читать только один символ, 'Int ч; ch = getc (p-> filepointer); ... if (ch == EOF) break, 'будет, вероятно, проще. Кроме того, вы должны переместить 'G_RUNNING && ephpubData-> readedBytes <2520)' в начало условия, чтобы избежать чтения символа, когда вы этого действительно не хотите. («short-circuiting») – wildplasser
Сохраняет ли предыдущую действующую позицию в файле? – scuba
getc() и fgetc() читают ровно один символ (если есть один) последовательно, поэтому следующий вызов получит следующий символ: нет необходимости искать. – wildplasser