Easyelectronics.ru

Электроника для всех
Текущее время: 01 окт 2020, 18:35

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 93 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: скриптовый язык для МК
СообщениеДобавлено: 30 мар 2016, 23:28 
Старожил

Зарегистрирован: 30 апр 2010, 22:56
Сообщения: 1589
Откуда: Киев
Возникла потребность скриптовать простые действия - термометр, таймер, пара входов, пара выходов. Наподобие - включили подогрев - разогрели - подождали - остудили. Естественно с кучей проверок на недопустимые ситуации - если греем, а температура падает - алярма. И т.д.

Базовый МК - stm32f030, памяти 4к, флеша 16к

Вот хочу какой-то компактный байткод. Или машину состояний. Загрузка через UART

Сейчас впихнул форт, вроде завелся. Но терзают смутные сомнения, что есть еще варианты.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: скриптовый язык для МК
СообщениеДобавлено: 30 мар 2016, 23:33 
Старожил
Аватара пользователя

Зарегистрирован: 03 сен 2010, 22:46
Сообщения: 6095
Откуда: Москва
Обычно делается табличный конечный автомат. Есть готовые фреймворки на эту тему, посмотрите например VisualState - очень удобно, но стоит денег. Бесплатные варианты тоже есть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: скриптовый язык для МК
СообщениеДобавлено: 31 мар 2016, 00:06 
Старожил

Зарегистрирован: 30 апр 2010, 22:56
Сообщения: 1589
Откуда: Киев
akatenev писал(а):
Обычно делается табличный конечный автомат. Есть готовые фреймворки на эту тему, посмотрите например VisualState - очень удобно, но стоит денег. Бесплатные варианты тоже есть.


Посмотрел. Как понял - по описанию КА генерируется С-код, компилируется и заливается в МК. Это я и так без проблем могу сделать на switch-case, например.
Вопрос в чем - динамически залить по UART скрипт и запустить его. Значит нужно какое-то представление КА. Допустим, табличное. А действия при переходах как задавать? А условия перехода? Тянуть какой-то парсер выражений?

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

А что-то вроде "предпринять 10 попыток и если в течение 1 секунды температура не начала уменьшаться - останов" генерирует такое адово месиво состояний классического КА, что нуегонафиг. И вся красивая концепция с событиями и таблицами идет лесом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: скриптовый язык для МК
СообщениеДобавлено: 31 мар 2016, 00:33 
Старожил
Аватара пользователя

Зарегистрирован: 03 сен 2010, 22:46
Сообщения: 6095
Откуда: Москва
Если делаются табличные КА - они без проблем обновляются в любой момент без изменения кода, собственно в этом и есть их основное преимущество. Действия задаются как обычно, через набор Action, в том числе с параметрами. Условия - как правило простенький парсер. Переменные задаются в той же таблице. А если у вас КА при таких простых действиях "генерируют адово месиво", то значит вы просто не умеете их готовить :) Собственно КА обычно упрощают, а не усложняют представление.

Что касается скрипта, то часто это ничего особенно не упрощает, та же программа, вид сбоку, просто на другом языке. Мало чем отличается от обычного, хорошо сделанного набора функций в том же C. Собственно, и по UART заливается совершенно аналогично обычной прошивке. Посему скриптовые языки почти никогда на МК и не используются, хотя иногда используются препроцессоры типа Wire на Arduino. Препроцессор вместе с бутлоадером могут наверное решить вашу проблему, первый упрощает изменение поведения системы, второй позволяет без проблем загрузить новую программу в любой момент.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: скриптовый язык для МК
СообщениеДобавлено: 31 мар 2016, 01:05 
Старожил

Зарегистрирован: 30 апр 2010, 22:56
Сообщения: 1589
Откуда: Киев
Вот этот "простенький парсер" и Action() с параметрами - и выходит некий интерпретатор. Вот в нем затык. Что есть такое не сильно жрущее?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: скриптовый язык для МК
СообщениеДобавлено: 31 мар 2016, 01:16 
Старожил

Зарегистрирован: 27 мар 2015, 01:22
Сообщения: 1953
Я бы вместо байткода, кодогенератора в байткод на компе и интерпретатора в мк использовал просто нативный ассемблер и кодогенератор в ассемблер.
Ну а кодогенератор как раз был бы на скриптовом языке

_________________
mcu.goodboard.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: скриптовый язык для МК
СообщениеДобавлено: 31 мар 2016, 01:38 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3691
Откуда: Новосибирск
Steel.ne писал(а):
А что-то вроде "предпринять 10 попыток и если в течение 1 секунды температура не начала уменьшаться - останов" генерирует такое адово месиво состояний классического КА, что нуегонафиг. И вся красивая концепция с событиями и таблицами идет лесом.

Ну почему? Есть главный автомат. Подавтоматы. В каждом состоянии просчитываются моменты. Лично я до сих пор не увидел альтернативы автоматам.

akatenev писал(а):
....

Таблицы хороши для одного автомата. А если автоматов несколько? Или есть подавтоматы? Кстати, в MicroMenu я увидел неплохую штуку. Само меню и есть автомат и его состояние - уровень, где находимся в текущий момент. Все будущие и прошлые уровни-подуровни прописаны в таблице.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: скриптовый язык для МК
СообщениеДобавлено: 31 мар 2016, 01:49 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5358
Steel.ne писал(а):

Базовый МК - stm32f030, памяти 4к, флеша 16к



С такими ресурсами об интерпретаторе скриптов в их прямом понимании надо забыть

Почему такое неприятие заливки прошивки?) у stm32 для этого все есть.
Могу это понять если собственный процессор задач не должен зависеть от компиляторов
Если так то конечный автомат о котором говорили ввше самое то
Делаете анализ всех возможных сценариев которые нужны, на основе анализа формируете бинарную структуру которая описывает любой шаг необходимого сценария
Пишите интерпретатор этих бинарных структур
Ну а дальше заливаете обновление массива структур через uart как и хотели


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: скриптовый язык для МК
СообщениеДобавлено: 31 мар 2016, 02:10 
Старожил
Аватара пользователя

Зарегистрирован: 03 сен 2010, 22:46
Сообщения: 6095
Откуда: Москва
Да без проблем таблицами хоть сто одновременно работающих автоматов сделать. Но конечно самому писать это как правило не имеет смысла, надо брать готовую реализацию.

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

Вот сюда еще можно глянуть, из бесплатных это наверное лучшая реализация FSM: http://www.state-machine.com/

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: скриптовый язык для МК
СообщениеДобавлено: 31 мар 2016, 02:25 
Старожил

Зарегистрирован: 28 дек 2012, 07:17
Сообщения: 517
akatenev писал(а):
И честно говоря непонятно, какую конкретно задачу пытается решить ТС. Скрипт - это всего лишь инструмент, задачей он быть не может.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: скриптовый язык для МК
СообщениеДобавлено: 31 мар 2016, 02:30 
Старожил

Зарегистрирован: 28 дек 2012, 07:17
Сообщения: 517
vt340 писал(а):
Я бы вместо байткода, кодогенератора в байткод на компе и интерпретатора в мк использовал просто нативный ассемблер и кодогенератор в ассемблер.
Ну а кодогенератор как раз был бы на скриптовом языке

Для себя - да. А если отдавать пользователю, то слишком небезопасно. Пользовательские программы должны выполняться в отдельной безопасной песочнице.
Меня как то приглашали помочь в составлении программы электроавтоматики для отечественной системы ЧПУ. Там пользовательский код переводился в асм х86 и имел полный доступ ко всем системным ресурсам. В результате система постоянно висла и сбрасывалась, от чего я и помогал народу :)
А вот правильный на мой взгляд вариант - это ЧПУ от балтсистем, где пользовательский код выполняется безопасно.
Общепринятым вариантом было написание пргорамм в логических выражениях, но мне было удобнее написать все в КА :) И как тут одним участником дискуссии принято уточнять - заработало все сразу и без ошибок :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: скриптовый язык для МК
СообщениеДобавлено: 31 мар 2016, 02:33 
Старожил
Аватара пользователя

Зарегистрирован: 03 сен 2010, 22:46
Сообщения: 6095
Откуда: Москва
Да, наверное. В принципе попытки делать самодельные ПЛК на основе МК предпринимаются постоянно, и часто неосознанно, но я не припоминаю чтобы это хоть раз дало заметный результат... а что касается конечных пользователей, то им чаще всего и ПЛК программировать нельзя давать. Максимум какие-то настройки делать.

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

А если задача в том, чтобы быстро менять поведение системы, то это решается обычным бутлоадером.

ХЗ, в общем.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: скриптовый язык для МК
СообщениеДобавлено: 31 мар 2016, 02:43 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5358
Black Warrior писал(а):
vt340 писал(а):
Я бы вместо байткода, кодогенератора в байткод на компе и интерпретатора в мк использовал просто нативный ассемблер и кодогенератор в ассемблер.
Ну а кодогенератор как раз был бы на скриптовом языке

Для себя - да. А если отдавать пользователю, то слишком небезопасно. Пользовательские программы должны выполняться в отдельной безопасной песочнице.
Меня как то приглашали помочь в составлении программы электроавтоматики для отечественной системы ЧПУ. Там пользовательский код переводился в асм х86 и имел полный доступ ко всем системным ресурсам. В результате система постоянно висла и сбрасывалась, от чего я и помогал народу :)
А вот правильный на мой взгляд вариант - это ЧПУ от балтсистем, где пользовательский код выполняется безопасно.
Общепринятым вариантом было написание пргорамм в логических выражениях, но мне было удобнее написать все в КА :) И как тут одним участником дискуссии принято уточнять - заработало все сразу и без ошибок :)

В таких случаях разработчик не прямой доступ для заливки в устройство дает, а из своей среды, которая и должна заботиться о том, что то, что заливается не нарушит целостности. Такой SDK


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: скриптовый язык для МК
СообщениеДобавлено: 31 мар 2016, 08:41 
Старожил

Зарегистрирован: 27 мар 2015, 01:22
Сообщения: 1953
Black Warrior, про шитый код почитайте, ТС вроде в курсе )

_________________
mcu.goodboard.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: скриптовый язык для МК
СообщениеДобавлено: 31 мар 2016, 10:20 
Старожил

Зарегистрирован: 30 апр 2010, 22:56
Сообщения: 1589
Откуда: Киев
Отвечу всем сразу.

Есть устройство и беспроводный канал связи с ПК. Все в лучших традициях IoT :)
Устройства управляются через ПК, процесс зависит от многих факторов, в том числе получаемых из БД. То есть целиком алгоритм в МК не влезет, чтобы совсем автономное устройство получилось. Ну, по крайней мере, не на момент отладки.

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

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

vt340 писал(а):
Я бы вместо байткода, кодогенератора в байткод на компе и интерпретатора в мк использовал просто нативный ассемблер и кодогенератор в ассемблер.
Ну а кодогенератор как раз был бы на скриптовом языке

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

axill писал(а):
Пишите интерпретатор этих бинарных структур

"Ребята, вы меня ерундой не грузите. Я стратегией занимаюсь." (с) Мудрый Филин
Так я вопрос и задал - посоветуйте скрипт/виртуальную машину, которая влезет в целевой МК. Как там представить КА, я уже представляю.

axill писал(а):
С такими ресурсами об интерпретаторе скриптов в их прямом понимании надо забыть

Форт уже влез. В моей реализации "влоб". Так что не верю.
Повторяюсь - мне не надо "интерпретатор конкретного языка со всеми его плюшками". Вон даже питон или луа есть для мк. Мне нужно минимально жрущий ресурсы, пусть даже ценой "птичьего языка" типа форта.

axill писал(а):
Почему такое неприятие заливки прошивки?) у stm32 для этого все есть.

МК за беспроводным мостом UART. Обновление прошивки - это как минимум бутлоадер и наличие возможности удаленного резета.

axill писал(а):
То, что описал ТС - КА и есть, причем простой.


Проблема не в том, что я не понимаю что такое КА и как его приготовить. Проблема в том, что все существующие реализации КА заточены на "скомпилировал-залил-и не трогай". Я хоть на SFC нарисую, не вопрос. Вопрос дальше - как представить actions и условия переходов в виде некоторого "скрипта" (бинарника, байткода), чтобы его можо было залить в усройство и выполнить.
Делать полноценный лексический анализатор? Какого языка? А может язык упростить и упростить анализатор? И т.д.
Если с actions проблем мало - включить или выключить gpio, то условия могут быть развесистыми. Хотя...

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: скриптовый язык для МК
СообщениеДобавлено: 31 мар 2016, 11:19 
Старожил

Зарегистрирован: 27 мар 2015, 01:22
Сообщения: 1953
Steel.ne, так только кусочек программы в шитом коде подгружать в ram, кусочек с логикой, а основная нормальная программа всегда намертво во флэше, она и связь поддерживает, из неё и ф-ции берутся, риска никакого, просто отресетится в случае чего либо по таймеру, либо по хардфолту )

_________________
mcu.goodboard.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: скриптовый язык для МК
СообщениеДобавлено: 31 мар 2016, 11:33 
Старожил
Аватара пользователя

Зарегистрирован: 06 ноя 2013, 16:07
Сообщения: 711
Откуда: Германия
На Хабре когда-то была статья, где эмулировали MSP430 на STM32 (если правильно помню). Автор, похоже, сделал это от скуки, толком не поминая область применения. Но, возможно, подойдет в этом случае. Т.е. пишем на C, компилируем для MSP430 и заливаем в эмулятор.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: скриптовый язык для МК
СообщениеДобавлено: 31 мар 2016, 11:46 
Старожил

Зарегистрирован: 30 апр 2010, 22:56
Сообщения: 1589
Откуда: Киев
vt340 писал(а):
Steel.ne, так только кусочек программы в шитом коде подгружать в ram, кусочек с логикой, а основная нормальная программа всегда намертво во флэше, она и связь поддерживает, из неё и ф-ции берутся, риска никакого, просто отресетится в случае чего либо по таймеру, либо по хардфолту )


Сейчас это работает и называется "форт" ))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: скриптовый язык для МК
СообщениеДобавлено: 31 мар 2016, 11:53 
Старожил

Зарегистрирован: 27 мар 2015, 01:22
Сообщения: 1953
Так а ничего другого и не изобрести с такой мизерной памятью и дохлым процем, только какой-то свой упрощённый спец-форт, а то настоящий то форт слишком уж сильно мозги выворачивает )

_________________
mcu.goodboard.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: скриптовый язык для МК
СообщениеДобавлено: 31 мар 2016, 11:54 
Старожил
Аватара пользователя

Зарегистрирован: 03 сен 2010, 22:46
Сообщения: 6095
Откуда: Москва
То ли я тупой, то ли вы и сами не понимаете. Скрипт зачем? Какую конкретно проблему вы пытаетесь решить, применив скриптовый язык? Безопасности выполнения кода? Простоты загрузки OTA? Простоты генерации кода? Или может быть чего-то еще?

Мне почему-то кажется, что вы ищете проблем на ровном месте, хотя может я и неправ. По моему, достаточно просто реализовать хорошую загрузку OTA. У меня так работают системы с тысячами контроллеров, причем гораздо более сложных, и чаще всего составных. И ничего. При том что прошивки иногда меняются по несколько раз в день.

Если КА построены правильно, то действия всегда одинаковые, они завязаны на ту часть вашей системы, которая всегда неизменна. События тоже как правило не меняются, хотя никакой проблемы в их изменениях нет. Меняются состояния и переходы. Ну и бывает так, что присутствуют переменные и условия, набор которых тоже может меняться. Чаще всего условия крайне простые. Есть шанс что в рамках конкретной системы они вообще выродятся во что-то примитивное.

В регуляторах же меняются только коэффициенты. Это в самом худшем случае небольшая табличка.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: скриптовый язык для МК
СообщениеДобавлено: 31 мар 2016, 12:02 
Старожил

Зарегистрирован: 27 мар 2015, 01:22
Сообщения: 1953
akatenev, зачем делают DSL знаете? Вот это оно и есть )

_________________
mcu.goodboard.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: скриптовый язык для МК
СообщениеДобавлено: 31 мар 2016, 12:10 
Старожил
Аватара пользователя

Зарегистрирован: 03 сен 2010, 22:46
Сообщения: 6095
Откуда: Москва
И это еще совершенно не означает, что оно для чего-то тут нужно. Во всяком случае задача не выглядит требующей DSL.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: скриптовый язык для МК
СообщениеДобавлено: 31 мар 2016, 12:17 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2880
А грузить исполняемый участок кода в RAM никак нельзя, по тому же UART? Или скрипт объемом поменьше будет? Все операции никак не залезут во FLASH, чтобы потом только кидать команду типа - сделай подогрев с такими-то параметрами? Можно даже перезапись контроллера сделать по UART, не используя штатный бутлоадер. Функция, которая будет перезаписывать флеш переносится в RAM. По UART принимаем новую прошивку, которую функция складывает в свободный флеш. Затем перетирает новой прошивкой старую прошивку, и ресетит контроллер. Разве что расход флеша увеличится вдвое, но такое вполне работает, причем новую прошивку можно получать по любому каналу данных, от UART до Ethernet.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: скриптовый язык для МК
СообщениеДобавлено: 31 мар 2016, 12:54 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5358
Hold писал(а):
А грузить исполняемый участок кода в RAM никак нельзя, по тому же UART? Или скрипт объемом поменьше будет? Все операции никак не залезут во FLASH, чтобы потом только кидать команду типа - сделай подогрев с такими-то параметрами? Можно даже перезапись контроллера сделать по UART, не используя штатный бутлоадер. Функция, которая будет перезаписывать флеш переносится в RAM. По UART принимаем новую прошивку, которую функция складывает в свободный флеш. Затем перетирает новой прошивкой старую прошивку, и ресетит контроллер. Разве что расход флеша увеличится вдвое, но такое вполне работает, причем новую прошивку можно получать по любому каналу данных, от UART до Ethernet.

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: скриптовый язык для МК
СообщениеДобавлено: 31 мар 2016, 13:04 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2880
В процессе приема мы грузим прошивку в нерабочую область флеша, с помощью функции, которая висит в RAM, потом проверяем контрольные суммы, и только после этого переписываем родную прошивку. Если прошивка придет битая - можем еще раз её запросить.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 93 ]  На страницу 1, 2, 3, 4  След.


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

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