2015-12-23 8 views
0

Я использую 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) 

но это дало мне ошибку.

+0

Если вы собираетесь читать только один символ, 'Int ч; ch = getc (p-> filepointer); ... if (ch == EOF) break, 'будет, вероятно, проще. Кроме того, вы должны переместить 'G_RUNNING && ephpubData-> readedBytes <2520)' в начало условия, чтобы избежать чтения символа, когда вы этого действительно не хотите. («short-circuiting») – wildplasser

+0

Сохраняет ли предыдущую действующую позицию в файле? – scuba

+0

getc() и fgetc() читают ровно один символ (если есть один) последовательно, поэтому следующий вызов получит следующий символ: нет необходимости искать. – wildplasser

ответ

0

Извините, но я нашел ошибку.

Где-то в коде я делаю:

FSfseek(ephpubData->filetouart , 0 , SEEK_SET); 

который устанавливает позицию чтения в 0.