реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Embedded lua ?, Сколько ресурсов ей требуется ?
helicopter
сообщение Sep 30 2013, 11:35
Сообщение #1





Группа: Новичок
Сообщений: 7
Регистрация: 20-10-10
Пользователь №: 60 302



Нужно встроить в контроллер поддержку исполнения скриптов, загружаемых извне.
Почитав в интернете про 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 точно не подходит. А вот сколько потребует голая виртуальная машина - я не нашёл.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Sep 30 2013, 12:40
Сообщение #2


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(helicopter @ Sep 30 2013, 14:35) *
пробовал ли кто встраивать lua в ARM и сколько ресурсов при этом требует только виртуальная машина без всяких обёрток для доступа к периферии ?


На ARM Thumb без компилятора LUA занимала 64 кбайт Flash.
С компилятором около 100 кбайт.
Статически RAM нужно только 8 байт. Остальное через динамическую память, поэтому и трудно оценить, поскольку надо иметь перехватчик для динамической памяти.
Но с 48 кбайт лучше не соваться.
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Sep 30 2013, 13:06
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



а какие есть альтернативы надежные?
Go to the top of the page
 
+Quote Post
scifi
сообщение Sep 30 2013, 13:06
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(helicopter @ Sep 30 2013, 15:35) *
Мне же нужно только поддерживать вызов некоторых C-функций конткроллера.

Я использовал Pawn. Там вызов сишных функций делается совсем легко. И памяти требует в разы меньше, чем Lua. И работает в разы быстрее.
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Sep 30 2013, 13:14
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



какой версией павн? и на сколько он адекватно работает? я читал обсуждения в инете что он не корректно считает
Go to the top of the page
 
+Quote Post
scifi
сообщение Sep 30 2013, 13:20
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(сарматъ @ Sep 30 2013, 17:14) *
какой версией павн? и на сколько он адекватно работает? я читал обсуждения в инете что он не корректно считает

Версия 4026, проблем не было.
Go to the top of the page
 
+Quote Post
yes
сообщение Sep 30 2013, 13:27
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



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

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

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

сам не пробовал, но смотрел на вариант исполняемой машины LEGO NXT (она опенсорсная и специально RAM-лимитед) и какого-нибудь NQC NXC (ну их там полно) - плюс, протестированность, минус - может придется вычищать какие-то специфические лего-заморочки типа от стандартных сенсоров/двигателей
Go to the top of the page
 
+Quote Post
ukpyr
сообщение Sep 30 2013, 13:46
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



по памяти самый экономный вариант - Форт, но не всякий юзверь его осилит. Читабельность более-менее сложного кода (вычисления, стейт-машины) ниже плинтуса
Go to the top of the page
 
+Quote Post
mantech
сообщение Sep 30 2013, 17:25
Сообщение #9


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(helicopter @ Sep 30 2013, 14:35) *
На том же сайте написано, что eLua может требовать 10 кб RAM в минимальной конфигурации,


Делал виртуальный ПЛК на аврке, мега 1284, у нее на все про все 16кб ОЗУ, причем на ней крутилось 3 задачи, ФС, 2 уарта в пакетном режиме, и еще кое, что по мелочи.
В первой задаче работала прога, которая обслуживает платежную систему(купюрник+монетник+хоппер) и логи в файл, вторая - интерфейс с ПК для настройки, и 3я задача - сам процесс приготовления сиропа.

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

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

Сейчас хочу сделать на АРМе - порядка на 2 быстрее и памяти в нем дохрена. Так что все не так плохо.
Единственный минус такого подхода - система понимает псевдоассемблер, который должен подготовить компилятор на ПК.
Go to the top of the page
 
+Quote Post
helicopter
сообщение Oct 2 2013, 15:53
Сообщение #10





Группа: Новичок
Сообщений: 7
Регистрация: 20-10-10
Пользователь №: 60 302



Цитата
Делал виртуальный ПЛК на аврке, мега 1284, у нее на все про все 16кб ОЗУ, причем на ней крутилось 3 задачи, ФС, 2 уарта в пакетном режиме, и еще кое, что по мелочи.
В первой задаче работала прога, которая обслуживает платежную систему(купюрник+монетник+хоппер) и логи в файл, вторая - интерфейс с ПК для настройки, и 3я задача - сам процесс приготовления сиропа.

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

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

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

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

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

Сообщение отредактировал helicopter - Oct 2 2013, 15:54
Go to the top of the page
 
+Quote Post
mantech
сообщение Oct 3 2013, 18:40
Сообщение #11


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(helicopter @ Oct 2 2013, 18:53) *
Ничего себе частота у аврки :D
А если без шуток, то были ли какие-то особенности конфигурации ? Или стандартная виртуальная машина + модули для выозва Си-функций и всё ?


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


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

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

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

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

Сообщение отредактировал mantech - Oct 3 2013, 18:56
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 4 2013, 06:09
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(helicopter @ Oct 2 2013, 19:53) *
Интересная штука. Си-подобный синтаксис и малое потребление ресурсов очень привлекают, но, насколько я понял, оно не поддерживает структуры ? Без поддержки структур довольно грустно, т.к. надо будет работать с Си-функциями, принимающими/возвращающими структуры.

Вместо структур - массивы с именованными элементами. Типов только 2: cell (32 бита) и текст, поэтому сишная функция должна будет подстраиваться под них. Ну или можно сделать вспомогательные функции для упаковки/распаковки данных и вызывать их из скрипта.
Go to the top of the page
 
+Quote Post
mantech
сообщение Oct 4 2013, 18:54
Сообщение #13


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



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

Да, я так и делал - структуры было лень ваять в парсере, а 32х битные числа и плавающую точку упаковывал в массив из 2х элементов по 16 бит каждый. Пользователь этого чуда не видел, а думал что с 32х биткой работает biggrin.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 20:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01443 секунд с 7
ELECTRONIX ©2004-2016