Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

Re: Котуинко

Вт дек 24, 2019 14:18:56

ОК. Выложите код который используете в QB для доступа к COM порту.

Re: Котуинко

Вт дек 24, 2019 15:54:46

Как я уже выше (до бурного обсуждения яиц") писал:
"В неспешных планах - доработать консольку к базовой котуинке и программатору для ат89сх051...
:sleep:
..."
вот будет готово - выложу.
Пока стадия проверок/тренировок/оценки чего и куда можно использовать.
Возможно и не понравится/чего-то не устроит - это ж мои "хотелки" - спешить некуда!
8)

Re: Котуинко

Вт дек 24, 2019 16:11:17

Я не пишу о законченной программе, а только о работе с COM портом, т. е. его открытие, прием и передача данных. Или у вас нет никаких наработок (например из других программ)?

Re: Котуинко

Ср дек 25, 2019 12:16:56

Есть.
Но того, чего моим хотелкам надобно пока не совсем получается - мутим воду в ступе (нет достаточного описания по нужным моментам - приходится пробным тыком).
У МК можно с СОМ портом (UART) аки пожелается работать.
А вот ЯВУ обычно через функции/библиотеки - их то и долбимсс...
Да еще "побочные эфекты" по разнице ввода с клавиатуры, русификаторам и прочим мелкопакостям разницы ХР и DOS-Win98.
:twisted:

Re: Котуинко

Ср дек 25, 2019 12:21:30

BOB51 писал(а):А вот ЯВУ обычно через функции/библиотеки - их то и долбимсс...
если смириться с тем, что настройку COM-порта делать через свойства драйвера в диспетчере устройств, то на уровне ЯВУ работа с COM-портом в самом простом случае ничем не отличается от работы с файлом: открываете файл "COM1", и пишите-читаете его, потом закрываете (можно и не закрывать - по завершению программы ОС сама все позакрывает).

единственное, к чему надо быть готовым при таком подходе, так это в к тому, что если МК на комп не послал данные, попытка чтения из такого "файла" начнется, но не кончится - будет ждать данных. если МК так и не пришлет ничего, задачу придется снимать диспетчером задач.

Re: Котуинко

Ср дек 25, 2019 12:27:17

Там больше гвоздь не в настройках, а в "непечатаемом обрамлении"...
0х0D - 0x0A и когда оные заблаговолят добавится в каждом конкретном случае.
8)
Вобчемс потихоху проверяю "границы дозволенного" да как и куда их применить.
:write:

Re: Котуинко

Ср дек 25, 2019 12:31:37

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

Re: Котуинко

Ср дек 25, 2019 13:04:50

Дык нормально все - "идет плановый процесс" садизма над прожками.
8)
Собственно считать - принять - переслать - записать *.hex файлик.
Так чтоб корректно во всех случаях (из возможных) было.
:write:

Re: Котуинко

Ср дек 25, 2019 13:24:59

ARV писал(а):если смириться с тем, что настройку COM-порта делать через свойства драйвера в диспетчере устройств
Если не обратили внимание BOB51 собирается писать на QB т. е. бейсике для DOS. А в нем кроме прямого доступа к порту вроде нет другого способа работы (даже если в QB есть функции работы с портом, в конечном счете они используют прямой доступ, т. е. в DOS драйверов порта не было). Так что настройки диспетчера устройств не имеют значения.

ARV писал(а):единственное, к чему надо быть готовым при таком подходе, так это в к тому, что если МК на комп не послал данные, попытка чтения из такого "файла" начнется, но не кончится - будет ждать данных.
Перед чтением можно проверить есть ли данные в буфере приема порта.

Re: Котуинко

Ср дек 25, 2019 13:30:52

Мурик писал(а):вроде нет другого способа работы
я не говорю о работе с портом, я говорю о работе с файлом. правда, с COM-портами в DOS-е не работал, но вот "файл" LPT1 открывался на ура, и печатал все отлично. может, так и есть какие-то тонкости, но на уровне файлов должно и с COM-портами работать, имхо.

Мурик писал(а):Перед чтением можно проверить есть ли данные в буфере приема порта
можно, но я говорил о самом примитивном варианте работы с ним.

Re: Котуинко

Чт дек 26, 2019 10:17:00

Как раз qbasic использует функционал DOS при работе с СОМ портом (особо туда лезть не требуется), который вполне поддерживаем при работе с ХР. Относительно LPT по непосредственному адресу там возможен только прямой ввод/вывод в/из регистра данных, а доступ к управляющим регистрам по прямому адресу ХР блокирует, что и привело в недалеком прошлом к прекращению работы со старыми самодельными программаторами. Там у меня обмен шел частично через служебный регистр LPT непосредственным "программным ногодрыгом". А вывод в LPT как в файл ессно на сегодня уже особого интереса не представляет.
Гораздо более перспективно с точки обмена с всяко-внешней безделицей использовать СОМ (или USB-COM на соответствующих номерах, поддерживаемых старовасиками - СОМ1, СОМ2).
Посему за основу и взяты работа с текстовыми файлами (частность формат intel hex8 он же и как простой *.txt может быть записан) и с СОМ портом как с файлом random доступа.
Вполне себе приятненькая штука, учитывая что в КОТУИНКе (и в программаторе для АТ89Сх051 на ее основе) для обмена и управления используются именно *.hex файлики.
Одначе там и просто непосредственные ASCII сторки информационных сообщений через СОМ перегоняются.
:roll:
Относительно простых строк - проблем вообще никаких нету.
А вот с точным преобразованием *.hex блоков кой - чего таки пришлось помудрить из-за неполной информации.
Смысл перебросок -
чтение с диска и пересылка через СОМ на устройство
и
прием с устройства и запись в ранее заготовленный пустой шаблон *.txt...
В основном проблемы в выборе INPUT# или LINE INPUT#, разных опциях самого СОМ как файла при открытии и поведении "непечатаемых символов" обрамления - 0x0D, 0x0A, 0x1A при записи/чтении данных в/из целевого файла на диске.
Ибо мудрить с добавлением 0x1A в готовые файлы есть некошерно, а "задвоение" 0x0A порой весьма на нерву действует.
Вобчемс... разобрался и с этим.
:hunger:
Благо тестировка особо проблем не представляет - открываем обыкновенный terminal на СОМ1 и собственно васик на СОМ2 да гоняем заранее известные файлики туда-сюда пока необходимый результат не получим.
Из аппаратной добавки - простейший перекрестный кабель (нуль-модемный) с минимальным набором сигнальных линий - используются только RxD, TxD и "земляной" (прицел на радиоканал).
Из дополнительных средств анализа - hieW6.86 - дабы наблюдать те "непечатные" в исходном и конечном файликах.
:hunger:
Теперь все расписать по конспектам да добавить всякоудобств, контроля и прочего интерфейсу для результирующей консольки програмаматора...
:write:

Re: Котуинко

Чт дек 26, 2019 13:58:06

BOB51 писал(а):А вот с точным преобразованием *.hex блоков кой - чего таки пришлось помудрить из-за неполной информации.
https://ru.wikipedia.org/wiki/Intel_HEX

Re: Котуинко

Чт дек 26, 2019 14:03:22

МУРИК
речь не о формате *.hex файла и его интерпретации!
:tea:
Там просто не всегда "непечатные" на свои места в нужном количестве попасть могут -
зависит от применяемых команд и настроек СОМ порта.
Информация как раз о специфике команд маловата была.
8)

Re: Котуинко

Чт дек 26, 2019 15:14:57

В вики написан формат данных в файле. Разобрать его или собрать не представляет сложностей.
Передавать данные hex файла в МК и в нем разбирать обычно не имеет смысла. Проще разобрать на компе, а через порт отправить бинарные данные.

Re: Котуинко

Чт дек 26, 2019 16:08:30

Еще раз повторяю -
источником проблем являются
не сами данные, а "непечатные символы" обрамления символьной строки данных.
Эти байтики в обычном режиме просмотра НЕ ВИДНЫ, однако весьма коварно себя проявляют.
ЛЮБАЯ строка intel hex файла стандартно имеет два завершающих символа ASCII
0x0D и 0x0A (CR,LF)
однако если при промежуточной обработке чего-то из них или исчезнет или
удвоится - нормального результата можно не ожидать.
Чаще всего вариант
......0x0D 0x0A 0x0A вместо
......0x0D 0x0A
как следствие - к примеру строка завершения файла:
.....
:00000001FF
может внезапно оказаться на байт длиннее -
хотим контролировать 9-й байт (1 в случае конца файла):
m$ = MID$(B$, 9, 1) не сработает - по факту при "задвоении 0x0A" в m$ попадет значение 0 от 8-го байта
причем не факт, что подобное "задвоение" будет с первого раза обнаружено - в первой строке обрабатываемого файла
(считали, через СОМ переслали и записываем) такой скрытый подарочек может проявится только при обработке второго файла из нескольких последовательно пересылаемых.
или внезапно в записанном на диск файле при его открытии стандартным редактором вместо слитно следующих строк
появится "черезполосица" которую уже дальше по назначению использовать без редактирования вручную будет затруднительно.
8)

Re: Котуинко

Чт дек 26, 2019 17:53:27

Задача легко решается.
Код:
s$ = "1234"+Chr($0C)+Chr($0A)+Chr($0A)+Chr($0A)+
     "5678"+Chr($0A)+
     "0000"+Chr($0C)+
     "4321"+Chr($0A)+Chr($0C) ; Такая вот строка.

ReplaceString(s$, Chr($0C), Chr($0A), #PB_String_InPlace) ; Замена в исходной строке 0x0C на 0x0A.
s$ = ReplaceString(s$, Chr($0A)+Chr($0A), Chr($0A))       ; Замена двух следующих друг за другом 0x0A на один.
Count = CountString(s$, Chr($0A))                         ; Узнаем сколько 0x0A в строке.

Debug "Count = "+Count
Debug " ---- "

For i = 1 To Count
  str$ = Trim(StringField(s$, i, Chr($0A)))
  If str$ <> ""
    Debug str$
  EndIf
Next

Re: Котуинко

Пт дек 27, 2019 10:51:01

Снова не то!
8)
Стандартно файл имеет или запись заданного размера.... (что для строки *.hex файла неприемлемо ибо они могут быть переменной длины) или надо использовать INPUT#/LINE INPUT# с последующим PRINT# одной и той же строки.
Зачем собственно вникать в СОЗДАНИЕ или РЕДАКТИРОВАНИЕ заранее сделанного содержимого на уровне программы транзитной пересылки (кроме проверок контрольной суммы да ошибок обмена в максимальном варианте)?.
Нужно всего-то УЖЕ ГОТОВЫЕ *.hex блоки перегонять, да простые информационные строки для вывода в окошко консоли сообщений.
Только тут малость разница - строка сообщения это LINE INPUT#, а для *.hex записи более корректно INPUT# (относительно файла на диске или СОМ порта как файла режима RANDOM).
Это при одной и той же конфигурации СОМ порта.
Изготовление самих *.hex делается в других программах/устройствах.
А вот СОВМЕСТИМОСТЬ результата для использования в иных программаторах (содержимое скачанное из ПЗУ МК) обязана присутствовать. Т.е. корректно созданный во внешнем устройстве (или считанный с диска) *.hex файл должен пройти передачу через СОМ порт и также корректно далее быть записанным на диск.
Да и как писалось выше ПРОБЛЕМА уже УСПЕШНО РЕШЕНА.
А долизывать и восстанавливать старую консольку - то уже по мере желания и времени.
Всеж - таки НОВОГОД!
:beer:

Re: Котуинко

Пт дек 27, 2019 13:23:46

BOB51 писал(а):Снова не то!
Тогда что подразумевали под этим?
BOB51 писал(а):ЛЮБАЯ строка intel hex файла стандартно имеет два завершающих символа ASCII 0x0D и 0x0A (CR,LF) однако если при промежуточной обработке чего-то из них или исчезнет или удвоится - нормального результата можно не ожидать. Чаще всего вариант...... 0x0D 0x0A 0x0A вместо...... 0x0D 0x0A

Мне неоднократно приходилось разбирать hex файлы и создавать их и не возникало описанных проблем.

Re: Котуинко

Пт дек 27, 2019 14:45:57

Вопрос именно в пересылке - какая настройка СОМ порта и какие команды использовать.
Это не создание файла средствами программы, а пересылка уже готовых между потребителями.
Ведь читаем строку символов ВСЮ. ее же и отсылаем.
Причем с дисковыми файлами проще - один как input, другой как output - а вот СОМ предпочтительно random...
Строка читается из одного и пишется в другой (не анализируется и не пересобирается).
Причем во всех случаях присутствует СОМ (или как источник или как приемник), а не файл-файл на диске.
:roll:
Ежли б тот 0х0А, добавленный в конец там и оставался после пересылки - то вероятно быстрее бы внимание обращено было.
А тут ошибка проявляется по - хитрому - добавленный 0х0А цепляется к началу следующей строки.
Пока вспомнил все давно позабытое, да чего и не знал...
8)
Ну да то еще не все "мелконюансы" - ведь база QBasic (1.0/4.5/7.1) таки для 98-й в лучшем случае была сделана.
дополнительно вылез нюанс по вводу с клавиатуры:
n$=INKEY$ при запуске под ХР не выполняется
вместо него приходится цеплять
n$ = INPUT$(1)
какие-то отличия в обработке клавиатуры...
:dont_know:
Вероятно ещё чего-нибудь по ходу вылезет - не даром же матюк от мелкософта при запуске
"ОЙ!!! НЕ ТА СИСТЕМА!!! Я ТОЛЬКО ПОД ДОС АРБАЙТЕН БЕЗ МОЗГОТРЕПА!!!"
:twisted:
Хотя родную DOS от ХР таки признают ВСЕ васики.
Было сомнение - сможет ли пройти запись файла на NTFS диск - пишут те васики без проблем.
:beer:
Последний раз редактировалось BOB51 Пт дек 27, 2019 22:00:22, всего редактировалось 1 раз.

Re: Котуинко

Пт дек 27, 2019 16:11:35

BOB51 писал(а):Ведь читаем строку символов ВСЮ. ее же и отсылаем.
Проще на компе преобразовать hex в bin и отослать через порт. Все равно это нужно сделать.

BOB51 писал(а):Причем с дисковыми файлами проще - один как input, другой как output - а вот СОМ предпочтительно random...
COM это последовательный порт. Какой random доступ хотите получить?

BOB51 писал(а):Строка читается из одного и пишется в другой (не анализируется и не пересобирается).
Еще скажите что в МК зашивается hex как есть без преобразования в bin?
Ответить