Модуль 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. Иными словами, используя команды терминала, можно создать свой собственный псевдографический интерфейс.
Сообщение отредактировал уни - Понедельник, 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.
|
|
| |
AlekS | Дата: Воскресенье, 27.10.2013, 21:58 | Сообщение # 6 |
Группа: Проверенные
Сообщений: 247
Статус: Offline
| уни, извини, но так и не понял, а зачем это все надо? Так же все можно вывести на терминалку? конкретней , на примере..)
|
|
| |
уни | Дата: Воскресенье, 27.10.2013, 22:14 | Сообщение # 7 |
Группа: Проверенные
Сообщений: 16
Статус: Offline
| Ну, например, наглядно показывать состояние пинов портов.
Можно добавить функционал, чтобы клавишами стрелками перемещаться по выводам и Пробелом, к примеру, изменять состояние конкретного вывода. Можно сделать оконный интерфейс для удобной настройки прошивки прямо в окне терминала. Можно сделать оконное меню с выбором из списка с иерархией. Можно в цвете показывать выполнение операций как в юниксе, где OK - зелёный, а Error - красный.
Смысл в том, что нам не нужно в ОЗУ держать копию экрана терминала, т.к. в мк это всё просто не влезет. Мы динамически формируем информацию в окне терминала, но более продвинутым способом, чем простой командный интерфейс. Можно сделать интерфейс, который будет изменять состояние своих частей с разной периодичностью. К примеру, есть 30 дискретных датчиков и нужно в терминале посмотреть их состояние. Рисуем 30 квадратиков с разными цветами и обновляем цвета с какой-то периодичностью.
|
|
| |
уни | Дата: Понедельник, 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 |
Группа: Проверенные
Сообщений: 247
Статус: 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 может располагаться где угодно далее.
Сообщение отредактировал уни - Четверг, 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
|
|
| |
Trikon | Дата: Суббота, 04.03.2017, 22:52 | Сообщение # 16 |
Группа: Проверенные
Сообщений: 6
Статус: Offline
| Цитата selevo ( ) хочу такой терминал на lcd nokia1202 Увы это из совсем другой оперы. Только терминал только хардкор.
|
|
| |
christian | Дата: Суббота, 22.04.2017, 20:21 | Сообщение # 17 |
Группа: Пользователи
Сообщений: 4
Статус: Offline
| Можно найти код С?
|
|
| |