Отладка на ардуине достала
Отладка, если это можно назвать отладкой, Васика на ардуине достала. Решил добавить к АрдуиноВасику нормальный консольный PC хост со всеми отладочными плюшками.
Вывод на консоль работает, ввода пока нет:
Код на Гитхабе в бранче pc_host
Forums:
А можно подробнее про отладку и плюшки
Permalink
Я не понял, что именно вы отлаживаете. Сишную реализацию Бейсика ? В какой IDE вы это делали ? Как этот PC хост поможет вам ?
Отладка
Permalink
Отлаживаю тот же самый Ардуино-бейсик, который в плате используется. А конкретно - пытаюсь прикрутить поддержку менеджера виртуальной памяти SPI RAM, чтобы Васику было доступно не 1024 байта, а 64 КБ или выше. Ковырять на самой ардуине сложно, поэтому ПЦ хост сильно облегчает задачу.
Пользуюсь опенсорсным Code Blocks.
А программа Proteus
Permalink
c её возможностями не используется?
Протеус, вроде, коммерческий?
Permalink
В данном случае хочу только free и опенсорс использовать.
Да и зачем - логику работы, наверное, я смогу под PC отладить
CodeBlocks
Permalink
От CodeBlocks я избавился после надоевшей постоянной борьбы с косяками в пользу QtCreator, где все более-менее живет. Но это было под линуксом, где за пределами Vim выбор невелик. Под винду я бы не задумываясь поставил бесплатную полнофункциональную VS community.
VS community
Permalink
VS community у меня стоит на домашнем компе, отличная система. Но на виндовой планшетке места мало, а это у меня "основной" комп за столом в гостиной, поэтому CodeBlocks там прижился нормально. Кстати, его последняя версия (17.х) подвылизана хорошо.
Я так понимаю, это реализация Бейсика того же на PC
Permalink
или это эмулятор AVR какой то ? И на нём SPI корректно эмулируется с памятью ?
Бейсик
Permalink
Да, это тот же самый Бейсик, что у меня на Ардуино-шилде вертится, просто вместо Ардуины работает в писишную консоль.
На шилде стоит 128 КБ SPI память. И мне захотелось прикрутить виртуальную память (
https://github.com/rhelmus/virtmem)
Вот мои эксперименты на ардуине, выделено 128000 байт для виртуального буфера памяти:
Результат работы:
PC хост заработал
Permalink
PC хост заработал (не полностью - DEL, ESC не работают). Билд пока только для Windows.

Немного забавного - MSP430 VM
Permalink
https://geektimes.ru/post/263614/
Выдержка "О чем идет речь
Данный проект является виртуальной машиной которое эмулирует ядро процессора MSP430 с небольшими изменениями в прерываниях. Виртуальные машины позволяют разработчику отделить бизнес логику устройства от платформы устройства. Строя таким образом платоформонезависимые устройства.
Достоинства
Отделение алгоритма работы устройства от платформы устройства.
Отсутствие разных загрузчиков, программа виртуальной машины может находится на любом носителе.
Возможность строить переферию на свой вкус и цвет.
Простое создание многозадачных систем
Недостатки
Низкая скорость работы. Так как на одну инструкцию виртуальной машини приходится с два десятка инструкция хост машины."
P.S. Занимает порядка 5Кб :)
Когда то на русской страничке википедии по MSP430 набрал систему команд данной архитектуры, и на эту страничку сослался автор приведённой разработки :)
Не совсем понятно, зачем это нужно :)
Permalink
Не совсем понятно, зачем это нужно :)
Временное решение
Permalink
Немного, если сказать мягко, надоела резьба по кости с прикручиванием виртуальной SPI SRAM памяти для Васика в качестве программной памяти.
Остановился на временном решении - добавил в Васик два новых оператора:
Работа в PC хосте:

Строки в SRAM
Permalink
Срам-память. :-) Можно ещё там хранить строки. Строки занимают больше всего места. Мне пришлось пронумеровать сообщения, лишив их текста, чтобы Каллисто влезла в 100 страниц МК-161. Минимальная реализация:
В идеале текст строковых констант из исходного кода компилируется тоже в SRAM. В основной памяти хранится лишь ссылка на строку во внешней памяти. Также можно вообще вынести все строки и строковые массивы во внешнюю память, сделав это прозрачным для программиста.
SRAM
Permalink
Операторы для хранения строк в SPI SRAM памяти это хорошая идея.
Хотя лучшим вариантом, наверное, было бы просто заменить статический буфер памяти Бэйсика на виртуальный буфер памяти. Но у меня не вышло - не все методы доступа к памяти были перегружены для работы с виртуальным буфером. Например strcpy. А там половина Бейсика основана на копировании строк и возврате строковых указателей.
Пока я остановлюсь на том, что есть.
Имхо это пораженчество!
Permalink
BASIC - это язык высокого уровня :-) Не уподобляйтесь Форту, где принято делать отдельные механизмы на каждый чих, например надо плавучие числа, зафигачим отдельный стек и операции с ним, и называть всё это разными именами. Чтобы остудить горячие головы, и не было холивара, добавлю, что в том же Common Lisp ситуация почти такая же !
В идеале память из SRAM должна выделяться автоматически. Я не понял в чём возникли проблемы с "виртуальной памятью" в SRAM ?
Это привал для отдыха
Permalink
Это привал для отдыха, а не отступление :)
Virtual memory library for Arduino, с которой я ковырялся, не для всех операторов и функций работы с памятью имеет перезагрузку.
А Ардуино-Бэйсик полон операций с указателями и строками:
В общем, я буду признателен, если кто-то сможет придумать, как можно прикрутить virtmem ко всему зоопарку указателей в Arduino-Basic.
Только одна идея
Permalink
Написать Бейсик заново, расположив всё это болото со строками в SRAM. Это простой язык, где от прошлых версий важны лишь наборы операторов, функций и операций.
Бейсик
Permalink
Не, меня не хватит переписать Бейсик заново. Пока останусь на том, что есть, надо начинать разрабатывать финальную печатную плату.
Расширение ОЗУ микроконтроллера?
Permalink
Получается, исходный код использует операции с массивами данных в оперативной памяти микроконтроллера. А sram-память используется как устройство, с которым проводятся операции чтения-записи, но напрямую с ним работать нельзя. А драйвер виртуальной памяти не может свопить пользовательские данные в sram-память? Даже если переписать процедуры обмена с ОЗУ на sram-память, то быстродействие аппарата существенно упадёт.
Сайт
virtmem
Permalink
Да, SPI SRAM не расширяет ОЗУ микроконтроллера. Virtmem библиотека перезагружает много операторов C++, но не всё. Переделка Васика на SPI SRAM сложна, и да, существенно замедлит скорость работы.
В общем, количество возни с заменой всей программной памяти Васика на SPI SRAM и количество минусов перевешивают количество плюсов.
Поддерживаю
Permalink
А может вообще не Бейсик родить, а что то похожее, но получше и фичастее. Например работу со структурами соорудить. Всякие форматеры и ридеры для полезных типов данных вроде матриц и структур. Для Бейсика это небольшое дополнение получится. Структуры правда могут потребовать автоматического управления памятью, но простейшие механизмы вроде всем доступны и крайне просты в реализации (аля счётчики ссылок и т.п.).
atmega328p слабовата для такого
Permalink
atmega328p слабовата для этого. Помимо Бэйсика и Форта, мало что можно сюда втиснуть. Разве что Bitlash.
Отвратительно, если подумать
Permalink
Чёртова низкоуровневая арифметика указателей, такое можно наворотить! Неплохо бы большую часть закатать в какие то объекты(структуры) типа библиотеки выделения памяти, чтобы вручную не напутать где то. Да ещё бы и проверить, чтобы за границы допустимых адресов не выходило.
Может быть и правда проще написать свой Бейсик, не придётся вылавливать блох то там, то тут ?