Форт подобен Дао.

Это Путь, и осознается он, когда ему следуешь.

Вступление.

Микроконтроллер характеризуется ограниченными ресурсами, что означает, что основными языками программирования являются Ассемблер, С.

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


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

Язык программирования Fort является воплощением идеи перемещения кода между различными микроконтроллерами. Для каждой платформы достаточно реализовать ядро ??предыдущего языка, вы можете объединить работу с портами и языком СИ и надежно подключить его к аппаратному обеспечению. Аналогичный подход был использован при внедрении системы форта.

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

...

На стене есть все, включая динамик.

...

Детальный просмотр.

Совет двусторонний. Форм-фактор был впечатляющим. Принципиальные схемы и проводку можно скачать по этой ссылке .

...

Детальный просмотр.

...

Детальный просмотр.

...

Детальный просмотр.

  • Ввод с клавиатуры работает через PCF8574 (8-битный расширитель ввода / вывода для шины I2C). Прерывания с PCF8574 установлены в МК. Принципиальная схема и проводник должны быть отремонтированы. Добавить гравитационный регистр к + 5V

  • Аппаратные работы - светодиоды, порты ввода / вывода.

  • Работает с компьютером через RS232.

  • ЖК-дисплей, динамик, частотомер, подключение к SD-карте - еще не тестировалось.

От таких программ следует отказаться - все в одном. Не для всех устройств требуется ЖК-дисплей. Боеприпасы Снимем, мне снова понадобится, что мне делать?

Строительные системы.

Ардуинская экосистема. Есть штатная магнитола, подключаем к ней нужный датчик, пишем программу, включаем - все работает. Потребовался другой сенсор, добавьте приложение, переустановите, включите - все работает. В результате, сборка конечного устройства, такого как термостат, приводит к тому, что устройство собирается из библиотек (эскизов) - дисплеев, клавиатур и датчиков температуры. Все это смущает аппаратное и программное обеспечение, вылетает, и в результате устройство не работает. Существует сильное ощущение, что устройство должно быть собрано на одной плате. (Сделать МК Атм Форт)


Все собрано на одной доске. Большое количество портов микроконтроллера требуется для обеспечения работы ЖК 1602. Сверху вниз, схема PCF8574P kengaytirgichini (I2C I / O Expander), часть его отображения портов. Мы сняли контакты со схемы, потратили одну или две микросхемы PCF8574P, и возникла необходимость заменить библиотеки. В результате он обошел себя.


Так и должно быть. Все конечные устройства, включая самый простой датчик, должны быть изначально рассчитаны на производительность сети. Устройства управления имеют очень хорошую поддержку на аппаратном уровне I2C, в минимальном коде программного обеспечения SPI, в максимальной скорости и эффективности обмена данными.

Как должен выглядеть термостат в сетевой парадигме? Клавиатура представляет собой самогенерируемое сетевое (I2C / SPI) устройство в этом микроконтроллере. Каждый датчик температуры является самогенерируемым устройством (I2C / SPI) в микроконтроллере. Дисплей представляет собой самогенерируемое сетевое (I2C / SPI) устройство в микроконтроллере. Все модули подключены к одной шине данных и связаны на уровне основного блока и сети.

Разработчик получает неограниченные ресурсы для обновления любого сетевого, программного и аппаратного модуля без ущерба для производительности всей системы.

UART - MAX232 - COM / USB - ПК

Программа обмена на микроконтроллер выполняется в ассемблере. Вы можете скачать проект по этой ссылке .

Физически компьютер принадлежит Prolific Technology Inc. подключен к микроконтроллерной схеме через com-usb конвертер . Уровень Bod 9600 (8 бит, четность не установлена, стоп-бит - 1, управление потоком отключено).

...

Программа подключения к терминалу от Windows может быть любой - шумной, реальной. Но следующий алгоритм адаптирован к программе Terminal . Удобство этой программы в том, что есть редактируемая линия доступа. При нажатии клавиши Enter строка передается в микроконтроллер для дальнейшей обработки.

Компьютер начинает передачу данных. При чтении байтов в регистр RCREG через UART MK генерирует приоритетные помехи. Бесшумный процессор читает этот байт и помещает его в буфер. Затем он начинает возвращать считанный байт в компьютер посредством помех с низким приоритетом. В результате вновь введенный терминал или значок отображается на экране терминала.

Анализ входного потока форта .

Четвертое слово - любая последовательность символов, разделенных пробелами. Чтобы не усложнять анализ, в текущей реализации любая последовательность управляющих символов приравнивается к границам. Например - возврат автомобиля (CR), новая линия (LF) и другие. В таблице ASCII почти все они находятся под символом пробела.

Байт RS232 отправляется во входной буфер (UABuffer). После получения токена управления CR (0x0D) ввод данных останавливается, управление передается в подпрограмму (fwNext) выбора слова форта во входном буфере. Если слово найдено, ищите его в словаре слов.

Слова форта хранятся в памяти управляющей программы. Пока что структура словаря слов форт следующая:

VocFRT децибел .5,0x00 Длина и флаги
встать 0x0000 Поиск
децибел «Вперед» название
назад к Исполняемый код
РУБЕЖ децибел .3,0x00
встать VocFRT Предыдущее слово
децибел «Кизил»
MOVLW b'00000100 ' Поле кода
Xorw?st Кеч, 1
назад к

Переводчик прост. Прокрутите список связанных слов от начала до конца. Если имена слов во входном буфере и в списке программ совпадают, переместите элемент управления в поле кода. Когда вы вводите красное командное слово на клавиатуре, красный светодиод включается и выключается.

Механизм для выполнения найденных команд процессора Fort-Word заключается в следующем: исполняемый код ключевых слов помещается в аппаратную чашку микроконтроллера, и переход осуществляется с помощью команды возврата.

doCall INCF СТКПТР, Ф
movf TBLPTRL, The
MOVWF TOSL
movf TBLPTRH, Вт
MOVWF TOSH
movf TBLPTRU, W.
MOVWF TOSU
назад к
Форт Стек.

Поисковая система использовалась в словаре ключевых слов и их произношении. Отсутствует механизм обмена информацией между так называемыми программами форта. Этот механизм представляет собой набор данных. Для работы со стеком 0x0700 STACK выделяется память, выделенная постоянным STACK. Указатель на вершине стека всегда сохраняется в регистре FSR1. При добавлении байт записывается в указатель FSR1, затем значение регистра уменьшается до единицы. Использование регистра FSR1 ограничивает доступ к 255-байтовому сегменту памяти.

WPORTE децибел .5,0x00 ; (- а)
встать WB2C ; Адрес E-порта в наличии
децибел "Eshik"
ЛРСОС 0, Кеч
movff FSR0H, POSTDEC1
movff FSR0L, POSTDEC1
назад к
 
tarasha децибел .3,0x00 ; (на -)
встать WPORTE ; Логическое ИЛИ
децибел "Yoki!" ; с номером
movff PREINC1, FSR0L
movff PREINC1, FSR0H
movf PREINC1, ш
iorwf INDF0,1
назад к

На экране отображается анализ и исполнение некоторых слов. Я не хочу путать источник с быстро растущим числом слов, создавая базовый минимальный уровень.

...

Вход и выход RS232 каждый живет своей жизнью. Вы должны перестать выходить. Процесс всегда должен быть последовательным. Читаем строчку, разобрали, разобрали.

Переменные Форт.

Память микроконтроллера - это память данных - RAM, память программ - FLASH и энергонезависимая память данных. Минимализм в памяти данных - до 4 КБ. Программная память 64 кб. Но написание программной памяти (программирования) не является простым и выполняется в четыре этапа:

  колокол O'qing ; Считать 64 байта памяти программы в буфер.
колокол Изменение ; Измените значения в буфере на реальные.
колокол Удалить ; Очистить 64 байта памяти программ.
колокол Написать ; Переписать данные в память.

И это еще не все. Например, данные для перезаписи находятся в памяти программ по адресу 0x00115C. Команда процессора очистки памяти игнорирует шесть незначительных битов адреса (0: 5). 0x00115C - 1000101011100 - 1000101000000. Таким образом, 64 байта заполняются шестнадцатеричным FF, начиная с 0x001140, а не 0x00115C. Особенность работы с памятью заключается в том, что последняя команда в цикле записи в шестьдесят четыре байта не может быть tblrd * + с автоинкрементом. Значение регистра TBLPTR автоматически изменяется на следующий банк памяти. Следующая команда записи ошибочна и выполняется для блока памяти - 0x1180. И наконец.Сгенерированное слово может появляться между банками в 64 байтах. То есть вам нужно работать с 128 байтами памяти программ.

Идея реализации переменных Fort заключается в том, чтобы хранить указатель в памяти программы только на предварительно сохраненный адрес памяти данных (HEAP) . Задание переменной Fort, которая отвечает за создание новой переменной, состоит из двух частей.

Первая часть Создать переменную. Инструмент обработки переменных команд читает слово после входного потока и вводит его в словарь как новую команду. Помещает адрес памяти данных и некоторый программный код в информационное поле вновь создаваемой переменной .

...

Вторая часть - исполнение. При вводе имени переменной переводчик ищет в словаре слово с тем же именем и перемещает поле управления в поле кода. Выполняемый код помещает двухбайтовый адрес памяти данных в чашку , где значения записываются и читаются. На вершине стека находится младший байт адреса, затем старший байт. Временная команда h2c изменяет значение в верхней части столбца на шестнадцатеричное. ! пишет байт по адресу. @ с чтением.

В-третьих, есть важный момент. Каждую минуту переводчик текста находится в двух состояниях: режим воспроизведения или режим компиляции. В режиме выполнения найденное слово выполняется (то есть выполняется операция, составляющая его семантику), и число помещается в стек. Если переводчик находится в режиме компиляции, найденное в нем слово не выполняется, а компилируется, т.е. входит в последовательность действий, созданных для текущего определенного слова.

В режиме компиляции переменный процессор не получает управление, переменная apple не создается. Во всех последующих ссылках о переменной apple будет ошибка - слово не найдено. Проблема решается глобально и просто. Концепция немедленного исполнения ключей введена в систему форта. Независимо от текущего режима (интерпретация / компиляция), это слово выполняется, то есть создается переменная.

Алгоритм реализации переменной.

Доступ к памяти программ осуществляется только через регистры таблиц (TBLPTR). Мы пишем адрес, мы читаем байт. Следующий алгоритм был использован для доступа к константам в памяти программы. При создании ключевого слова коды машинных команд помещаются с doVariable сразу после его имени. Код команды и адрес подпрограммы учитываются компилятором. Достаточно правильно скопировать эту инструкцию.

После нахождения переменной в списке команд Fort-интерпретатор передает управление в поле кода. Первая команда выполняет команду вызова программы: call doVariable.

В остальном все просто. Вызов в аппаратном стеке микроконтроллера будет полным адресом памяти после команды doVariable. После этой команды при создании слова задаются два байта данных, заполненные адресом резервных ячеек памяти данных. Переписываем адрес из регистров стека в регистры доступа TOS-> TBLPTR. Мы читаем данные в TBLPTR и помещаем их в систему форта. Мы удаляем адрес возврата с аппаратного обеспечения и выполняем возврат. Программа продолжается с того места, где названо слово форт. Этот механизм используется для хранения проводных констант.

изменения:
movf В TOSL
MOVWF TBLPTRL
movf ТОШ, ш
MOVWF TBLPTRH
movf В упадке
MOVWF TBLPTRU
Ханке СТКПТР, Ф Отмените обращение, чтобы набрать номер.
 
TBLRD * + ; Адрес памяти младший байт
movf ТАБЛАТ, Ш
MOVWF POSTDEC1 ; Добавьте к колонне замка.
 
TBLRD * ; Старшие байты адреса памяти
movf ТАБЛАТ, Ш
MOVWF POSTDEC1 ; Добавьте к колонне замка.
назад к
Сложность слов Форта в том, что стек возвращается.

Стандарты системы Fort требуют выполнения стека возврата. Перед передачей управления адрес исполняемого кода следующего слова форта должен быть помещен в столбец возврата. Команда возврата затем удаляет этот адрес из стекла и осуществляет контроль над ним.

Разработчиков микроконтроллера можно обвинить во всем, но им не нравятся команды call / callback. Аппаратный стек возврата рассчитан на 32 глубины вызова, и SI отказывается создавать рекурсию. В режиме замка это означает максимально возможную глубину прикрепления слов форта при создании 32 уровней. Но это лучше, чем программный аналог стека в архитектуре без косвенных вызовов. Общая ситуация такова, как это сделать.

: выход кр;

Cr определил слово и отменил уровень возвращаемого столбца.

Давайте проанализируем команду вызова: 1110 110s kkkk kkkkk 1111 kkkk kkkk kkkkk Эта команда вызывает подпрограмму во всей памяти адреса (2 мегабайта). Все сразу замечают, что максимальный адрес 20-битного значения FFFFF (1048575). Но это один мегабайт. И они задают вопросы. Как 20 ударов могут адресовать два мегабайта? И тогда они отвечают на это.

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

RRNCF TBLPTRU, F ; Разделите адрес пополам
RRCF TBLPTRH, F ; сдвинуть немного вправо
RRCF TBLPTRL, F
;
movff TBLPTRL, POSTINC0 ; 0: 7 адресных бит
MOVLW 0xEC ; Код команды вызова
movff TBLPTRH, POSTINC0 ; 8:15 адресных бит
MOVLW 0xF0 ; 16:20 - адресные биты
iorwf TBLPTRU, The
MOVWF POSTINC0

В регистре Fsr0 указывается адрес команды, а в регистре TBLPTR - только адрес исполняемого кода.

В большинстве случаев создание машинной команды проще и эффективнее, чем создание стека возврата, ввод идентификаторов слов, поиск их в таблицах и передача управления по адресам, указанным там. Как? Это не эффективно делать это. Пример косвенного вызова в архитектуре микроконтроллера PIC показан выше.

Определите новые слова.

Замечательным аспектом языка Fort является его способность добавлять в него новые слова, тем самым расширяя его набор команд в направлении, требуемом программистом. Для добавления новых слов используйте следующее: двоеточие - определение нового слова, через которое оно уже известно. Такое определение начинается со слова: (жирный) и заканчивается словом; (точка с запятой) Слово, которое идентифицируется сразу после двоеточия, а затем последовательность идентифицируемых слов.

...

Давайте посмотрим на работу текстового переводчика при обработке последовательности для определения нового «адреса».

: адрес подкачки h2c h2c cr;

Первое слово: (жирный), готово. Его семантика для архитекторов заключается в следующем.

Подпрограмма GetWORD читает слово после входного потока, которое будет именем новой команды.

Возможно, вам придется перепрограммировать 128-байтовое пространство памяти, чтобы записать два байта в программную память . Буфер FLBuffer (L / H) был установлен в памяти данных для более быстрой работы с памятью программ. Адрес в верхней части свободной памяти программ сохраняется в переменной HereCODE (L / H / U). + - 64 байта памяти программ копируются в буфер с адреса в переменной HereCODE. Адрес памяти программы и буфер имеют разные адреса. ReadCodeHERE вычисляет правильное заполнение в буфере обычного адреса чтения HereCODE, и, начиная с этого адреса (FlBufPTR) , формируется структура fort-word.

Как только структура слова сформирована, слово «:» возвращает систему в интерпретатор команд bcf ForthConfiguration, COMPILATOR и control.

В режиме компиляции интерпретатор, когда находит следующее слово (замену) в словаре, не передает ему управление, а вызывает подпрограмму CompileCALL. Программа генерирует машинный код для команды вызова по найденному адресу и записывает команду в FLBuffer.

Если переводчик не найдет слово в словаре, он попытается идентифицировать введенную последовательность как число. Если число введено, интерпретатор помещает номер в стек и вызывает обработчик CompileNUMBER. Процессор выдает две машинные инструкции: movlw (номер в столбце) и movwf POSTDEC1. В будущем, после передачи контроля, этот код будет ставить постоянный номер в наборе данных.

Процесс разделения и компиляции слов продолжается, пока не встретится; (точка с запятой) Это слово должно иметь флаг, который должен быть завершен немедленно. «Этот текстовый процессор вызывается в режиме компиляции. Он помечается флагом - COMPILE в атрибутах слова. Семантика точки с запятой заключается в том, что построение определения, начинающегося с запятой, завершено.

Точка с запятой в промежуточном буфере (FLBuffer) генерирует машинную команду возврата. После этого он записывается в буфер (128 байт) в памяти программы. После ввода значения переменной адреса последнего слова в словаре LastWORD изменяются, что равно текущему значению HereCODE. И значение HereCODE увеличивается с длиной сгенерированного слова. Обнаружение нового слова завершено, режим компиляции отключен.

Система предоставляет свободную память программ (HereCODE) и глобальную переменную, указывающую адрес последнего слова (LastWORD) в памяти программ. Память программы энергонезависима и может использоваться для завершения всех новых слов после перезапуска менеджера .

Также существует понятие, что буферов недостаточно для компиляции 128 байтов и что необходимо периодически пополнять память программы.

Условное предложение.

Определите два слова. True - показывает первое число. Подделка - отображает нулевой номер на экране. Проверка Word удаляет байты из набора данных. Если ноль в стеке равен нулю, то между командами if и else выполняется группа команд, которые затем передаются команде после завершения управления. Если значение стека равно нулю, передайте управление команде, сначала после другого оператора.

...

Слово форт - это последовательность автомобильных инструкций. Команда If вызывает обработчик CompileIF. Обрабатывающая машина помещает набор инструкций в буфер компиляции, который удаляет значение из стекла и устанавливает его в ноль. Во время фазы обработки оператора if компилятору не известен адрес команды (еще), с которого нужно передать элемент управления, если ноль равен нулю. Компилятор помещает данные в данные, которые являются адресом поля, выделенного для команды, выполняющей переход. Другое или слова в конце Выньте этот адрес из стекла и сделайте оператор перехода к действительному адресу в памяти.

В стандарте функции, описанные выше, выполняют слова> значок - укажите текущее местоположение для пересылки и> исправить - включить пересылку. Он также настоятельно рекомендует управлять стандартной парой if / finish. Очень важно, но позже.

Циклы.

Цикл перед запуском программы повторяется, если стек заканчивается нулем перед выполнением команды, в противном случае цикл заканчивается. Следовательно, если в стеке счетчик больше нуля, требуется последовательность команд «dup if 0 0, 1 end» для проверки байта в стеке и обращения его логического значения в обратном направлении.

...

Последовательность слов «dup b2c cr» повторяет байт в стеке (dup), преобразует его в двоичную последовательность ASCII в выходном буфере (b2c) и отображает его на экране (cr).

Цикл «время начала-повторения» гораздо веселее и проще в использовании. Я понял это и сделал следующее. После запуска группа команд подготавливает данные в стеке для подготовки. Оператор While сравнивает значение в стакане с нулем. Если значение не равно нулю, группа команд запустится через некоторое время. Команда повтора передает управление в начало цикла. Если цикл заканчивается до выполнения оператора while на стекле, управление передается команде после итерации.

...

: цикл 1 dup начинается и d2 h2c cr повторяется cr;

Как устроена улица?

Первая команда цикла начинается. С помощью этой команды интерпретатор находит и передает управление процессору - CompileBEGIN. Эта команда не имеет значения. Текущее местоположение в буфере компиляции помещается в стек. Еще один стек был введен для поддержки возможности выполнения аналогов команд продолжения / разъединения. Набор аргументов и указатель на него всегда присутствуют в регистре FSR2.

Все слова под командой запуска построены обычным способом. Команда While вызывает обработчик CompileWHILE. Перед командой goto машинные коды следующих команд копируются в буфер компиляции. Адрес goto во входном буфере помещается в стек FSR2, и четыре байта выделяются для команды goto, сгенерированной оператором итерации.

MOVLW .0
Xorw?st PREINC1, ш
БНЗ WHBNZ
WHGOTO Гото 0x0000
WHBNZ yo'q

Оператор цикла заканчивается повторением. Эта команда запускает процессор CompileREPEAT. У него две функции. Первый - это безусловный переход к команде для запуска цикла. Во-вторых, создайте команду goto для оператора while, который переходит к первой команде после итерации. Команды / Goto доступны для запуска, и FSR2 имеет все необходимые поля в чашке.

К сожалению, неизбежно, что программы в буфере компиляции будут пересчитаны в фактические адреса памяти программ. Но алгоритм прост. Компиляция начинается в FlCodeBEG (H / L). Этот адрес в буфере компиляции находится в точном месте адреса памяти (U / H / L). Отделите адрес FlCodeBEG от текущего значения в буфере. Здесь мы получаем учетную запись, которая добавляет значение HereCODE (U / H / L). Это дает четкий, реальный адрес памяти, который был заменен операторами goto.

Сравнение скорости SI / FORT.

В SI и FORT реализованы программы для изменения бита порта в бесконечном цикле команды XOR. На первом фото скорость этого генератора сигналов равна СИ, затем ФОРТ. Количество выполненных команд примерно равно.

...

символ чар; do {LATE ^ = 0b00000100; флаг = 0; } while (! flag);

...

: генератор запускается с 0b00000100 XORE 0;

Два нововведения - плохое и хорошее. Медленнее, чем Форт Си, ну - почему только в два раза? Форт выполняет много операций. В каждом цикле форт помещает одни и те же константы в стек, а затем удаляет их. СИ нет. Но что такое 200 кГц для СИ с таким простым набором инструкций? Он не подходит для задач обработки в реальном времени и генерации сигналов тревоги.

Примеры. Выйти из цикла.

Для удобства выполняется оператор отпуска (досрочный выход из цикла).

...

...

...

1-SIM.

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

...

Голосование по шине и чтение адресов группы однопроводных устройств было сделано. Была попытка сделать это в форте, но окончательное выполнение принадлежало ассемблеру: ow_init - initialization; ow_next - прочитать следующий адрес устройства; ow_rc - коды возврата.

...

Если вы идете по проторенному пути, то вам нужно показать список устройств. Алгоритм должен найти этот адрес в списке после получения адреса устройства. Затем спросите температуру устройства и в результате включите или выключите то или иное реле. Список устройств и параметры входной температуры должны быть в энергонезависимой памяти.

Но мы этого не делаем. Списки и алгоритм поиска уже существуют - словарь слов форт, хранящихся в неизменяемом ОЗУ (памяти программ). Алгоритм должен найти это слово в словаре и контролировать передачу.

...


...

Копилка.

F2P (предоставляется компилятору PIC) Применение контроллеров PIC Алпатова Г.Р.

Контроль костей микроконтроллеров PIC18.

Л. Броди. Первый курс программирования Fort.

USART - это соответствующее описание и примеры на ассемблере.

Обработка данных на базе FPGA и микропроцессоров

Обойдите бинарное дерево, не используя колышек.

Обзор IC протокола трансиверов IC.

USB-дан CAN интерфейссига

(MICROCHIP) ДОСКА ДОСКИ MCP25625 PICTAIL ™ PLUS