PDA

Просмотр полной версии : Поблочное чтение файла



IVM
22.03.2016, 13:45
Пытаюсь поблочно читать файл из внешней Flash при помощи асинхронной библиотеки. В файле f.txt записано 123;456*. Читаю по 4 байта. Первые четыре байта читаются правильно, а вторые четыре байта не правильно. В чем может быть причина ?

capzap
22.03.2016, 14:15
а скрин то приложите что получается при чтении второй то группы, не у всех же есть такой плк, и лучше бы иметь две строки для первого прочтения и для второго, а то может ошибка в дальнейшем преобразовании а не в чтении

IVM
22.03.2016, 14:25
а скрин то приложите что получается при чтении второй то группы, не у всех же есть такой плк, и лучше бы иметь две строки для первого прочтения и для второго, а то может ошибка в дальнейшем преобразовании а не в чтении

В MAS[0] получается 123, а в MAS[1] - 5. Из-за того, что не верно считываются вторые 4 байта и дальнейшее преобразование цикл не может завершиться.

Что значит "лучше бы иметь две строки для первого прочтения и для второго" ?

Первое чтение и преобразование происходят правильно. Второе чтение происходит не правильно.

capzap
22.03.2016, 14:33
так покажите на скрине что при втором проходе находится в строке, в массиве у Вас уже пройденные через постобработку данные - ни какой связи с чтением

IVM
22.03.2016, 14:42
так покажите на скрине что при втором проходе находится в строке, в массиве у Вас уже пройденные через постобработку данные - ни какой связи с чтением

К сожалению не могу показать скрин строки после второго чтения. Но если бы второе чтение было корректно, то преобразование было бы совершено верно и в MAS[1] получилось бы 456.

Еще раз пишу, что первое чтение и преобразование происходят корректно. Второе преобразование происходит не верно потому что не верно читаются вторые 4 байта.

Программа очень простая.

capzap
22.03.2016, 14:48
К сожалению не могу показать скрин строки после второго чтения. Но если бы второе чтение было корректно, то преобразование было бы совершено верно и в MAS[1] получилось бы 456.

Еще раз пишу, что первое чтение и преобразование происходят корректно. Второе преобразование происходит не верно потому что не верно читаются вторые 4 байта.

Программа очень простая.

аааа, замучился я Вас подводить к самостоятельному решению вопроса, прочтите в справке КДС диапазон типа данных байт и сравните то, что Вы подаете в свою функцию преобразования, вроде код похож на тот, что дается в бибке оскат, но как то своеобразно

IVM
22.03.2016, 15:19
аааа, замучился я Вас подводить к самостоятельному решению вопроса, прочтите в справке КДС диапазон типа данных байт и сравните то, что Вы подаете в свою функцию преобразования, вроде код похож на тот, что дается в бибке оскат, но как то своеобразно

А что там не так. Функция DEC_TO_BYTE родная оскатовская. Преобразование строки из первых четырех байт при помощи этой функции происходит правильно. Что мешает правильно произвести преобразование строки из следующих четырех байт - только то, что следующие четыре байта прочитаны не верно.

capzap
22.03.2016, 15:26
А что там не так. Функция DEC_TO_BYTE родная оскатовская. Преобразование строки из первых четырех байт при помощи этой функции происходит правильно. Что мешает правильно произвести преобразование строки из следующих четырех байт - только то, что следующие четыре байта прочитаны не верно.
это уже не смешно и скрин Вы не показываете, потому что там правильно всё считывается

IVM
22.03.2016, 15:34
это уже не смешно и скрин Вы не показываете, потому что там правильно всё считывается

Я бы показал, но у меня его нет. Вы сами подумайте. Если со строкой было бы все нормально, то преобразование было бы выполнено верно. Ведь при чтении первых четырех байт все нормально получается в MAS[0]. Программа циклическая, т.е. все действия повторяются.

capzap
22.03.2016, 15:44
открытым текстом говорю, функция DEC_TO_BYTE имеет выходное значение байт, массив MAS это тоже массив байт, байт как тип данных не может быть больше 255, подставляя в него большее значение Вы получите число по модулю 256. Да хоть десять раз Ваша прога будет циклической, Вас не затруднило запоминать индекс массива, почему вызывает сложности сохранять прочитанные строки

IVM
22.03.2016, 15:47
открытым текстом говорю, функция DEC_TO_BYTE имеет выходное значение байт, массив MAS это тоже массив байт, байт как тип данных не может быть больше 255, подставляя в него большее значение Вы получите число по модулю 256. Да хоть десять раз Ваша прога будет циклической, Вас не затруднило запоминать индекс массива, почему вызывает сложности сохранять прочитанные строки

Вот это верное заключение. Теперь мне все понятно, не те циферки я вписал в текстовый файл. Спасибо.