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

 
 
> Скрипты в микроконтроллере
uriy
сообщение Jan 13 2016, 14:35
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Имеется плата с STM32.
На плате есть несколько дискретных и аналоговых входов.
Есть дискретные выходы и выходы с ШИМ. И есть CAN.
Нужна возможность управления всем этим с помощью скриптов в контроллере.
Как принято делать такие вещи? Держать в контроллере какой-то интерпретатор или заливать туда предварительно скомпиленный код?
Из необходимых функций это логические операции с дискретными входами и арифметические с аналоговыми.
Временные задержки. Прием и выдача данных через CAN.

Go to the top of the page
 
+Quote Post
3 страниц V   1 2 3 >  
Start new topic
Ответов (1 - 32)
Огурцов
сообщение Jan 13 2016, 15:14
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



попробуйте дотнет микрофреймворк
там уже и дисплеи наверно прикрутили
Go to the top of the page
 
+Quote Post
x893
сообщение Jan 13 2016, 15:40
Сообщение #3


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

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



.NET microframework
MicroPython
Espruino (javascript)
picoC
Go to the top of the page
 
+Quote Post
SSerge
сообщение Jan 13 2016, 16:24
Сообщение #4


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

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Python
http://micropython.org
https://code.google.com/p/python-on-a-chip/
tcl
http://wiki.tcl.tk/17893


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
_pv
сообщение Jan 13 2016, 16:52
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



до кучи еще pawn и lua (жирновата правда немного для STM32, особенно если это какой-нибудь F0/F1 )

а еще сюда сейчас любители FORTа набегут sm.gif
Go to the top of the page
 
+Quote Post
uriy
сообщение Jan 13 2016, 18:05
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



ок спасибо за ссылки буду изучать. Контроллер STM32F103VBT6 128 кбайт флеша.
Go to the top of the page
 
+Quote Post
arhiv6
сообщение Jan 13 2016, 19:33
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 633
Регистрация: 21-05-10
Из: Томск
Пользователь №: 57 423



А ещё есть интерпретатор Си (picoC) - пример.
Если скрипты совсем простые (проигрывание последовательности команд, например), можно виртуальную машину использовать - пример.


--------------------
Go to the top of the page
 
+Quote Post
Kopa
сообщение Jan 13 2016, 21:55
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 598
Регистрация: 22-08-05
Пользователь №: 7 861



Цитата(_pv @ Jan 13 2016, 19:52) *
а еще сюда сейчас любители FORTа набегут sm.gif

+1
Go to the top of the page
 
+Quote Post
smalcom
сообщение Jan 13 2016, 22:12
Сообщение #9


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

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



Цитата
Нужна возможность управления всем этим с помощью скриптов в контроллере.

а точно скрипты нужны? может у вас простая выполнялка команд?
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jan 13 2016, 22:29
Сообщение #10


Ally
******

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



Цитата(Огурцов @ Jan 13 2016, 17:14) *
попробуйте дотнет микрофреймворк
там уже и дисплеи наверно прикрутили


Да .Net MF сильная штука. Единственная из всего названного которую можно по честному отлаживать на целевой платформе .
Вот тут мы ее билдили - http://geektimes.ru/post/266612/

Но процесс очень запутанный. Скрипты сборки это нечто.
Сборка длительная.
128 Кб там впритык. Но правда туда уже входит TCP стек и прочие удовольствия.
Меандр на плате Discovery генерирует 40 КГц
Программы пишутся и отлаживаются на C# в бесплатном Visual Studio 2015

Короче, нужны ресурсы чуток побольше и .Net MF нет альтернатив.

Go to the top of the page
 
+Quote Post
Kopa
сообщение Jan 13 2016, 22:58
Сообщение #11


Знающий
****

Группа: Участник
Сообщений: 598
Регистрация: 22-08-05
Пользователь №: 7 861



Цитата(AlexandrY @ Jan 14 2016, 01:29) *
Короче, нужны ресурсы чуток побольше и .Net MF нет альтернатив.

Цитаты по ссылке приведённой статьи.
Код
Бинарник CLR от GCC — 316 кб. От RealView — 297 кб. 64 Kb of RAM

Код
Я думаю стоит ориентироваться на то, что .Net Micro Framework работает на 2-3 порядка медленнее, в зависимости от оптимизации. Но он и не ориентирован на вычисления.


P.S. А я то думал Форт прожорлив с его типичными 8-16-32Кб вариантами FVM, хотя и не предел sm.gif

Сообщение отредактировал Kopa - Jan 13 2016, 23:02
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Jan 13 2016, 23:47
Сообщение #12


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(AlexandrY @ Jan 13 2016, 23:29) *
чуток побольше

года три уже назад, на четвертой дискавери работало, а теперь как минимум два новых
камня вышло - должна быть просто фантастикой

Цитата(Kopa @ Jan 13 2016, 23:58) *
Цитаты

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

Сообщение отредактировал Огурцов - Jan 13 2016, 23:49
Go to the top of the page
 
+Quote Post
Kabdim
сообщение Jan 14 2016, 00:24
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



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

Сообщение отредактировал Kabdim - Jan 14 2016, 01:05
Go to the top of the page
 
+Quote Post
Kopa
сообщение Jan 14 2016, 01:19
Сообщение #14


Знающий
****

Группа: Участник
Сообщений: 598
Регистрация: 22-08-05
Пользователь №: 7 861



Цитата(Огурцов @ Jan 14 2016, 02:47) *
ну пусть даже в десять раз, где-то на вызовах фреймворка, но сам фреймворк как либа , т.е. основное время, оптимален

Вам не хватает библиотек уже существующих в С, С++ ?
Не думаю, что задачи использования С# ограничятся конфигурированием периферийных модулей и несложного использования библиотечных модулей.

Цитата(Огурцов @ Jan 14 2016, 02:47) *
минус в том, что он таки микрофреймворк, т.е. не хватает тех двадцати мегабайт, чтобы десктопные программы шли без какого-либо перепиливания
но это как раз не за горами

На контроллер перекладывать задачи решаемые в рамках компьютера?
Не проще ли тогда взять платы "компьютеров" в одноплатном формате для встраивания в оборудование?

P.S. Ещё ждём когда контроллеры широко будут программироваться на Java? smile3046.gif
Может, действительно, ТС попробовать Lua для скриптования как выше советовали?

Сообщение отредактировал Kopa - Jan 14 2016, 01:24
Go to the top of the page
 
+Quote Post
x893
сообщение Jan 14 2016, 02:23
Сообщение #15


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

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Да не проблема выкинуть лишнее из всех скриптовых интерпритаторов. Коды все есть.
И добавить нужных можно - что бы были прямо в нативном коде.
А скрипт использовать только для задания алгоритма.
Хотя все это баловство со скриптами.
Так - побаловаться и бросить.
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Jan 14 2016, 10:50
Сообщение #16


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



совсем не
прошивку можно зишифровать, а скрипты отдать на откуп юзеру
представляете, если скрипт будет не в кракозябрах, а на нормальном широко распространенном языке с мощной отладкой на пк ?
еще вариант - рисование графических диаграмм алгоритмов или рабочих процессов на пк, а затем их выполнение на мк
тоже ресурсов надо крохи
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jan 14 2016, 17:09
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Огурцов @ Jan 14 2016, 13:50) *
прошивку можно зишифровать, а скрипты отдать на откуп юзеру

Если юзер будет знать, что делают заскриптованные операции, то реверс будет очень прост.
А юзер должен знать это, чтобы пользоваться "откупом".


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Jan 14 2016, 18:14
Сообщение #18


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



реверс чего ? скрипты и так у юзера, открытые, это как вершина айсберга
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jan 14 2016, 18:18
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Огурцов @ Jan 14 2016, 21:14) *
реверс чего ?

Реверс прошивки, выполняющей скрипты.
Ну если Вы отдаете открытые скрипты юзеру, то он должен знать, как работают операторы скрипта.
То есть прошивку он повторит исходя из этого знания.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Jan 14 2016, 19:02
Сообщение #20


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



ну давайте я вам дам какую-то мою программу на c#, сделайте мне по ней реверс дотнетфреймворка ?
да еще так, чтобы другая еще неведомая программа на шарпе тоже работала под вашим реверсом

Сообщение отредактировал Огурцов - Jan 14 2016, 19:03
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jan 14 2016, 19:44
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Огурцов @ Jan 14 2016, 13:50) *
выполнение на мк тоже ресурсов надо крохи

Цитата(Огурцов @ Jan 14 2016, 22:02) *
сделайте мне по ней реверс дотнетфреймворка ?

Вы уж определитесь про что Вы говорите.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Jan 14 2016, 22:27
Сообщение #22


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



я не терял нить рассуждения, в отличие от - про скрипты
скрипты, шарп и воркфлоу по выполнению, как и размеру, суть одного и тогоже порядка
а вот софт, под которым они выполняются на порядки монструознее
Go to the top of the page
 
+Quote Post
uriy
сообщение Jan 31 2016, 18:07
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Решил использовать pawn.
Может быть у кого-нибудь уже есть реализация для keil.
У меня осталась одна ошибка при компиляции и я застрял на:
Error: L6218E: Undefined symbol amx_Register (referred from amxfuncs.o).
amx_Register определен в amx.c в хидере есть прототип, но до него столько ifdef что я теряюсь
Go to the top of the page
 
+Quote Post
shreck
сообщение Feb 1 2016, 04:33
Сообщение #24


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Цитата(uriy @ Feb 1 2016, 00:07) *
Решил использовать pawn.
Может быть у кого-нибудь уже есть реализация для keil.
У меня осталась одна ошибка при компиляции и я застрял на:
Error: L6218E: Undefined symbol amx_Register (referred from amxfuncs.o).
amx_Register определен в amx.c в хидере есть прототип, но до него столько ifdef что я теряюсь

У меня работает этот набор файлов. Пробуйте.
Прикрепленные файлы
Прикрепленный файл  pawn.zip ( 28.18 килобайт ) Кол-во скачиваний: 35
 
Go to the top of the page
 
+Quote Post
uriy
сообщение Feb 1 2016, 14:43
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Спасибо! А можно еще ваш файл amxexec_thumb2.s?
Теперь другая функция дважды определена Error: L6200E: Symbol amx_exec_list multiply defined (by amxexec_thumb2.o and amx.o).

Можете мне еще пояснить можно ли каким то образом распаралелить выполнение скрипта и основной программы MCU?
Я планировал собирать данные с АЦП по DMA и усреднять их, только потом использовать эти значения в скрипте.
Go to the top of the page
 
+Quote Post
shreck
сообщение Feb 2 2016, 03:19
Сообщение #26


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Цитата(uriy @ Feb 1 2016, 20:43) *
Спасибо! А можно еще ваш файл amxexec_thumb2.s?
Теперь другая функция дважды определена Error: L6200E: Symbol amx_exec_list multiply defined (by amxexec_thumb2.o and amx.o).

Файл amx.c сдержит реализацию виртуальной машины на переносимом С.
amxexec_thumb2.s содержит оптимизированную реализацию виртуальной машины на асме.
Их не получится скомпилировать вместе в одном проекте. Выбирайте что-то одно.

Цитата
Можете мне еще пояснить можно ли каким то образом распаралелить выполнение скрипта и основной программы MCU?
Я планировал собирать данные с АЦП по DMA и усреднять их, только потом использовать эти значения в скрипте.

Распараллелить? Я использую ось. Соответственно есть набор потоков, в одном из которых крутится виртуальная машина.
Если без оси, то прерывания + debug hook для виртуальной машины. Как то так, наверное.


P.S. Не пренебрегайте документацией. Pawn_Implementer_Guide.pdf + Pawn_Language_Guide.pdf способны ответить на все ваши вопросы.
Go to the top of the page
 
+Quote Post
uriy
сообщение Feb 2 2016, 05:29
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Я начал вот с этой статьи http://we.easyelectronics.ru/STM32/prikruc...ok-k-stm32.html
Там часть функций на асме часть на си.
Я уже на горячую голову переделал amxexec_thumb2.s чтобы компилился под keil.
Мне даже в голову вот это не пришло: "Файл amx.c сдержит реализацию виртуальной машины на переносимом С.
amxexec_thumb2.s содержит оптимизированную реализацию виртуальной машины на асме.
"
Осями пользуюсь, но забыл уточнить что в этом проекте ось не планируется.
Тут будет на автоматах.

Цитата
P.S. Не пренебрегайте документацией. Pawn_Implementer_Guide.pdf + Pawn_Language_Guide.pdf способны ответить на все ваши вопросы.
Да читать надо, но как всегда некогда пилу точить надо лес валить.
Go to the top of the page
 
+Quote Post
shreck
сообщение Feb 2 2016, 05:48
Сообщение #28


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Цитата(uriy @ Feb 2 2016, 11:29) *
Да читать надо, но как всегда некогда пилу точить надо лес валить.

"Лучше день потерять, а потом за пять минуть долететь" sm.gif
Go to the top of the page
 
+Quote Post
uriy
сообщение Feb 15 2016, 09:09
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Прочитал implementers guide и language guide так и не понял как обращаться к железу из скрипта.
Похоже придется еще раз читать...
Мне нужно принимать и отправлять данные через CAN, анализировать цифровые и аналоговые входы, управлять ШИМ.
На прием данных идеально ложаться ивенты.
Но как сделать чтобы основная программа в контроллере вызывала эти ивенты в скрипте?
И как обратиться из скрипта к функциям в основной программе, чтобы например запустить ШИМ?
Public functions это какраз те функции что доступны скрипту и основной программе или нет?
Go to the top of the page
 
+Quote Post
shreck
сообщение Feb 15 2016, 10:13
Сообщение #30


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Цитата(uriy @ Feb 15 2016, 15:09) *
Прочитал implementers guide и language guide так и не понял как обращаться к железу из скрипта.
Похоже придется еще раз читать...
Мне нужно принимать и отправлять данные через CAN, анализировать цифровые и аналоговые входы, управлять ШИМ.
На прием данных идеально ложаться ивенты.
Но как сделать чтобы основная программа в контроллере вызывала эти ивенты в скрипте?
И как обратиться из скрипта к функциям в основной программе, чтобы например запустить ШИМ?
Public functions это какраз те функции что доступны скрипту и основной программе или нет?

Implementers guide, Extension modules, p.49:
Цитата
An extension module provides a pawn program with application-specific (“na-
tive”) functions. An native function is a function that is implemented in the host
application (as opposed to being implemented in the pawn script) and it is typi-
cally implemented in a different programming language. Creating an extension
module is a three-step process:
1 writing the native functions (in C);
2 making the functions known to the abstract machine;
3 writing an include file that declares the native functions for the pawn pro-
grams.

Ну и дальше углубляетесь.

По event driven технике ничего подсказать не могу, т.к. не пользую.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Feb 17 2016, 15:53
Сообщение #31


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(shreck @ Feb 2 2016, 09:19) *
Файл amx.c сдержит реализацию виртуальной машины на переносимом С.
amxexec_thumb2.s содержит оптимизированную реализацию виртуальной машины на асме.
Их не получится скомпилировать вместе в одном проекте. Выбирайте что-то одно.

странно. а у меня скомпилировалось.
Go to the top of the page
 
+Quote Post
uriy
сообщение Apr 3 2016, 15:13
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Наконец-то добрались руки до реализации.
Накидал такой скрипт
Код
#pragma dynamic 100

native GreenLed(NewValue)
native SetPWM(NewPWM);
native BlueLed(NewValue);
native IsKeyPressed();

main()
{
   GreenLed(0);
   BlueLed(1);

   for(;;)
   {
           if(IsKeyPressed())
        {
            GreenLed(1);
             BlueLed(1);
        }
        else
        {
            GreenLed(0);
               BlueLed(0);
        }
   }
}

Функции GreenLed(NewValue) и BlueLed(NewValue) отлично работают.
Не могу понять как передать данные в скрипт из железки.
Как например считать нажатие кнопки IsKeyPressed?

В железке функция выглядит так
Код
cell IsKeyPressed(AMX *amx, const cell *params)
{
    cell ret = 0;
    if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) != GPIO_PIN_RESET)
        ret = 1;
    return ret;
}

Скрипт вызывает эту функцию и ret корректно изменяется.
Go to the top of the page
 
+Quote Post
shreck
сообщение Apr 4 2016, 09:24
Сообщение #33


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Цитата(uriy @ Apr 3 2016, 21:13) *
...
Функции GreenLed(NewValue) и BlueLed(NewValue) отлично работают.
Не могу понять как передать данные в скрипт из железки.
Как например считать нажатие кнопки IsKeyPressed?

В железке функция выглядит так
Код
cell IsKeyPressed(AMX *amx, const cell *params)
{
    cell ret = 0;
    if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) != GPIO_PIN_RESET)
        ret = 1;
    return ret;
}

Скрипт вызывает эту функцию и ret корректно изменяется.


Да вроде все правильно сделали. Если native функция должна вернуть единственное значение, которое умещается в размер cell, то просто возвращаете его: return 'значение'.
Если надо вернуть много значений, то возвращаете их через ссылочные параметры функции. Например, вот функция, возвращающая массив значений:
Код
native get_tempcoef(Float:coef[6]);

и ее C-реализация:
Код
cell AMX_NATIVE_CALL n_gettempcoef(AMX * amx, const cell* params)
{
    static const float foo[6] = { bla-bla };
    // Получаем адрес массива coef:
    cell* dst = amx_Address(amx, params[1]);
    // и заполняем его значениями.
    for (uint32_t i = 0; i < 6; ++i)
    {
        float t = foo[i];
        dst[i] = amx_ftoc(t);
    }
    return 0;
}

Go to the top of the page
 
+Quote Post

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

 


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


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