LINUX.ORG.RU

скрипты в микроконтроллер

 ,


0

3

Посоветуйте самый минималистичный скриптовый язык, чтобы влезал в 32-64К флэш памяти (лучше меньше) и 4-16 Кбайт ОЗУ (микроконтроллер Cortex-M3). Нужно что-то совершенно простейшее. То, чем вы уже пользовались сами, не просто в инете видели.

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

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

★★★★★

Последнее исправление: I-Love-Microsoft (всего исправлений: 1)

Ответ на: комментарий от Deathstalker

Я это в первую очередь смотрел, там от 256К флэшка, а у мну лишь 128К есть, а ведь еще прочий свой код нужно сделать...

I-Love-Microsoft ★★★★★
() автор топика

Ты бы пречислил — мол, про луа и микропитон знаю. Может есть неизвестное чудо...

greenman ★★★★★
()

Forth (для некоторых ARM), 32-битный <16Кб.

То, чем вы уже пользовались сами, не просто в инете видели.

Ну, 2 2 + . точно работает, проверял:)

arson ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

а ты скомпиль и проверь, может влезет

Harald ★★★★★
()
Ответ на: комментарий от vladimir_

Jim compiled with -Os is 85k currently. Still it lacks core commands that will make it a little bigger, but not too much... only what's strictly required will end inside the core, the rest will be implemented as extensions. Note that the actual Jim core is much smaller, if you strip away commands. If you can do without [expr] (that's big about code size), and some other command you may probably end with a 40k executable.

До 40К сжать. Про раму не пишут. Пометил как «интересно».

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от arson

Forth (для некоторых ARM), 32-битный <16Кб.

Тоже интересно, хороший вариантишко :)

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

На луа факе написано что 150кб если с фронтендом, но можно ужать до 40кб если оставить только саму машину и на вход кормить байткодом. Про раму тоже не пишут.

pftBest ★★★★
()
Ответ на: комментарий от pftBest

но можно ужать до 40кб если оставить только саму машину и на вход кормить байткодом. Про раму тоже не пишут

Это вариант, потому что я предполагаю что будет некая кроссплатформенная софтина к прибору, она и сделает байт код, а он залезет в МК.

I-Love-Microsoft ★★★★★
() автор топика

Интерпретатор Scheme. Есть даже несколько быстрых реализаций с байткодом, погугли scheme for microcontrollers.

Puzan ★★★★★
()

Тоже за форт

dave ★★★★★
()
Ответ на: комментарий от Iron_Bug

не я - пользователь ;) рассмотрю всё, но выберу самое простое, скорее Lua или Python (если MicroPython можно масштабировать), или Tcl, а вот Scheme Lisp или форт - если там сложно, то вероятно не подойдет пользователю...

I-Love-Microsoft ★★★★★
() автор топика
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

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

Iron_Bug ★★★★★
()
Последнее исправление: Iron_Bug (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

Я ради интереса собрал минимальный луа проект, получилось действительно 40кб.
https://github.com/pftbest/minimal_lua

   text	   data	    bss	    dec	    hex	filename
  42611	    712	      8	  43331	   a943	bin/luaproj
На простом примере сложить два числа выделяет чуть меньше 3кб рамы.
Чтобы отрезать парсер и лексер понадобилось только две строчки закомментировать. Исходники брал самые свежие 5.3.4, если взять 5.1, то наверно можно будет еще сильнее порезать.

pftBest ★★★★
()

внезапно, можно написать свой, c блекджеком и девами ориентированный на задачу;-)

как сделать язык типа паскаль рассмотрено в документации libc. как сделать форт-подобное или lisp-подобное есть на каждом втором заборе в этих ваших интернетах :-)

MKuznetsov ★★★★★
()

Будешь смотреть Lua - обрати внимание на спец. вариант для микроконтроллеров eLua http://www.eluaproject.net/
Для любителей С можно посмотреть PicoC или Pawn https://www.compuphase.com/pawn/pawn.htm
Pawn я пользовал, но просто как С-образный скрипт, вызываемый из основной программы. Но в описании пишут: «Pawn is small. It has been fitted on an Atmel ATmega128 microcontroller, Philips LPC2138 and LPC2106 microcontrollers (ARM7TDMI core with 32 KiB RAM), as well as on a Texas Instrument's MSP430F1611 (MSP430 core with 10 KiB RAM and 48 KiB Flash ROM). Using code overlays that are loaded on demand, pawn is able to run large scripts in little memory.»

sigurd ★★★★★
()

может банально, но - basic (один из кучки интерпретаторов) не рассматривали?

NiTr0 ★★★★★
()

У нас на работе был свой компилятор си (ну, подмножества си - с аналогом «yield» из гринтредов, называлось «wait» - про гринтреды и гороутины мы и не слышали, и походу их повторно изобрели). Компилировался в байткод, на микроконтроллере (своя платка на stm32) или на десктопе была виртуальная машина которая его исполняла.

wolph ★★
()
Ответ на: комментарий от pftBest

C eLua и Lua - неработал! Но еLua работает на Cortex-M3 и можно взять готовую сборку под конкретный МК. По моему мнению, это лучше, чем заниматься изучением внутренностей Lua, потом написанием своей обвязки для периферии и т.д. Да - если самому писать - возможно будет меньше места занимать, но это кому что интересно.

sigurd ★★★★★
()
Ответ на: комментарий от sigurd

кому что интересно.

Стандартный образ eLua занимает 200кб, автор темы сказал что у него флешка не больше 128К, и просил чтобы язык «влезал в 32-64К». В вашем варианте придется ковырять внутренности и elua и lua, чтобы впихнуть невпихуемое. Не знаю как вам, но мне бы этим заниматься не хотелось.

pftBest ★★★★
()
Ответ на: комментарий от pftBest

Не знаю как вам, но мне бы этим заниматься не хотелось.

Тем-не менее - вы залезли в недра lua и отключили некоторые функции. Я бы точно этим не стал заниматься. А eLua я присматривал именно как реализацию готовой прошивки для МК, да она жирнее, но и готовых возможностей там дофига (работа c периферией МК, файловая система, консоль через UART, работа с i2c, spi, таймеры, АЦП, даже сеть есть).
А если говорить про жирность, то даже ваш minimal_lua (~40kb) в 8 раз жирнее Pawn (~5kb - ассемблерная версия интерпретатора байт-кодов на АРМ)

sigurd ★★★★★
()
Последнее исправление: sigurd (всего исправлений: 1)
Ответ на: комментарий от NiTr0

Во-во. Тем паче, что раз уж на Z80 интерпретатор васика вместе с биосом влезал в 16кБ, то на ARM со свистом войдет!

anonymous
()
Ответ на: комментарий от wolph

Ну вы и велосипедисты, я бы сказал профессиональные велогонщики :)

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от pftBest

Я написал автору MicroPython. Он утверждает что у него тоже есть аналогичный сокращенный bytecode-режим. Говорит в таком виде MicroPython кушает тоже порядка 40 Кбайт флэша - гораздо лучше, а то пишет 256К и наводит этим ужас потенциальных юзверей.

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Lisp или форт - если там сложно

проще и tcl и Python оба, на самом деле

next_time ★★★★★
()
Последнее исправление: next_time (всего исправлений: 1)

Текст ответа разработчика MicroPython:

MicroPython already supports building without the compiler. It has a cross-compiler which you run offline (eg on your desktop PC) to compile Python scripts to bytecode, and then you can «freeze» these scripts into your firmware. You can then execute these pre-compiled scripts without the need for the compiler running on the firmware.

With the compiler disabled it saves about 20kbytes of flash space. The minimal build is then about 56kbytes of code space (for Thumb2 architectures).

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от pftBest

пока не пробовал, но засунуть в МК хотелось бы именно змеюку

I-Love-Microsoft ★★★★★
() автор топика

Собрал MicroPython для Linux - пашет хорошо, всё что мне надо - поддерживается.

Кто-нибудь хочет поучаствовать в попытках собрать это для Cortex-M3? Боюсь это не слишком тривиально как для Linux...

I-Love-Microsoft ★★★★★
() автор топика
26 января 2018 г.
Ответ на: комментарий от I-Love-Microsoft

MicroPython

Он же однопоточный, как аппаратурой управлять?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.