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

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

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

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


Вы здесь » Программирование ATMEL в BASCOM. » Исходники » Модуль Console


Модуль Console

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

1

Предназначен для работы с ANSI-терминалами (ZOC/Pro, PuTTY).

Состав: Console_Header.bas, Console.bas.

Тестовые проекты (svn):

1. Простой минимальный на ATtiny2313: https://mysvn.ru/avr/bascom/tinycmd/
2. Более расширенный пример на ATmega16: https://mysvn.ru/avr/bascom/ansibas/

Скачать исходники к себе можно при помощи плагина к Проводнику TortoiseSVN, выполнив операцию экспорта из репозитория svn.

http://img.radiokot.ru/files/4453/thumbnail/6agkbalab.png  http://img.radiokot.ru/files/4453/thumbnail/66thvzkso.png

Набор функций (интерфейс модуля):

Свернутый текст
Код:
Declare Sub Console_PutChar( ByVal AChar As Byte, ByVal ACodePage As Byte )
Declare Sub Console_WriteData
Declare Sub Console_WriteString( AText As String, ByVal ACodePage As Byte )
Declare Sub Console_NewLine
Declare Sub Console_ClearScreen( ByVal AMode As Byte )
Declare Sub Console_ClearLine( ByVal AMode As Byte )
Declare Sub Console_ClearForward( ByVal ACount As Byte )
Declare Sub Console_CursorOn
Declare Sub Console_CursorOff
Declare Sub Console_SaveCursor
Declare Sub Console_RestoreCursor
Declare Sub Console_SetForegroundColor( ByVal AColor As Byte )
Declare Sub Console_SetBackgroundColor( ByVal AColor As Byte )
Declare Sub Console_SetTextAttributes( ByVal Attributes As Byte )
Declare Sub Console_SetColor( ByVal AForegroundColor As Byte, ByVal ABackgroundColor As Byte )
Declare Sub Console_MoveTo( ByVal ALeft As Byte, ByVal ATop As Byte )

#if Console_Move_Enabled = 1
Declare Sub Console_Move( ByVal ADirection As Byte, ByVal ADelta As Byte )
#endif

#if Console_Beep_Enabled = 1
Declare Sub Console_Beep( ByVal AFrequency As Word, ByVal ADuration As Byte  )
#endif

#if Console_DrawFrame_Enabled = 1
Declare Sub Console_DrawFrame( ByVal ALeft As Byte, ByVal ATop As Byte, _
    ByVal AWidth As Byte, ByVal AHeight As Byte, ByVal AColor As Byte, _
    ByVal ABgColor As Byte, ACaption As String )
#endif

Отредактировано uni (2013-11-06 01:46:05)

+1

2

Напишите пожалуйста подробнее о возможностях модуля.
Я так понимаю, что он предназначен для отладки программ, да ещё и с элементами псевдографики?

0

3

Да, понимаете правильно. Первоначально это был класс на C++ из другого проекта. Я перенёс его в виде набора функций на бейсик. У меня есть специальное демонстрационное приложение, но на C++, которое показывает возможности применения такого подхода. Когда и его переведу на бейсик, то здесь отпишу. Самое навороченное, что я сделал - это двухпанельный файловый менеджер на ATmega16.

Вообще, функционал модуля достаточно стандартный. Вы можете управлять внешним видом терминала, можете перерисовывать отдельные его части независимо друг от друга. Используется кодировка CP866, поэтому можно рисовать в псевдографике. Единственно, есть всего два терминала, с которыми можно работать. Один ZOC/Pro 5.07, второй PuTTY. Первый платный, но с ним работать легче, он есть на рутрекере. У второго по умолчанию не красиво настроены цвета отображения, их придёт немного подкорректировать, чтобы цвет был не таким ярким.

Лучше, конечно, один раз увидеть, чем сто раз услышать. Я покажу на примере. Да, кстати, во всех моих проектах есть схема в Proteus и прошика (hex, obj), поэтому их можно скачать и сразу попробовать, оглядываясь на исходник. Я не использую Bascom как среду разработки, вместо этого пишу код либо в Visual Studio 2008, либо в Notepad++, там удобнее, а сборку делаю скриптами. Поэтому не удивляйтесь обилию лишних файлов в проектах.

Отредактировано uni (2013-10-31 12:37:08)

0

4

По поводу Visual Studio 2008.
Я тоже пишу на ней, ну и на 2010-й - На C# и VBNET.
Только для Баскома никогда не пробовал.
Можно поподробнее - что с синтаксисом, проверкой и т.д.
Как привязать компилятор?
Куча вопросов, ну очень интересно.
Возможности самого редактора Студии просто шикарные, не сравнить с Баскомом.
Я думаю, тема вызовет очень большой интерес.
Могу предоставить место на сайте для полноценной статьи.
Рассмотрю любые варианты  :)

0

5

Ну, так скажем, не совсем всё хорошо, это на любителя. Студия тяжеловата, тем более, когда на неё всё установлено. Кроме того, там встроенная проверка синтаксиса бейсика, которую я пока не понял как отключить, хотя это не сильно мешает. Я бы рекомендовал для простых смертных использовать очень удобный и понятный Notepad++. Он просто прекрасно справляется с таковой задачей. Выглядит это так.

1. Написание программы на бейсике для avr в Notepad++. Здесь пример проекта tinycmd, о котором я выше писал. Сборка прямо из среды, справа показывается результат компиляции:

http://img.radiokot.ru/files/4453/thumbnail/6auiomay6.png

Плюсы: Нативный синтаксис VB очень хорошо подсвечивается. Есть возможность настроить переход на строку с ошибкой, но я пока это не реализовал. Сборка при помощи внешних командных файлов. Пространство редактора можно делить на окна. Смешанная проверка орфографии: eng + rus.
Минусы: Notepad++ оперирует понятием сессии. Это как-бы проект, но он пока не умеет сохранять относительные пути к файлам сессии (проекта). Из-за этого нужно быть очень аккуратным при переносе проекта в другую папку.
Вроде бы у него где-то была возможность показывать дерево файловой системы, но что-то я не вспомнил как это делается, приходится вручную открывать файлы.

2. Написание программы на бейсике для avr в MSVS2008 (там в общем одинаково во всех версиях, я думаю). Тот же проект (файлы находятся в репозитории):

http://img.radiokot.ru/files/4453/thumbnail/6auukzlk4.png  http://img.radiokot.ru/files/4453/thumbnail/6auzu1myq.png

Плюсы: Подсветка, но она для VB.Net, поэтому неадекватная немного. Сборка через "Makefile", т.е. теми же скриптами. Дерево проекта и вообще удобная навигация от профессиональной IDE. Если есть VAssistX, то будет быстрая навигация по коду (переход на метод).
Минусы: Переход по ошибки может быть и можно настроить, но только пропуская вывод компилятора через потоковый фильтр. Не реализовал пока. Есть ещё сомнение, что это возможно сделать, т.к. среда ещё без компиляции показывает ошибки в ErrorList'е, что есть медвежья услуга в данном случае.

Я хотел было стандартный VB6 использовать для этого дела, но он портит код автоматическими исправлениями. Если бы можно было это как-то отключить (маловероятно), то можно было бы и на старом VB6 поработать. Но это всё равно не вариант, т.к. компилировать-то там точно не получится по-нормальному.

П.С. Всё никак не могу дописать Тетрис на ATmega16, можно будет в качестве демонстрации сделать его же на бейсике:

http://img.radiokot.ru/files/4453/thumbnail/2gtbpfex4.png

Отредактировано uni (2013-10-31 14:31:58)

0

6

Очень интересно.
Попробовал Notepad++, но это не простой блокнот, нужно разбираться.
Попробовал в студии, забрал проект из репозитория, благо SVN  установлен.
Сборка через "Makefile" - ни разу в своей практике не использовал. Как в конкретном случае это нужно сделать?

0

7

Да, это такой средненький текстовой редактор с поддержкой плагинов. Чтобы понять как я заставил его работать нужным мне образом, можно прочитать вот эту статью: Notepad++ и avr gcc. Потом будет понятно как происходит процесс сборки. У меня его использование выглядит примерно так:

http://img.radiokot.ru/files/4453/thumbnail/6bdcza2hk.png

Существует более продвинутый текстовый редактор, который называется Sublime Text 2, но с ним разбираться немного сложнее, чем с Notepad++, он более профессиональный. В Notepad++ есть много интересных возможностей, а некоторые стандартные уже сейчас можно использовать с умом, к примеру, самая необходимая вещь - блочное комментирование. Делается в Notepad++ элементарно. Удерживая нажатой клавишу Alt, проводим мышкой по вертикали и получим увеличенный в несколько столбов мигающий курсор - это что-то вроде блочной вставки. Теперь нажимаем на ' и получаем закомментированный код. Так можно вписывать одинаковые символы одновременно в нескольких строках. Бывают вещи покруче такой вставки, но пока не будет об этом.

Makefile - это специальный тип проекта Студии. Если внимательно посмотреть на дерево возможных вариантов при создании проекта в Студии, то там можно найти такой. Его используют в тех случаях, когда для сборки проекта используются сторонние наборы утилит, как в нашем случае. Чтобы создать такой проект, нужно всего пару раз кликнуть мышкой и Студия создаст совершенно пустую заготовку. Самое главное в этой заготовке - вписать в свойства проекта внешние команды для build, clean и rebuild all - эти команды вынесены в меню Студии, а одна из них имеет быструю клавишу - F7.

Так вот, я создал простые командные файлы, которые запускают компилятор bascom и позволяют отслеживать результат компиляции в окне вывода Студии (и Notepad++). Эти файлы ещё не совсем доработаны, т.к. компилятор bascom очень нестандратный. Он выдаёт отчёты в виде отдельных файлов, вместо того чтобы выводить информацию в поток. Из-за этого приходится изворачиваться имеющимися стандартными средствами, чтобы сборка была целостной и привычной.

Самое главное, что по нажатию на пункт меню rebuild можно увидеть результат работы в окне вывода. Это тот минимум, с которым уже можно нормально работать. То же самое и для Notepad++. При сборке проекта обе эти среды делают одно и то же. Если честно, я больше склоняюсь к использованию Notepad++, а как скрипты доделаю, то перейду на Sublime Text 2.

Что касается процесса сборки в VS2008 по шагам:

1. Загружаем себе последнюю ревизию какого-нить проекта.
2. Открываем проект в VS2008.
3. Жмём F7 (build) или в меню выбираем Rebuild проекта. После этого должен запуститься командный файл и в окне вывода появится информация о процессе сборки.
4. Смотрим по результатам. Если процесс сборки не пошёл, то пытаемся запустить его из командной строки вручную: rebuild.cmd. По выводу смотрим что не так. Если процесс сборки завершился успешно, то в выводном отчёте будет строка: Errors 0, выдаваемая компилятором bascom.
5. Компилятор создаёт 2 сопутствующих файла - .err и .rpt. В первом будут находится ошибки компиляции, а во втором - отчёт. Я при помощи скриптов пытался считывать эти файлы и направлять их содержимое в стандартный поток вывода, но пока ещё этого не доделал как следует.

Тут нужно отметить одну важную вещь, касаемую параметров компилятора. Его параметры для каждого проекта нужно прописывать жёстко ручками в файлах build.cmd и rebuild.cmd, т.к. я пока не нашёл других способов как это дело автоматизировать. Ни в коем случае нельзя оставлять эти параметры по умолчанию или использовать слово auto, т.к. я не знаю с какой версии этот auto работает. В этом случае компилятор считывает параметры из главного файла, но в 2.0.7.5 похоже, что это пока не так.

"C:\Program Files\MCS Electronics\BASCOM-AVR\bascomp.exe" "%~dp0MainUnit.bas" SS=40 HW=16 FR=64 CHIP=18

Параметр CHIP можно найти в .DAT - файле для соответствующего мк. Эти параметры описаны в справке к Bascom AVR (можно найти на сайте в самом конце списка тем).

Ещё у меня было желание получить смешанный листинг бейсик + ассемблер из объектного файла, который получается на выходе. Это то, что мы видим в Proteus, когда загружаем туда этот объектный файл. Существуют специальные утилиты, которые могут такой листинг вывести, но я пока пока не нашёл такой именно для этого формата. Формирование выходного ассемблерного листинга является стандартной возможностью многих компиляторов, странно, что в bascom этого нет и приходится выкручиваться самостоятельно. Этот листинг нужен тем программистам, которые внимательно следят за тем. что получается на выходе, очень удобно было бы иметь на одной половине окна бейсик-код, а на другой - результат его компиляции в ассемблер. Так можно научиться писать более оптимальный код на бейсике.

+1

8

Прочитал статью и ваш ответ, многое стало на свои места, спасибо.
Получить на выходе ассемблерный файл - это вообще очень нужная вещь!
Я вот давно собираюсь написать програмку - схемопостроитель из псевдографики.
Чтобы в одном проекте можно было бы не только код, но и схему смотреть.
Иногда руками рисую, не очень удобно, но зато потом очень полезно.
Я эту тему помечу как "важную", а вообще нужно на сайт http://bascom.at.ua/ в виде статьи перенести, чтобы не затерялась.
Если вы не против.

0

9

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

Получить на выходе ассемблерный файл - это вообще очень нужная вещь!


Имеется ввиду, что Bascom будет генерировать удобочитаемый файл на ASM, а то, что-бы открыть .obj, надо постараться?

Это было-бы в высшей степени замечательно, а то сейчас приходится через AVR Studio смотреть, что там Bascom накомпилировал, что  не очень удобно!

Отредактировано sasha_1973 (2013-11-01 09:37:31)

0

10

Попробовал Notepad++  -  первое впечатление довольно приятное, посмотрю на удобство использования. 

Обязательно прочитайте статью, указанную выше - Notepad++ и avr gcc

0

11

Я не против. Мне нужен не просто ассемблерный файл, а именно перемежающийся с исходным кодом выходной листинг как в Proteus. Я нашёл описание формата объектного файла bascom. Оказывается автор использует формат AVR Object File. Так что достать смешанный листинг не такая большая проблема.

+1

12

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

Я не против. Мне нужен не просто ассемблерный файл, а именно перемежающийся с исходным кодом выходной листинг как в Proteus. Я нашёл описание формата объектного файла bascom. Оказывается автор использует формат AVR Object File. Так что достать смешанный листинг не такая большая проблема.


Это будет не просто супер, а вообще ....(ненормативная лексика)!!!

Отредактировано sasha_1973 (2013-11-01 09:43:09)

0

13

Я спрошу ещё дополнительно, но судя по ответам на их форуме, там есть только одно предложение - открывать файл в AVR Studio. Я поискал там поиском, ведь я не единственный, кто этого хочет.

0

14

Надо что-бы подключились "radan" и "Mrshilov", они общаются с Марком (разработчик Bascom)!

0

15

Я зарегистрирован на форуме и тоже с ним могу общаться ;)

0

16

Мне кажется, чем больше народу будет на него давить, тем быстрее будет результат!

А мы, СЛАВЯНЕ, давить умеем!

Отредактировано sasha_1973 (2013-11-01 09:50:46)

0

17

Сразу напишу по поводу используемого мною шрифта. Может возникнуть такой вопрос. Прочитайте вот эту статью: Microsoft Consolas - сделайте глазам приятно. Я использую везде шрифт Inconsolata-LGC.

П.С. По поводу определения стиля по расширению в Notepad++:

http://img.radiokot.ru/files/4453/6btq24z7k.png

Отредактировано uni (2013-11-01 11:06:31)

+1

18

Как то у нас здесь интереснее становится. :cool:
Я познакомился с исходным кодом Console - это же большой труд!
Что меня радует - наличие псевдографики, поясняющей регистры, режимы работы и т.д.
Уже как-то начал собирать подобные вещи, чтобы сформировать из них некую библиотеку для удобства пользования.
В принципе можно и распиновку чипов делать, и даже полные схемы, тем более, что во многих случаях они не такие уж и сложные.

0

19

На самом деле нужно просто к этому привыкнуть. Если никогда не пользовался, то непонятно зачем это нужно. Я потом сделаю отдельные примеры. Можно сделать иерархическое меню с подменюшками. Можно сделать диалоговые окна со строками ввода, где запрашивать информацию от пользователя. Все эти элементы я собирался оформить в виде отдельного модуля CUI - Console User Interface. Сейчас доступна только одна функция из этого будущего модуля - Console_DrawFrame(). Будут ещё и другие специальные для рисования строки клавиш, для вывода ListBox'а, Edit'а, MessageBox'а и так далее. Т.е. на основе модуля Console можно создать модуль консольного пользовательского интерфейса.

Когда всё это будет написано и протестировано на бейсике, то можно часть кода перевести на ассемблер и оформить в виде библиотеки, чтобы места занимало меньше. В последних ревизиях я старался как мог оптимизировать код. Теперь он спокойно вмещается в ATtiny2313 без двух прожорливых функций: Console_Beep() и Console_DrawFrame() (в заголовочном файле эти две функции специально сделаны отключаемыми при помощи директив условной компиляции). Для демонстрации работы самое то. Чтобы пояснить работу модуля, нужно показывать небольшие примеры, в которых не так трудно разобраться.

+2

20

Если к Console добавить отдельный терминал, вообще цены ему не будет!
Где то встречал терминал на базе 8-й меги и телевизора.
Благо сейчас есть много дешёвых китайских.
Получится весьма удобная вещь.

0

21

На самом деле, я начинал писать этот модуль, когда увидел такой терминал и исходник к нему на Си: MicroVGA. Это модуль в виде платы, который является ANSI-терминалом. В качестве демонстрации работы с ним идёт пример с набором функций (небольшая библиотека). Если присмотреться на мои константы, то можно заметить, что многие из них взяты оттуда. Но их исходник был очень убог и делал только элементарные вещи. Я его переделал полностью и русифицировал.

Можно купить этот терминал и использовать мой программный модуль для работы с ним. К сожалению, сделать своими руками такой сложно, т.к. "на коленке" цветной терминал соорудить очень трудно. Частоты контроллера для этого не хватает. У них похоже используется ПЛИС или что-то другое быстродействующее.

П.С. Весь смысл в цветном терминале. Да, существует Простой VGA видео адаптер, но у него и поддерживаемый размер небольшой и ч/б всё. Ниже на видео неточность - разрешение 20 строк по 38 символов, если память не изменяет.

Отредактировано uni (2013-11-01 12:13:13)

0

22

Не знаю, последний раз, когда я пытался открыть АВР Студией проект баскома, он долго думал, а потом выдал ошибку.

0

23

29 евро вроде и не дорого для такой вещи.
Вот только сколько за пересылку возьмут?

0

24

Там довольно несложный формат. Можно разобраться и сделать аналог утилиты objdump для bascom, раз сам автор этим не озаботился.

http://img.radiokot.ru/files/4453/thumbnail/6by6j47v5.png

Отредактировано uni (2013-11-01 13:09:50)

0

25

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

Там довольно несложный формат. Можно разобраться и сделать аналог утилиты objdump для bascom, раз сам автор этим не озаботился.

Осталось дело за самым главным, кто возьмется сделать?

0

26

Ну у нас народ если захочет, что угодно сделает.
Например: http://bascom.at.ua/publ/rasshifrovka_b … m/1-1-0-80
Главное захотеть :D

0

27

Товарищ просто был не в курсе, видимо, что это называется опкоды, от английского Operations Codes - коды операций. Вся его табличка приведена в Instruction Set Nomenclature.

0

28

Здесь же вопрос не в табличке, а в том, что зашифрованную библиотеку восстанавливаем в первоначальный вид, читаемый код, который можно редактировать.

0

29

А кто сказал, что она зашифрована? Это скорее можно назвать компиляцией, а не шифрованием. Точно то же самое делает ассемблер, когда переводит мнемоники в опкоды микроконтроллера. Обратная операция называется декомпиляцией. В данном конкретном случае нужно просто посмотреть стандартную документацию от Atmel на коды команд и восстановить ассемблерные мнемоники. Но это всё равно бестолку для больших библиотек. Никто не будет разбираться в километровых листингах ассемблерного кода.
Какой смысл редактировать ассемблерный листинг? И вид будет точно не первоначальный, т.к. первоначально библиотека скорее всего была написана на бейсике.

0

30

Файлы модуля обновлены. Изменение связано с видом некоторых функций - они заменены на макросы, что позволило сократить объём на 50 байт, сохраняя прежний функционал полностью.

0

Похожие темы


Вы здесь » Программирование ATMEL в BASCOM. » Исходники » Модуль Console