Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт мар 29, 2024 00:43

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - Embedded Forth ( встраивание Форта в Си )
Автор Сообщение
  Заголовок сообщения:  Re: Embedded Forth ( встраивание Форта в Си )  Ответить с цитатой
Ещё один проект создания Форта на С
The nano-Forth project
Код:
The goal of this project is to develop a small Forth kernel suitable for use in small devices, driven by microcontrollers. This means that the kernel has to be as small as possible, need as little resources as possible and work as fast as possible.

This project is a static library, licensed under the terms of GNU Lesser General Public License (former GNU Library Public License) version 3 or later.

nano-Forth is written in a relatively portable manner, but as of today has been successfuly built and tested on the following platforms:

Atmel AVR
    This is the primary target platform for nano-Forth. You will need the avr-gcc toolchain for building.
Linux x86_64
    This is my primary debugging platform. nano-Forth can be successfuly built in debug mode on it, and then you may use gdb to locate various problems in the kernel.
Linux x86
    Unfortunately, due to some limitations in object file format, x86 (AKA i386) is not the best target platform for nano-Forth. You can build a x86 linux executable, but it will run only from a root account.

Дата последнего обновление проекта 03.19.2010г.
Copyright (C) 2010 Andrew Zabolotny <zap@cobra.ru>
Сообщение Добавлено: Сб апр 21, 2012 12:46
  Заголовок сообщения:   Ответить с цитатой
Ссылка для темы uForth
Код:
uForth is a Forth like scripting system for microcontrollers with limited resources. It is written in C and is best used as a glue language to tie C functions and services together dynamically. With that intention, uForth is not a full system Forth. It is neither ANSI compliant nor suitable for Forth programming from the ground up.

uForth can be compiled as a 16 bit or 32 bit stack Forth. The dictionary is stored as 16 bit values.

The VM and interpreter fits in as little as 8KB of Flash and 1KB of RAM (assuming, but not counting, a flash resident dictionary).

The dictionary stores all entries as 16 bit cells in the processor's native endianess. The dictionary can be saved and loaded on processes with the same endianess. It should be trivial to transform the dictionary between processes of different endian.

uForth implements ~55 primitives in C. While some of these words can be defined in uForth itself, they are implemented in C for space efficiency and speed.


P.S. Есть и собранный bin файл для MSP430
Сообщение Добавлено: Чт мар 11, 2010 00:10
  Заголовок сообщения:   Ответить с цитатой
Сегодня ещё кое-что нашёл:
http://sourceforge.net/projects/forpost/
Цитата:
Forpost is an embeddable, interpreted stack-based(Forth-like) language which has simple, compact and effective implementation in ANSI C. Main features: heterogeneous arrays, higher-order functions, program/data equivalence.

Кажется, то что надо. Хотя надо сначала попробовать.
Синтаксис несколько необычный, зато
Цитата:
Интерпретатор Форпоста является безопасным, в том смысле, что ошибки программиста не приводят к краху всей системы.


Вообще на sf.net целая куча разных фортов, на любой вкус и цвет. Не надо изобретать свой велосипед , выбирай готовый!
Сообщение Добавлено: Сб окт 31, 2009 10:38
  Заголовок сообщения:   Ответить с цитатой
Неожиданный поворот сюжета.
http://c-fvm.sourceforge.net/index.php
Кросс-компилятор с форта на си.
Правда, на таргет заливается уже готовая прошивка, интерпретатор байт-кода и готовые же скрипты.

Горячая смесь форта и си!:
Код:
#define PortA 0x80

#define PortB 0x90

// ----------------------------

// Initialises ports

: InitPorts ( -- )

  0x57 PortA !

  0xFF PortB !

;

// ----------------------------

// Initialisation

: InitTarget ( -- )

  InitPorts

;

// ----------------------------

// Main routine

: main ( -- )

  5 6 * DROP

;


Сообщение Добавлено: Сб июл 11, 2009 19:59
  Заголовок сообщения:   Ответить с цитатой
Mihail писал(а):
Времени у меня мало. Заботится о фортерах мало кому интересно.

Гм. Ну а зачем тогда с завидной регулярностью давать ссылки на свои полуфабрикаты? Люди начинают интересоваться, а им ррраз - "уже давно есть". А потом начинаются уточнения, что это еще не доведено, что времени мало и вообще...
Mihail писал(а):
Меня интересует глобальное развитие Форта.

А меня - где поблизости можно найти вкусный кофе. Здесь же не ЖЖ, чтобы просто рассказывать об интересах без полезного выхода для других людей.
Mihail писал(а):
Вообще достаточно сделать хороший конвертер из Си в Форт.
(неважно на чем написан конвертер).
Можно наоборот встроить форт в программу на Си.
Можно программу на Си представить в виде ДЛЛ и вызвать из Форта.

Три пункта, совершенно разные по сложности. Хороший конвертер - из разряда благих пожеланий. Форт в Си встраивается элементарно, была бы dll (кварк и Спф такое предоставляют, очевидно, есть и еще). Си в Форт встраивается постоянно, поскольку подключение библиотек в Windows-трансляторах Форта используется повсеместно. Чего же еще не хватает?
Сообщение Добавлено: Чт июл 09, 2009 17:24
  Заголовок сообщения:   Ответить с цитатой
Хищник писал(а):
Но так и не увидел практических результатов

Времени у меня мало. Заботится о фортерах мало кому интересно.

Хищник писал(а):
почему не потратить такие усилия на что-то другое

Меня интересует глобальное развитие Форта.

Хищник писал(а):
надо написать компилятор и IDE

В данном случае, си компилятор и IDE смешивать ненужно.
Приличное IDE нужно в форте вне зависимости от применяемых в Форте синтаксисов.
При этом, как компилятор так и IDE писать на Форте не обязательно.
Вообще достаточно сделать хороший конвертер из Си в Форт.
(неважно на чем написан конвертер).
Можно наоборот встроить форт в программу на Си.
Можно программу на Си представить в виде ДЛЛ и вызвать из Форта.

Хищник писал(а):
надо написать ФортОС... а что еще - Doom 3 повторить?

Не нужно ничего повторять. Форт можно встраивать в любые программы и прежде всего
в ядра всех ОС. Я например, встраиваю Форт в игру spring.
Сообщение Добавлено: Чт июл 09, 2009 17:13
  Заголовок сообщения:   Ответить с цитатой
Mihail писал(а):
Почему формально? Я предлагаю не написание компилятора Си, а размещение
его в рамках форт-системы. Другое дело, написанный на Форте Си легче разместить
в форт-системе.

Об этом я уже неоднократно слышал. Но так и не увидел практических результатов, а главное, обоснования, зачем бы такое понадобилось, и почему не потратить такие усилия на что-то другое.
Mihail писал(а):
Этого не достаточно, к компилятору Си еще требуется интегрированная среда разработки.
Сама по себе возможность Форта воспринимать любой синтаксис - раскрывает сущность Форта
и потенциальное превосходство над другими средствами программирования.

И получается, надо написать компилятор и IDE, чтобы только убедить всех, что "Форт тоже может"? :) Выходит, из подобных же соображений надо написать ФортОС... а что еще - Doom 3 повторить? Только чтобы не краснеть перед сишниками?
Mihail писал(а):
Зачем switch ?

Чтобы впоследствии добавить обработку литералов и превратить все это в интерпретатор ШК.
Да и кстати, а зачем макросы-то? Чтобы постоянно таскать за собой компилятор Си, и постоянно перекомпилировать этот набор макросов? Так об этом и шла речь - простейший интерпретатор позволит сократить число повторных компиляций и общаться с МК по несложному протоколу, посылая короткие команды. А не перезаливая всю прошивку.
Сообщение Добавлено: Чт июл 09, 2009 15:32
  Заголовок сообщения:   Ответить с цитатой
Хищник писал(а):
еще можно привязать переключение задач к таймеру

И количество тиков таймера, выделенных задаче, будут соответствовать приоритету задачи.
Сообщение Добавлено: Чт июл 09, 2009 15:25
  Заголовок сообщения:   Ответить с цитатой
MrYuran писал(а):
Ну нет, это уж слишком примитивно.

Это самый минимальный движок, призванный обеспечить понимание механизмов работы транслятора Форта.
MrYuran писал(а):
А переключаться наверно лучше при переходе к новому слову, чтобы никакие дополнительные регистры не сохранять.

Да, можно и так, и как раз в развитие приведенного мной куска. Представление функций Си индексами - это так называемый шитый код (его разновидность). Если представить разные задачи наборами таких индексов, и завести собственный указатель (ip) для каждой задачи, то окажется достаточным просто выполнять по одному индексу для каждой задачи. Конечно, можно и не по одному, чтобы накладные расходы были поменьше, еще можно привязать переключение задач к таймеру и т.п.
Сообщение Добавлено: Чт июл 09, 2009 15:18
  Заголовок сообщения:   Ответить с цитатой
Хищник писал(а):
Формально, на Форте можно написать компилятор Си.


Почему формально? Я предлагаю не написание компилятора Си, а размещение
его в рамках форт-системы. Другое дело, написанный на Форте Си легче разместить
в форт-системе.

Хищник писал(а):
Михаил вот уже не первый год считает, что такой компилятор существенно "продвинет" Форт, потому что многие сразу начнут писать на Форте.


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

Хищник писал(а):
Код:
это программа на Си. Независимо от того, на чем написан компилятор, обрабатывающий этот текст.


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

Хищник писал(а):
Код:
switch index

case 1: func1()
case 2: func2()
case 3: func3()


и так далее. После этого окажется возможным скармливать такому интерпретатору более или менее осмысленные строки вида

Код:
FUNC1 FUNC2 FUNC3


Зачем switch ?
Код:
#define FUNC1 func1();
#define FUNC2 func2();
#define FUNC3 func3();
#define ADD   DSP[1]+=*DSP++;


Я встречал подобный прием при программировании на ассемблере.
Можно так модифицировать дизфорт, что но сгенерит подобную Си программу.
Сообщение Добавлено: Чт июл 09, 2009 12:54
  Заголовок сообщения:   Ответить с цитатой
Хищник писал(а):
Код:
switch index
case 1: func1()
case 2: func2()
case 3: func3()
и так далее. После этого окажется возможным скармливать такому интерпретатору более или менее осмысленные строки вида
Код:
FUNC1 FUNC2 FUNC3

Ну нет, это уж слишком примитивно.
Пока для себя отобрал CamelForth, pForth и MrForth.
Буду разбираться.
Вариант Михаила тоже ничего, но он подходит для работы с чистым фортом и для компиляции целевого словаря.

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

В форте, что меня очень привлекло, контекст намного меньше. Нужно сохранять только указатели стеков и IP.
А переключаться наверно лучше при переходе к новому слову, чтобы никакие дополнительные регистры не сохранять.
Сообщение Добавлено: Чт июл 09, 2009 09:26
  Заголовок сообщения:   Ответить с цитатой
MrYuran писал(а):
Поэтому и была идея встроить форт в проект и подцепить, скажем, к обработчику прерываний технологического UARTа.
При этом так, чтобы можно было вызывать сишные процедуры из форта.

Это хорошая и продуктивная идея, которая, кроме прочего, имеет несложное решение. Конкретно можно ограничиться интерпретатором. К примеру, первая функция откусывает из переданной строки очередной токен (выделяя его по пробелам), вторая ищет в словаре (списке, БД, руками выписанной сравнивалке - что проще) либо исполняемый адрес, либо просто некий номер (опять же, что проще). Дальше делаем
(пишу сильно упрощенно)
Код:
switch index

case 1: func1()
case 2: func2()
case 3: func3()


и так далее. После этого окажется возможным скармливать такому интерпретатору более или менее осмысленные строки вида

Код:
FUNC1 FUNC2 FUNC3


Функции можно и желательно назвать красиво и осмысленно. Итогом должно стать некоторое сокращение компиляций проекта, поскольку часть задач тестирования и отладки можно будет решать посылкой разных комбинаций подобных команд.
Сообщение Добавлено: Ср июл 08, 2009 23:24
  Заголовок сообщения:   Ответить с цитатой
simne писал(а):
А Форт сейчас плохо воспринимает синтаксис Си? - У него наверное рвотный рефлекс возникает

Формально, на Форте можно написать компилятор Си. Почему, собственно, нет? Другое дело, что лично мне такой продукт видится несколько несвоевременной боковой веткой, которой, возможно, стоило бы заниматься специалисту по компиляторам (а не по Форту). Михаил вот уже не первый год считает, что такой компилятор существенно "продвинет" Форт, потому что многие сразу начнут писать на Форте. Хотя я таки убежден, что программа

Код:
int main()
{
   int a = 10;
   int b = 20;
   int c = a + b;
   return c;
}


это программа на Си. Независимо от того, на чем написан компилятор, обрабатывающий этот текст.
Сообщение Добавлено: Ср июл 08, 2009 23:17
  Заголовок сообщения:   Ответить с цитатой
вопрос писал(а):
Опять перепалка
Какая добрая критика.

Ну а сколько можно? Я понимаю, что Михаил уже обжил свой любимый уголок, в котором он гуру Форта, только окружающие никак не признают перспективность именно его идей. Вот только не надо сбивать с толку окружающих, а тем более тех, у кого нет намерения сидеть годами в обрывках форт-программок и перекладывать с места на место полуфабрикаты, ценность которых очевидна только их автору. Вообще-то жизнь идет вперед, и Форт по факту является языком, на котором можно писать сейчас. А не когда-то там в будущем, после реализации пачки глобальных проектов. Надо же соображать немного, в конце-то концов. Если приходят студенты, можно понять, что у них сроки достаточно сжаты, и результат с явно ощущаемым эффектом нужен как можно раньше.
Сообщение Добавлено: Ср июл 08, 2009 23:08
  Заголовок сообщения:   Ответить с цитатой
MrYuran писал(а):
Поэтому и была идея встроить форт в проект и подцепить, скажем, к обработчику прерываний технологического UARTа.
При этом так, чтобы можно было вызывать сишные процедуры из форта.

короче, вам лучше всего использовать Форт-ядро, написанное на сях (чтобы интеграция с нужными либами была простой) и встроенный интерпретатор, возможно токенов.
Сообщение Добавлено: Ср июл 08, 2009 22:31

Часовой пояс: UTC + 3 часа [ Летнее время ]


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB