Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/127: Рейтинг темы: голосов - 127, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 1,445

скриптовый язык для МК

29.03.2016, 22:41. Показов 26466. Ответов 92
Метки нет (Все метки)

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

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

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

Сейчас впихнул форт, вроде завелся. Но терзают смутные сомнения, что есть еще варианты.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.03.2016, 22:41
Ответы с готовыми решениями:

Посоветуйте скриптовый язык для всякой повседневной мелочи
Здравствуйте! Нужен язык для автоматизации всякой рутинной и неинтересной работы. Я на некоторое время пересел на Windows (заинтересовался...

Лисп как скриптовый язык для автоматизации насущных процессов
Здравствуйте! Уважаемые коллеги, я тут задумался об автоматизации процессов на компьютере. Обычно для этого используют Баш и Питон....

Скриптовый язык
Добрый день почему python скриптовый язык?

92
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
30.03.2016, 11:15
Студворк — интернет-сервис помощи студентам
okotimiv, зачем делают DSL знаете? Вот это оно и есть )
0
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,379
30.03.2016, 11:23
И это еще совершенно не означает, что оно для чего-то тут нужно. Во всяком случае задача не выглядит требующей DSL.
0
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 2,048
30.03.2016, 11:30
А грузить исполняемый участок кода в ROM никак нельзя, по тому же UART? Или скрипт объемом поменьше будет? Все операции никак не залезут во FLASH, чтобы потом только кидать команду типа - сделай подогрев с такими-то параметрами? Можно даже перезапись контроллера сделать по UART, не используя штатный бутлоадер. Функция, которая будет перезаписывать флеш переносится в ROM. По UART принимаем новую прошивку, которую функция складывает в свободный флеш. Затем перетирает новой прошивкой старую прошивку, и ресетит контроллер. Разве что расход флеша увеличится вдвое, но такое вполне работает, причем новую прошивку можно получать по любому каналу данных, от UART до Ethernet.
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
30.03.2016, 12:07
Цитата Сообщение от Hotd
А грузить исполняемый участок кода в ROM никак нельзя, по тому же UART? Или скрипт объемом поменьше будет? Все операции никак не залезут во FLASH, чтобы потом только кидать команду типа - сделай подогрев с такими-то параметрами? Можно даже перезапись контроллера сделать по UART, не используя штатный бутлоадер. Функция, которая будет перезаписывать флеш переносится в ROM. По UART принимаем новую прошивку, которую функция складывает в свободный флеш. Затем перетирает новой прошивкой старую прошивку, и ресетит контроллер. Разве что расход флеша увеличится вдвое, но такое вполне работает, причем новую прошивку можно получать по любому каналу данных, от UART до Ethernet.
это будет алгоритм без права на ошибку. любой сбой в процессе приема и вуаля - флэш уже испорчен, а в раме лишь маленький кусочек кода (4к рам против 16к флэш)
и усе, гарантийный случай с ремонтом у производителя

а вот идея грузить бинарный машинный код в рам с тем, чтобы гарантированно не попортить флэш - по моему вполне вариант
но опять же, если речь идет о независимости от средств компиляции (предполагаю, что это одна из задач ТС) то не вариант
0
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 2,048
30.03.2016, 12:17
В процессе приема мы грузим прошивку в нерабочую область флеша, с помощью функции, которая висит в ROM, потом проверяем контрольные суммы, и только после этого переписываем родную прошивку. Если прошивка придет битая - можем еще раз её запросить.
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
30.03.2016, 12:20
Цитата Сообщение от Hotd
В процессе приема мы грузим прошивку в нерабочую область флеша, с помощью функции, которая висит в ROM, потом проверяем контрольные суммы, и только после этого переписываем родную прошивку. Если прошивка придет битая - можем еще раз её запросить.
под двойным расходом флэш подразумевалось, что основная прошивка должна быть не более 8к, а 8к надо держать свободными как буфер?
аа я тогда это не уловил с первого прочтения
0
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
30.03.2016, 12:59
http://dunkels.com/adam/ubasic/ или http://www.stroustrup.com/dc.c вполне можно допилить до нужного состояния очень простеньекого интерпретатора с минимальным потреблением памяти.
0
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,379
30.03.2016, 13:02
С бутлоадерами OTA все гораздо проще, чем вам кажется.

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

Если что-то произойдет в процессе загрузки, она просто повторяется, потому что с бутлоадером при этом ничего не происходит. Восстанавливаете канал, и прошиваете заново.

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

У меня таким образом работают реально большие и сложные системы, эта часть не создает никаких проблем.
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
30.03.2016, 13:11
Ну, ну - вызов бутлоадера из приложения!
Неудачно прошились - не запустится приложение, прощай бутлоадер...

Бутлодер должен всегда запускаться первым!
При запуске проверяем некое условие и принимаем решение - запускать приложение или перепрошивать.
0
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 1,445
30.03.2016, 13:13
Цитата Сообщение от okotimiv
С бутлоадерами OTA все гораздо проще, чем вам кажется.
не спорю. Я умею бутлоадеры. Вариант рассматривался. Не нравятся две вещи:
1. на время обновления прошивки процесс нужно останавливать, выходы переводить в безопасное состояние
2. чтобы собрать прошивку, на компе надо иметь тулчейн. Кроссплатформенность, бла-бла.
0
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 1,445
30.03.2016, 13:15
Цитата Сообщение от Pymkvym
Ну, ну - вызов бутлоадера из приложения!
Неудачно прошились - не запустится приложение, прощай бутлоадер...
имеется в виду, что бутлоадер запускается при старте процессора, проверяет и запускает аппликуху. А вот в работающей аппликухе есть команда выхода в бутлоадер.
Если аппликуха поломана, то она не запустится.
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
30.03.2016, 13:15
Тоже озадачивался выполнение скриптов либо байт-кодов.
Тема интересная.
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
30.03.2016, 13:16
Цитата Сообщение от Stiit.mi
Цитата Сообщение от Pymkvym
Ну, ну - вызов бутлоадера из приложения!
Неудачно прошились - не запустится приложение, прощай бутлоадер...
имеется в виду, что бутлоадер запускается при старте процессора, проверяет и запускает аппликуху. А вот в работающей аппликухе есть команда выхода в бутлоадер.
Если аппликуха поломана, то она не запустится.
Не надежно, ИМХО - зависло приложение - и усё!
Не... пусть будет такой вариант, но полагаться на него на 100% нельзя.
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
30.03.2016, 13:19
Цитата Сообщение от okotimiv
С бутлоадерами OTA все гораздо проще, чем вам кажется.
а если все таки аккуратно складывать полную прошивку в буфер, там проверять и только после этого затирать приложение?
при этом складывать в буфер может само приложение используя более высокий уровень протокола, чем можно сделать на бутлоадере
даже если тот же физический интерфейс, хотя можно использовать и другой, более сложный (ethernet например)
и только после этого передавать управление бутлоадеру который буфер зашьем вместо приложения и запустит его

конечно это как писал выше Hotd - двойной расход флэш. Но затраты не существенные, или МК с двойным запасом или внешний флэш
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
30.03.2016, 13:21
Давайте не будем уводить в сторону - бутлоадеры я бы тоже обсудил с удовольствием, но тема другая.
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
30.03.2016, 13:23
Я склоняюсь к байт-коду.
То есть пишем некий "компилятор" который с "человеческого" языка формирует набор кодов.
А в прошивке работает switch/case - машина.
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
30.03.2016, 13:23
Цитата Сообщение от Stiit.mi
2. чтобы собрать прошивку, на компе надо иметь тулчейн. Кроссплатформенность, бла-бла.
мое предположение оправдалось)

зависит от емкости проекта. Для чего то значимого можно сделать свой компилятор из инструкций пользователя (смысловых, текстовых или графических) в машинный код МК
это по факту будет не компиляция а сборка (по сути линковщик) готовых бинарных процедур с данными и упаковка их в работающий код
не думаю, что это будет сильно сложнее чем делать свой байт код и к нему интерпретатор
минусом будет только непереносимость между разными МК
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
30.03.2016, 13:44
Ну парсить простые команды несложно.
Ресурсов даже у этого камня - хватит.
В том числе - с передаваемыми аргументами.

А вот как сделать условные/безусловные переходы (не линейное исполнение скрипта) или вызывать для выполнения другой скрипт - тут уже интересней.

С переменными опять же - как быть?
0
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 2
30.03.2016, 14:57
Использовать принцип программирования как в калькуляторах, типа МК-34/54. Там и ветвления и переменные и кодом ничего нельзя испортить. И реализуется просто. Только добавить команды специфичные работе устройства, вроде считать температуру, включить лампочку.
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
30.03.2016, 15:01
Цитата Сообщение от PRS
Использовать принцип программирования как в калькуляторах, типа МК-34/54. Там и ветвления и переменные и кодом ничего нельзя испортить. И реализуется просто. Только добавить команды специфичные работе устройства, вроде считать температуру, включить лампочку.
Кстати да, а для переменных использовать регистры общего назначения как X, Y в калькуляторах и стек LIFO
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.03.2016, 15:01
Помогаю со студенческими работами здесь

C# как скриптовый язык
Использовал пример с сайта https://habr.com/ru/post/170385/ Подскажите как можно выводить данные из скрипта ну или на крайняк скиньте...

Какой скриптовый язык лучше?
В общем решил озаботиться выбором скриптового языка, остановился на 3-х самых, пожалуй, известных: Lua, XML и JSON. Сейчас пойдут посты...

Использовать язык Go как скриптовый
Доброго времени суток. Меня интересует как обращаться к функциям и т.п. в Go из C++. Читал одну статейку, где человек использует lua как...

Скриптовый язык который можно встроить в C++
Здравствуйте! Я делаю некий проект на C++, и мне нужно туда добавить скрипты. Мне нужно что бы он был хотя бы немного си-подобным. ...

Может ли скриптовый язык быть объектно ориентированным?
Запутался: Скриптовый - какой-то там. Это классификация по какому признаку? Объектно-ориентированный - процедурный. Здесь какой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru