Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Способы чтения/записи Avr DOS


Способы чтения/записи Avr DOS

Сообщений 1 страница 6 из 6

1

Так-то ничего сложного в этом нет, но есть некоторые вопросы, может кто наставит на путь истинный.
Как можно прочитать файл по байтам, при этом знать конец строки и не вводить строку полностью в контроллер?
Бывают строки длинные, практика показала, строки длиной 40-60 символов иногда даже в 4х кб. Atmega128 забегает в другие области памяти.

Есть оператор

Код:
 Lineinput

, он читает строку полностью, но строки могут быть гигантскими.
Есть

Код:
 Input

, он уже как-то читает до запятой или чего то там и в тексте это не предсказуемо.

Может кто имел дело с чтением длинного текстового файла? А то как-то жирно переменную

Код:
String*70

держать в памяти контроллера  :blush:

0

2

А как же гет? http://avrhelp.mcselec.com/index.html?get.htm
И потом всё равно, все алгоритмы работы с SD картой предполагают загрузку блоками/страницами (особенности передачи данных контроллером карты).

+1

3

RDW написал(а):

А как же гет?.

Как-же я его упустил то  :blush: , сам же в Qbasic им злоупотреблял!
PUT и GAT в Bascom Avr работают в бинарном режиме, то-есть я без строк просто с начала и до конца читаю файл, а уж потом программно выделяю по коду символа конец строки? Всё так просто?

Отредактировано Ev3658 (2016-04-02 22:15:03)

0

4

Оставлю для тех, кто ищет информацию:
Текстовый файл с длинными строками в AVR DOS можно  открыть так:

Код:
File = "SCH-102.bin"
Open File For Binary As #1
Do
Get #1 , B
Loop Until Eof(1) <> 0
Close #1

Где B - переменная типа байта, в ней получаете коды по таблице ASCII, желательно 8 бит сделать = 0, то-есть B.7=0.
Конец строки можно узнать по символу LF, он №10, то-есть если B=10, значит переход на другую строку.
Подсчёт кол-во строк:

Код:
File = "SCH-102.bin"
Dlinafile = 0
Open File For Binary As #1
Do
Get #1 , B
B.7 = 0
If B = 10 Then Dlinafile = Dlinafile + 1
Loop Until Eof(1) <> 0
Close #1

Если нужно собрать строку текста, то тоже без проблем: S=S+str(B)

Заметьте, файл открывается в Open File For Binary As #1 режиме, это позволяет записывать (PUT #1,B) и считывать (GET #1,B).
Когда дойдёт до конца файла "Loop Until Eof(1) <> 0" цикл разорвётся и поток #1 закроется.

Отредактировано Ev3658 (2016-04-05 09:07:23)

0

5

Это как бы азы, понятно...а если бинарник? В обычных бэйсиках вроде тоже прокатывает Eof, а в баскоме так же?

0

6

RDW написал(а):

В обычных бэйсиках вроде тоже прокатывает Eof, а в баскоме так же?

Так я и читал файл в бинарном режиме, EOF прокатывает без проблем.

Код:
File = "SCH-102.bin"
Dlinafile = 0
Open File For Binary As #1
Do
Get #1 , B
B.7 = 0
If B = 10 Then Dlinafile = Dlinafile + 1
Loop Until Eof(1) <> 0
Close #1

А можно и так:

Код:
File = "SCH-102.bin"
Dlinafile = 0
Open File For Binary As #1
Do
Get #1 , B
B.7 = 0
If B = 10 Then Dlinafile = Dlinafile + 1
If Eof(1) <> 0 THEN Exit DO
Loop
Close #1

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Способы чтения/записи Avr DOS