Перейти к содержанию
    

Embedded lua ?

Нужно встроить в контроллер поддержку исполнения скриптов, загружаемых извне.

Почитав в интернете про ECMAScript/tcl/lua/Forth решил, что lua будет наиболее подходящим вариантом.

Кроме того - для lua был обнаружен вот такой сайт http://www.eluaproject.net/, где указаны требования 64к RAM и 128/256 Flash в зависимости от того - поддерживаются ли числа с плавающей точкой.

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

Мне же нужно только поддерживать вызов некоторых C-функций конткроллера. На том же сайте написано, что eLua может требовать 10 кб RAM в минимальной конфигурации, "но при этом вы не сможете сделать ничего больше, чем поморгать светодиодом" (ц). Отсюда вопрос - пробовал ли кто встраивать lua в ARM и сколько ресурсов при этом требует только виртуальная машина без всяких обёрток для доступа к периферии ?

 

Контроллер lm3s5r31 48кб RAM/256 кб FLASH, поэтому полный вариант eLua точно не подходит. А вот сколько потребует голая виртуальная машина - я не нашёл.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

пробовал ли кто встраивать lua в ARM и сколько ресурсов при этом требует только виртуальная машина без всяких обёрток для доступа к периферии ?

 

На ARM Thumb без компилятора LUA занимала 64 кбайт Flash.

С компилятором около 100 кбайт.

Статически RAM нужно только 8 байт. Остальное через динамическую память, поэтому и трудно оценить, поскольку надо иметь перехватчик для динамической памяти.

Но с 48 кбайт лучше не соваться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне же нужно только поддерживать вызов некоторых C-функций конткроллера.

Я использовал Pawn. Там вызов сишных функций делается совсем легко. И памяти требует в разы меньше, чем Lua. И работает в разы быстрее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

какой версией павн? и на сколько он адекватно работает? я читал обсуждения в инете что он не корректно считает

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

какой версией павн? и на сколько он адекватно работает? я читал обсуждения в инете что он не корректно считает

Версия 4026, проблем не было.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

все эти интерпретаторы: lua, tcl и т.п. жрут память (upd: во время исполнения) со страшной силой, поэтому, мне кажется, нужно искать какие-то специальные встраиваемые варианты. возможно придется пожертвовать "красотой и мощью" языка

 

upd: даже если и удасться засунуть машину исполнения, то код, который на ней будет исполняться нужно будет сильно ограничивать - можно для ПК собрать и посмотреть (я собственно так и делал когда-то)

 

------------------------

 

сам не пробовал, но смотрел на вариант исполняемой машины LEGO NXT (она опенсорсная и специально RAM-лимитед) и какого-нибудь NQC NXC (ну их там полно) - плюс, протестированность, минус - может придется вычищать какие-то специфические лего-заморочки типа от стандартных сенсоров/двигателей

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

по памяти самый экономный вариант - Форт, но не всякий юзверь его осилит. Читабельность более-менее сложного кода (вычисления, стейт-машины) ниже плинтуса

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На том же сайте написано, что eLua может требовать 10 кб RAM в минимальной конфигурации,

 

Делал виртуальный ПЛК на аврке, мега 1284, у нее на все про все 16кб ОЗУ, причем на ней крутилось 3 задачи, ФС, 2 уарта в пакетном режиме, и еще кое, что по мелочи.

В первой задаче работала прога, которая обслуживает платежную систему(купюрник+монетник+хоппер) и логи в файл, вторая - интерфейс с ПК для настройки, и 3я задача - сам процесс приготовления сиропа.

 

Скорость задач не очень большая, порядка 400-600 команд.сек, но для 8и битки, на частоте 11059200Мгц

 

вполне неплохо.

 

Сейчас хочу сделать на АРМе - порядка на 2 быстрее и памяти в нем дохрена. Так что все не так плохо.

Единственный минус такого подхода - система понимает псевдоассемблер, который должен подготовить компилятор на ПК.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Делал виртуальный ПЛК на аврке, мега 1284, у нее на все про все 16кб ОЗУ, причем на ней крутилось 3 задачи, ФС, 2 уарта в пакетном режиме, и еще кое, что по мелочи.

В первой задаче работала прога, которая обслуживает платежную систему(купюрник+монетник+хоппер) и логи в файл, вторая - интерфейс с ПК для настройки, и 3я задача - сам процесс приготовления сиропа.

 

Скорость задач не очень большая, порядка 400-600 команд.сек, но для 8и битки, на частоте 11059200Мгц

 

вполне неплохо.

Ничего себе частота у аврки :D

А если без шуток, то были ли какие-то особенности конфигурации ? Или стандартная виртуальная машина + модули для выозва Си-функций и всё ?

 

Я использовал Pawn. Там вызов сишных функций делается совсем легко. И памяти требует в разы меньше, чем Lua. И работает в разы быстрее.

Интересная штука. Си-подобный синтаксис и малое потребление ресурсов очень привлекают, но, насколько я понял, оно не поддерживает структуры ? Без поддержки структур довольно грустно, т.к. надо будет работать с Си-функциями, принимающими/возвращающими структуры.

Изменено пользователем helicopter

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ничего себе частота у аврки :D

А если без шуток, то были ли какие-то особенности конфигурации ? Или стандартная виртуальная машина + модули для выозва Си-функций и всё ?

 

 

Интересная штука. Си-подобный синтаксис и малое потребление ресурсов очень привлекают, но, насколько я понял, оно не поддерживает структуры ? Без поддержки структур довольно грустно, т.к. надо будет работать с Си-функциями, принимающими/возвращающими структуры.

 

Да, с частотой я че-то погорячился :biggrin:

 

Виртуальная машина не стандартная конечно. Задумывалось сие чудо для простых задачек, типа принять пакетик с уарта, проверить парой IFов, и дрыгнуть парой ножек, но чтоб не писать постоянные инициализации портов АЦПшек УАРТов и прочей периферийки, вобщем избавится от рутины. Плюс были заинтересованные клиенты, и у них запрос типа "не умею программить контроллеры, а вот пару -тройку сишных команд нарисовать могу" :rolleyes: - таким пришлось в самую пору...

 

Делалось все очень просто - сишный текст парсился компилятором в командной строке типа GCC и создавался бинарник на сд-карту, потом эта карта вставлялась в контроллер и запускалась прога.

Потом я уже "наворотил" там всяких менюшек, протоколов связи и т.п. Сделал систему прерываний прооптимизировал код и сделал 3х задачную систему...

 

ЗЫ. Единственное что могу сказать по поводу ресурсов - 1 оператор у меня занимал примерно 3-5 псевдоассемблерных команд, а каждая команда 2 байта в памяти. Быстродействие примерно 3000 таких команд в сек. Соотв выполнялось 500-900 операторов в сек. Исключение операторы с большим кол-вом параметров.

Т.е. из 12кб ОЗУ, хватало на 700-1000 операторов, согласитесь, в такой проге можно не только светодиодами помигать))))))

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Интересная штука. Си-подобный синтаксис и малое потребление ресурсов очень привлекают, но, насколько я понял, оно не поддерживает структуры ? Без поддержки структур довольно грустно, т.к. надо будет работать с Си-функциями, принимающими/возвращающими структуры.

Вместо структур - массивы с именованными элементами. Типов только 2: cell (32 бита) и текст, поэтому сишная функция должна будет подстраиваться под них. Ну или можно сделать вспомогательные функции для упаковки/распаковки данных и вызывать их из скрипта.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вместо структур - массивы с именованными элементами. Типов только 2: cell (32 бита) и текст, поэтому сишная функция должна будет подстраиваться под них. Ну или можно сделать вспомогательные функции для упаковки/распаковки данных и вызывать их из скрипта.

Да, я так и делал - структуры было лень ваять в парсере, а 32х битные числа и плавающую точку упаковывал в массив из 2х элементов по 16 бит каждый. Пользователь этого чуда не видел, а думал что с 32х биткой работает :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...