[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: RD3AVJ 
Форум » форумы » Общие вопросы по Bascom-AVR » Модуль Console (Набор функций для работы с ANSI-терминалом.)
Модуль Console
униДата: Воскресенье, 27.10.2013, 01:28 | Сообщение # 1
Группа: Проверенные
Сообщений: 16

Статус: Offline
Пример работы с ANSI-терминалом ZOC/Pro 5.07 или PuTTY: https://mysvn.ru/avr/examples/ansibas/
Экспортировать к себе при помощи плагина к проводнику TortoiseSVN: http://tortoisesvn.net/downloads.html

Список доступных функций можно посмотреть тут: https://mysvn.ru/avr/examples/ansibas/Console_Header.bas
Функции будут постепенно дополняться.

Схема в Proteus приложена. Для отладки рекомендую использовать Proteus 7.7 SP2 + Virtual Serial Ports Driver XP 4.0 + ZOC/Pro 5.07. Всё искать на рутрекере.

ANSI-терминал поддерживает работу с цветами, курсором и экраном, вы можете рисовать в псевдографике CP866. Иными словами, используя команды терминала, можно создать свой собственный псевдографический интерфейс.

 

Прикрепления: 6399486.png(175Kb) · 8488463.png(178Kb) · 5875130.png(183Kb)




Сообщение отредактировал уни - Понедельник, 28.10.2013, 01:44
 
topДата: Воскресенье, 27.10.2013, 12:51 | Сообщение # 2
Группа: Друзья
Сообщений: 146

Статус: Offline
Кажется мне что это дико интересная вешь! Но я ничегоне понял. Как, что и зачем?

 
униДата: Воскресенье, 27.10.2013, 14:01 | Сообщение # 3
Группа: Проверенные
Сообщений: 16

Статус: Offline
Обновил исходники:
- добавлена работа с RTC DS1307 через TWI;
- небольшие правки кода.

Этот модуль может пригодиться в нескольких случаях:

1) Обучение программированию на bascom avr. Вы можете при помощи Proteus и ANSI-терминала делать наглядные иллюстрации работы кода (см. пример выше с часиками DS1307).

2) Наглядная отладка с выводом в терминал. У меня виртуальный проект работает на скорости USART 57600. Этого достаточно, чтобы не было каких-то сильных миганий при выводе псевдографики. Если же это делать в железе, то будет ещё быстрее.

Здесь нужно подключать воображение. Этот код переписан из другого моего проекта на C++ для AVR, где я при помощи аналогичного модуля написал простой панельный файловый менеджер на ATmega16, который работает в флешкой. На бейсике это тоже возможно, но код будет занимать гораздо больше места.

Нужно только понимать, что модуль предназначен для работы с ANSI-терминалами, такими как ZOC/Pro или PuTTY, которые умеют работать и понимают ESC-последовательности. Это такие команды для терминала, позволяющие управлять текстовым изображением на стороне терминала.

Можно выводить текст в любое место окна, любым цветом и фоном (даже мигающим). Можно рисовать рамки, можно двигать курсор как в абсолютных так и в относительных координатах, запоминать и восстанавливать его состояние. Можно очищать строку и экран одной командой с разными параметрами.

Код пока не оптимизирован и занимает около 7 КБайт флеша. Я не большой специалист по бейсику, написал пока, чтобы вообще работало.


 
topДата: Воскресенье, 27.10.2013, 14:47 | Сообщение # 4
Группа: Друзья
Сообщений: 146

Статус: Offline
Цитата уни ()
На бейсике это тоже возможно, но код будет занимать гораздо больше места.
Мммм, очень заманчиво. Сам сталкивался с написанием интерефейса через простой UART, действительно жрет очень много флэша.


 
униДата: Воскресенье, 27.10.2013, 20:25 | Сообщение # 5
Группа: Проверенные
Сообщений: 16

Статус: Offline
Изменил структуру проекта. Добавил код для просмотра состояния ОЗУ. На картинке можно видеть, что дамп ОЗУ в терминале совпадает с тем же окошком в Proteus. Таким же макаром можно дампить EEPROM и FLASH.

Прикрепления: 6996232.png(176Kb)


 
AlekSДата: Воскресенье, 27.10.2013, 21:58 | Сообщение # 6
Группа: Проверенные
Сообщений: 248

Статус: Offline
уни,  извини, но так и не понял, а зачем это все надо? Так же все можно вывести на терминалку? конкретней , на примере..) wacko

 
униДата: Воскресенье, 27.10.2013, 22:14 | Сообщение # 7
Группа: Проверенные
Сообщений: 16

Статус: Offline
Ну, например, наглядно показывать состояние пинов портов.



Можно добавить функционал, чтобы клавишами стрелками перемещаться по выводам и Пробелом, к примеру, изменять состояние конкретного вывода. Можно сделать оконный интерфейс для удобной настройки прошивки прямо в окне терминала. Можно сделать оконное меню с выбором из списка с иерархией. Можно в цвете показывать выполнение операций как в юниксе, где OK - зелёный, а Error - красный.

Смысл в том, что нам не нужно в ОЗУ держать копию экрана терминала, т.к. в мк это всё просто не влезет. Мы динамически формируем информацию в окне терминала, но более продвинутым способом, чем простой командный интерфейс. Можно сделать интерфейс, который будет изменять состояние своих частей с разной периодичностью. К примеру, есть 30 дискретных датчиков и нужно в терминале посмотреть их состояние. Рисуем 30 квадратиков с разными цветами и обновляем цвета с какой-то периодичностью.
Прикрепления: 4733661.png(179Kb)


 
униДата: Понедельник, 28.10.2013, 02:30 | Сообщение # 8
Группа: Проверенные
Сообщений: 16

Статус: Offline
Обновил исходники. Код модуля Console существенно оптимизирован, размер уменьшился на пару килобайт. Теперь можно что-то ваять и на ATmega16.

 
униДата: Понедельник, 28.10.2013, 12:43 | Сообщение # 9
Группа: Проверенные
Сообщений: 16

Статус: Offline
По поводу размера модуля Console. Без некоторых жирных и не очень нужных функций у меня получилось вместить его в ATtiny2313 под завязку: https://mysvn.ru/avr/examples/tinycmd/bascom/

Проект компилируется и в Proteus показывает адекватное поведение, но выходной поток символов где-то прореживается. Пока не понял где, грешу на начальные настройки проекта.

В общем и целом можно сказать, что модуль Console требует от 2 Kбайт флеша. Те же функции на C++ позволили мне уместить их в tiny2313 полностью, даже ещё на 30 команд места осталось.


 
AlekSДата: Понедельник, 28.10.2013, 17:13 | Сообщение # 10
Группа: Проверенные
Сообщений: 248

Статус: Offline
уни, спасибо, все теперь стало ясно.)

 
униДата: Среда, 30.10.2013, 17:37 | Сообщение # 11
Группа: Проверенные
Сообщений: 16

Статус: Offline
Изменил структуру проекта и перешёл на Visual Studio 2008. Хоть подсветка и не совсем в тему, но всё остальное полне помогает вести разработку на Bascom AVR более удобно, чем в стандартной среде. Пришлось немного поколдовать и написать несколько скриптов, чтобы можно было компилировать проект прямо из Студии.

Все данные теперь буду сохранять прямо внутри функций, имеются в виду те, которые заданы при помощи DATA. Очень неудобно при делении проекта на модули располагать данные после ключевого слова END. Это нарушает локализованность объектов. Я обошёл эту проблему для байтовых массивов таким способом:

Код
' Вывод символа из ОЗУ.
Sub Console_PutChar( ByVal AChar As Byte, ByVal ACodePage As Byte )

      select case ACodePage

          case cp866:

          case cp1251:

              if AChar.7 = 1 then

                  AChar = AChar AND &H7F
                  AChar = Lookup( AChar, CP1251_TO_CP866 )

              end if

      end select

      ' Выводим символ, который соответствует кодовой таблице CP866.
      PrintBin AChar

      Exit Sub

CP1251_TO_CP866:

$ASM
      .DB &H20,&H20,&H2C,&H20,&H20,&H20,&H20,&H20,&H20,&H20,&H20,&H3C,&H20,&H20,&H20,&H20
      .DB &H20,&H27,&H27,&H22,&H22,&HF9,&H2D,&H2D,&H20,&H20,&H20,&H3E,&H20,&H20,&H20,&H20
      .DB &HFF,&H20,&H20,&H6A,&H20,&H20,&H7C,&H20,&HF0,&H20,&H20,&H22,&H20,&H20,&H20,&H20
      .DB &HF8,&H20,&H49,&H69,&H20,&H20,&H20,&HFA,&HF1,&H23,&H20,&H22,&H6A,&H53,&H73,&H20
      .DB &H80,&H81,&H82,&H83,&H84,&H85,&H86,&H87,&H88,&H89,&H8A,&H8B,&H8C,&H8D,&H8E,&H8F
      .DB &H90,&H91,&H92,&H93,&H94,&H95,&H96,&H97,&H98,&H99,&H9A,&H9B,&H9C,&H9D,&H9E,&H9F
      .DB &HA0,&HA1,&HA2,&HA3,&HA4,&HA5,&HA6,&HA7,&HA8,&HA9,&HAA,&HAB,&HAC,&HAD,&HAE,&HAF
      .DB &HE0,&HE1,&HE2,&HE3,&HE4,&HE5,&HE6,&HE7,&HE8,&HE9,&HEA,&HEB,&HEC,&HED,&HEE,&HEF
$END ASM

End Sub


При помощи ассемблерной вставки мы можем располагать данные прямо внутри тела функции, не забывая при этом перепрыгивать их (Exit Sub). К сожалению, это не работает со строками. Директива .DB их не понимает.

Теперь в основном файле модули подключаются обычным для других систем способом - просто их перечисляем. Тут может возникнуть проблема, если точка входа окажется в одном из модулей. Чтобы это обойти, указываем точку входа самостоятельно таким образом:
Код
' -=[ Переменные в ОЗУ ]=-

Dim Key As Byte
Dim Caption As String * 46

' Точка входа в основную программу.
Declare Sub Main : Main : End

' /***********************
' *  Д Е К Л А Р А Ц И Я
' *  ~~~~~~~~~~~~~~~~~~~
' ***********************/

Declare Sub ShowPinStates
Declare Sub PutByte( ByVal Addr As Word, ByVal AValue As Byte )
Declare Function GetByte( ByVal Addr As Word ) As Byte

' Подключаем заголовочные файлы модулей.
$include "Config_Header.bas"
$include "Version_Header.bas"
$include "Delays_Header.bas"
$include "RTC_Header.bas"
$include "Console_Header.bas"
$include "CommandShell_Header.bas"
$include "MemoryViewer_Header.bas"
$include "MCU_Header.bas"

Сама же Main может располагаться где угодно далее.

Прикрепления: 9574720.png(233Kb)




Сообщение отредактировал уни - Четверг, 31.10.2013, 03:25
 
униДата: Четверг, 31.10.2013, 21:48 | Сообщение # 12
Группа: Проверенные
Сообщений: 16

Статус: Offline
Обновил и доработал программки, теперь они находятся немного по другому адресу: https://mysvn.ru/avr/bascom/
Это svn репозиторий, поэтому скачивать указанным выше клиентом.


 
123ksnДата: Понедельник, 25.11.2013, 03:29 | Сообщение # 13
Группа: Пользователи
Сообщений: 1

Статус: Offline
Всем доброго времени суток. Уважаемый уни, есть такое выражение: "Умела баба приготовить, да не умела подать". Вы используете много умных и наверняка правильных слов, но толку от них ноль, если многие не понимают суть Вашей разработки. Вы пишите:
Цитата уни ()
ANSI-терминал поддерживает работу с цветами, курсором и экраном, вы можете рисовать в псевдографике CP866. Иными словами, используя команды терминала, можно создать свой собственный псевдографический интерфейс.
И что? Это что б быстрее бродить по интернету? Опишите задачу "на пальцах", покажите не действо, а конечную цель, в которой применение Вашей разработки будет интересно.
Посмотрел на Ваши ссылки. Объясните мне, непутевому, какую мне пользу принесет указанный Вами плагин? Ах, я смогу в каком-то удобном для Вас виде посмотреть Ваши материалы. Извините, не убедительно. На вкус и цвет товарищей нет. Опишите по-русски нафиг всё о чем Вы пишите и предлагаете надо? Может цены нет Вашим материалам, а я глупец не понимаю. И вижу, что другие тоже. Прошу без обид. Просто очень хочется понимать человека, который говорит по-русски. А то слова по отдельности понятны, а вместе смысла не видно.


 
униДата: Воскресенье, 22.12.2013, 15:31 | Сообщение # 14
Группа: Проверенные
Сообщений: 16

Статус: Offline
Когда хочется кушать, то не важно что как подано. Если вы что-то не понимаете, то не пришло время ещё, не оголодали. Более полные инструкции по использованию компилятора bascomp можно найти тут:  http://bascomavr.3bb.ru/viewtopic.php?id=1041 и http://bascomavr.3bb.ru/viewtopic.php?id=1050
Там народ тоже долго не понимал что к чему. Я попытался объяснить более доходчиво.

Всё это и многое другое позволяет работать на бейсике более профессионально, по аналогии с другими средами разработки. Плохо, когда есть всего один инструмент и нет выбора.




Сообщение отредактировал уни - Воскресенье, 22.12.2013, 15:33
 
selevoДата: Вторник, 21.02.2017, 16:41 | Сообщение # 15
Группа: Пользователи
Сообщений: 3

Статус: Offline
классная штука
хочу  такой терминал на  lcd nokia1202 smile


 
TrikonДата: Суббота, 04.03.2017, 22:52 | Сообщение # 16
Группа: Проверенные
Сообщений: 6

Статус: Offline
Цитата selevo ()
хочу  такой терминал на  lcd nokia1202
Увы это из совсем другой оперы. Только терминал только хардкор.


 
christianДата: Суббота, 22.04.2017, 20:21 | Сообщение # 17
Группа: Пользователи
Сообщений: 4

Статус: Offline
Можно найти код С?

 
Форум » форумы » Общие вопросы по Bascom-AVR » Модуль Console (Набор функций для работы с ANSI-терминалом.)
Страница 1 из 11
Поиск: