Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

ESP8266Forth

Тема в разделе "ESP8266Forth", создана пользователем Victor, 27 окт 2016.

  1. Victor

    Victor Administrator Команда форума

    Сообщения:
    2.212
    Симпатии:
    388
  2. tretyakov_sa

    tretyakov_sa Moderator Команда форума

    Сообщения:
    987
    Симпатии:
    151
    Есть кто на форуме любители FORTH?
     
  3. Юрий Ботов

    Юрий Ботов Moderator Команда форума

    Сообщения:
    1.054
    Симпатии:
    177
    Есть любитель всяческой экзотики - я. Попробую.
     
  4. tretyakov_sa

    tretyakov_sa Moderator Команда форума

    Сообщения:
    987
    Симпатии:
    151
    Здорово!
    Сразу нашел ошибку в описании слова spaces
    В словаре код должен быть таким:

    Код (Text):
    1. const PROGMEM char spaces_str[] = "spaces";
    2. // ( n -- )
    3. // if n is greater than zero, display n space
    4. static void _spaces(void) {
    5.   char n = (char) pop();
    6.   while (n > 0) {
    7.     print_P(sp_str);
    8.     n--;
    9.   }
    10. }
     
  5. Юрий Ботов

    Юрий Ботов Moderator Команда форума

    Сообщения:
    1.054
    Симпатии:
    177
    Первые впечатления неоднозначные. Во первых я долго маялся с дисплейчиком, но тут проблема не форта а дисплейчика. Ну кто мог подумать что при наличии у него входа MISO на самом деле надо подключить соответствующий выход проца к входу SDA? Ну да бог с ними... заработало. Вторая особенность в том что указано подключить подсветку дисплея к одной из ног проца, чтобы ее включать/выключать. Но проц явно не осиливает питания подсветки. По уму тут надо чтото промежуточное - твердотельное реле или хотя-бы эмитерный повторитель.
    Что криво в самом форте... Он занимает подозрительно много места, более 60 к, оставляет под расширение только около 20 к. Причем его словарь автор как бы прячет во флэш (зачем? если его оттуда все равно загрузят - это явный аттавизм ардуиновской версии). Работа с файлами ограничивается: прочитать содержимое корня флэшки и загрузить файл из флэшки. Правда есть полезная опция "autorun". Для выполнения при старте некого файла. Этого крайне мало. Хоть бы запись текущего словаря сделали. Ну или буфер в файл. Хоть какое то средство интерактивной разработки.
    Так что поиграться - супер. Но в дело особо не пустишь. Особенно жалко выглядело подключение через wifi (там есть типа telnet (точнее raw) на 21 порту) - команда words (20 строк) выполняется снаружи почти минуту... Это форт? У меня голимый интерпретатор быстрее работает на telnet.

    Впрочем есть идеи как это немного причесать. Будет время - развлекусь.
     
    windalser нравится это.
  6. Юрий Ботов

    Юрий Ботов Moderator Команда форума

    Сообщения:
    1.054
    Симпатии:
    177
  7. tretyakov_sa

    tretyakov_sa Moderator Команда форума

    Сообщения:
    987
    Симпатии:
    151
    Посмотрел на реализации Forth на ESP8266 все это меня не порадовало.
    Так, как давно интересуюсь этим языком, без конкретной задачи изучать его не интересно, решил написать свой Форт для ESP.
    Возник вопрос, что если я, сделаю возможность использовать в определении нового слова, слово которое ещё не было определено? Обычно в любых Forth системах, это приводит к ошибки, так как компилятор не может создать правильный байт код. В моей реализации такой финт вполне возможен. С моей точки зрения это будет удобно, так как можно будет писать программу "сверху вниз".
    Кто знает Форт, что вы думаете по этому поводу?
     
  8. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    2.211
    Симпатии:
    229
    @tretyakov_sa вроде это явно запрещено стандартом. Во всяком случае ошибки будет отловить точно сложнее. А иногда и невозможно.
     
  9. tretyakov_sa

    tretyakov_sa Moderator Команда форума

    Сообщения:
    987
    Симпатии:
    151
    Так в чем сложность. Если попытаться выполнить слово которого нет в словаре, то будет сообщение "определите слово".
     
  10. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    2.211
    Симпатии:
    229
    @tretyakov_sa ну, поскольку это все равно игрушка, делайте как считаете нужным. Сомневаюсь, что кто то будет пользоваться для реальной работы. Теперь это экзотика.
     
  11. Юрий Ботов

    Юрий Ботов Moderator Команда форума

    Сообщения:
    1.054
    Симпатии:
    177
    tretyakov_sa, помнится мне, в свое время в МГУ народ разрабатывал хитрый форт подобный язык DSSP одним из козырей которого как раз было "программирование сверху вниз" то есть возможность постепенной "детализации" слов. Это делалось добавлением "таблицы неопределенных ссылок", если не ошибаюсь это можно в подробностях почитать тут: trinarium/DSSP-C
     
  12. Diskless

    Diskless Новичок

    Сообщения:
    11
    Симпатии:
    2
    Какая классная идея - использовать forth. Именно для таких модулей он будет нужен. В свое время в ЛГУ сделали forth для 580-го процессора. В 64Кб можно было сотворить даже тетрис. Причем их реализация была с сохранением ядра на дисках ЕС ЭВМ, поскольку работало все на ЕС 7970. Надо поискать - где то был код исходный. Если найду - выложу. Там даже обработка прерываний была.
     
  13. nikolz

    nikolz Гуру

    Сообщения:
    5.059
    Симпатии:
    462
    в свое время Попов сделал детекторный приемник.
     
  14. tretyakov_sa

    tretyakov_sa Moderator Команда форума

    Сообщения:
    987
    Симпатии:
    151
    Я думаю, что forth чрезвычайно хорошо подходит для реализации IoT устройств. Только подходить к его построению и тем более интерфейсу взаимодействия со старыми представлениями абсолютно не правильно.
    Я попытался сделать первые шаги в этом направлении, но появились другие задачи и я пока отложил свои попытки.
    Моя идея заключается в следующем. Хранить словарь прямо в файле файловой системы.
    Попробовать, обойтись без байт кода. Так как словарное слово уже само по себе длинный байт код. Такой подход будет жрать больше памяти, но позволит обойтись без компиляции. На модуле сразу можно иметь Web терминал, без старинных попыток работать с помощью Serial и UDP терминалов. Куча места на файловой системе позволит сразу хранить все необходимые файлы программ. Включил модуль, открыл Web интерфейс и сразу пиши, что хочешь и сохраняй все на модуле. Esp гораздо мощнее, того компьютера на котором Чарльз Мур его придумал.
     
  15. nikolz

    nikolz Гуру

    Сообщения:
    5.059
    Симпатии:
    462
    Прежде чем изобретать известное, можно для начала изучить реализацию виртуальной машины LUA и применение хэш-функций.
    возможно узнаете что-то новое.
     
  16. tretyakov_sa

    tretyakov_sa Moderator Команда форума

    Сообщения:
    987
    Симпатии:
    151
    Дайте пример нормальной реализации Forth для ESP.
    Вот когда изучают известное, а потом делают новое - получают тоже самое в другом виде. Вспоминаю одного деятеля у нас в КБ. Он говорил: Здесь нет ничего нового, и вообще за границей так не делают...
    Когда Вы уже научитесь отвечать по делу? Не знаю как для других, но для меня ваши реплики обычно бесполезны. Убедительная просьба, отвечайте по делу, если есть что сказать.
     
  17. Diskless

    Diskless Новичок

    Сообщения:
    11
    Симпатии:
    2
    Реализация того, что реализовали для ESP32 на 580-ом занимала 8кб. В ней был интерейс взаимодествия с mainframe. Загружать свой код можно было через load. Не надо выносить словарь в файл, поскольку места достаточно. И еще. Forth перестали использовать по двум причинам. 1 - появление dos. 2 - появилось достаточно памяти. Теперь можно чайник кипятить на компьютере.
    Я уже говорил, что прерывания - главный камень преткновения в forth. Эту проблему я решил на asm. В контроллере это тоже можно реализовать через отдельную изолированную область памяти и набором указателей. Есть еще пара ошибок во всех реализациях forth - освобождение памяти при удалении слов из словаря. Выполнение библиотечных функций как раз можно сделать через занрузку из файла с параметрами выполнения. Можно сделать через выделение пямяти под выполняемый код. Набрать кусочками и сделать ссылки в словаре.
    Интерефейс - telnet через tcp и Serial. Web морда - сомнительное достоинство контроллера, поскольку нет regex. Вся мощь в песок. А классический regex убьет контроллер.
    P.S. Достоинство forth в том, что компилятор и интерпретатор всегда есть прямо в контроллере. После того, как написал - нашел ссылки.
    Язык программирования Форт
    Forth – Конкатенативный язык программирования / Хабр
    Короче - forth для тех, кто понимает.
     
  18. Diskless

    Diskless Новичок

    Сообщения:
    11
    Симпатии:
    2
    Вы это напишите в Adobe с их PostScript - там вас оценят.
     
  19. nikolz

    nikolz Гуру

    Сообщения:
    5.059
    Симпатии:
    462
    Вы ничего не поняли из того что я Вам написал.
    более того Вы как это обычно бывает на этом форуме действуете по принципу "Я этого не изучал, но это плохо"
    Но я не обижаюсь на подобные высказывания
    Объясняю специально для Вас
    Forth это по-существу стековая машина
    Lua это тоже стековая машина
    Но луа создан позже Forth и его создатели знали и Forth когда решали что и как
    Почитайте хотя бы это
    Эволюция языка расширений: история Lua
    что же касается словарей которые вы собираетесь писать то я Вам предложил сначала изучить хэш функции
    так как именно они позволяют быстро и компактно работать со словарями.
     
  20. nikolz

    nikolz Гуру

    Сообщения:
    5.059
    Симпатии:
    462

Поделиться этой страницей