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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Матлаб и STM32
Allregia
сообщение Nov 22 2017, 12:25
Сообщение #1


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

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



Есть сделанные в Матлабе алгоритмы, как наиболее правильным образом (настройки и т.п.) сгенерировать Си код, для последующей компиляции Кейлом или ИАРом для STM32F4 и F7 ?
(у F4 флоат только сингл, у F7 и дабл).

Или может я не в тот раздел написал?
Go to the top of the page
 
+Quote Post
Grizzzly
сообщение Nov 22 2017, 13:38
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748



Цитата(Allregia @ Nov 22 2017, 15:25) *
Есть сделанные в Матлабе алгоритмы, как наиболее правильным образом (настройки и т.п.) сгенерировать Си код, для последующей компиляции Кейлом или ИАРом для STM32F4 и F7 ?
(у F4 флоат только сингл, у F7 и дабл).

Или может я не в тот раздел написал?

В MATLAB double нативный формат. Вы хотите, чтобы он заменил double на float при генерации из m-скрипта в сишный код? Я думаю, нужно явно в скрипте приводить переменные к float...
Раньше при кодогенерации MATLAB даже счетчики циклов в Си делал double. Вроде бы сейчас такого уже нет.

Оказалось, что можно более грамотно сделать: https://www.mathworks.com/help/fixedpoint/u...ion-c-code.html

Код
scfg = coder.config('single')
Go to the top of the page
 
+Quote Post
Allregia
сообщение Nov 22 2017, 23:02
Сообщение #3


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

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



Я не только формат float имел ввиду, а и вообще как все правильно сделать.
Go to the top of the page
 
+Quote Post
x893
сообщение Nov 22 2017, 23:42
Сообщение #4


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

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



Правильно посмотреть первые 4 ссылки в гугл.
Go to the top of the page
 
+Quote Post
Allregia
сообщение Nov 23 2017, 06:40
Сообщение #5


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

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



Во 1-х. сразу скажыу я этот вопрос задал по просьбе коллег, сам я с матлабом слабо дружу.
Во 2-х:
Я не смотрел сейчас, но на 100% уверен, что "первые 4 ссылки в Гугл", показывают на stm32-mat-target.
В документации к нему расписывется интеграция с Смулинком и Кубом, плюс отладка через jtag в железе.
Мы не используем Куб, программы для STM32 пишутся в IAR или Keil, а к ним пристыковываются исходники из-под матлаба.
Делают это Кодером, но есть мнение, что делаю это не правильно.
В настройках кодера есть target, и там стоит MS Visual C++ 64bit.
И мы вовсе не уверены, что сгенеренный для 64 бит Вижуала код, получается также хорош для 32-битного Кортекса, поотому и задал вопрос.
Go to the top of the page
 
+Quote Post
syoma
сообщение Nov 23 2017, 09:59
Сообщение #6


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

Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368



У вас MATLAB скрипты или алгоритмы разрисованы в Simulink или Stateflow?
Go to the top of the page
 
+Quote Post
jcxz
сообщение Nov 23 2017, 10:27
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Grizzzly @ Nov 22 2017, 15:38) *
В MATLAB double нативный формат. Вы хотите, чтобы он заменил double на float при генерации из m-скрипта в сишный код? Я думаю, нужно явно в скрипте приводить переменные к float...
Раньше при кодогенерации MATLAB даже счетчики циклов в Си делал double. Вроде бы сейчас такого уже нет.

Матлаб давным-давно умеет приводить свои результаты расчётов к float или целочисленным типам. Много лет назад когда я в симулинке считал фильтры, то сохранял их коэффициенты потом в целочисленке.
Вкладка делающая это называлась как-то типа: "Квантование". вроде.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Nov 23 2017, 10:31
Сообщение #8


Ally
******

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



Цитата(Allregia @ Nov 23 2017, 08:40) *
В настройках кодера есть target, и там стоит MS Visual C++ 64bit.
И мы вовсе не уверены, что сгенеренный для 64 бит Вижуала код, получается также хорош для 32-битного Кортекса, поотому и задал вопрос.

Похоже вы делаете также как и я.
Simulink когда генерит код рассчитывает на некий готовый фреймворк на платформе.
А мне такое не нужно. Поэтому генерю весь пакет файлов, но беру от туда только главный код и h-файл с объявлением типов.
Компиляцией в самом Matlab не пользуюсь. Поэтому параметры касающиеся toolchain не имеют значения.
Правда приходится править интерфейсы функций и передачу аргументов для совместимости с моим фреймворком.
Иногда чтобы подстроить модель под мой стиль передачи параметров приходится переусложнять модель в Simulink.
Короче разработка итерационная: строю модель, генерю код, смотрю как вышло, если не нравится переделываю модель чтоб сгенерила по другому.

У меня такие настройки для code generation:
Прикрепленное изображение

Прикрепленное изображение


Сгенерированный код отлично работает под Cortex-M4. Проверено многократно. Хорошо оптимизируется.
Варианты double от float отличается только тем, что в последнем идут суффиксы f у всех чисел с плавающей точкой.

Если проектируете фильтры, то Matlab покажет как различаются характеристики после усечения точности.
Но не гарантирует, что фильтр построенный в Simulink бедет работать правильно. Надо все перепроверять там же.
Перевод модели из нативного double в урезанный float без потери стабильности всегда ручная и сложная работа.
Go to the top of the page
 
+Quote Post
Grizzzly
сообщение Nov 23 2017, 17:22
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748



Цитата(jcxz @ Nov 23 2017, 13:27) *
Матлаб давным-давно умеет приводить свои результаты расчётов к float или целочисленным типам. Много лет назад когда я в симулинке считал фильтры, то сохранял их коэффициенты потом в целочисленке.
Вкладка делающая это называлась как-то типа: "Квантование". вроде.

Это всегда так было. А вот с генерацией сишного кода раньше были странности.
Go to the top of the page
 
+Quote Post
syoma
сообщение Nov 24 2017, 08:50
Сообщение #10


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

Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368



Цитата
Правда приходится править интерфейсы функций и передачу аргументов для совместимости с моим фреймворком.
Иногда чтобы подстроить модель под мой стиль передачи параметров приходится переусложнять модель в Simulink.

Раз уж пошла такая пьянка, не поделимся опытом, кто как вводит/выводит сигналы из Симулинка?
Лично я не использую I/O порты, а определяю нужные сигналы как ImportedGlobal. Тогда Матлаб их определяет как external и их можно задекларировать в любом куске программы.

Цитата
Короче разработка итерационная: строю модель, генерю код, смотрю как вышло, если не нравится переделываю модель чтоб сгенерила по другому.

Моделирование забыли. Я смотрю, как оно работает в модели и генерю код, только когда полностью доволен поведением. Тогда проверка в железе чисто формальная. Модели для моделирования и генерации кода - разные. В первой контроллер подключен к Test Harness, которая состоит из эмулятора контролируемого процесса и собственно GUI - ну там кнопочки понажимать, симитировать аварийные ситуации. Вторая модель - чисто для генерации кода - там та же модель контроллера подключена к I/O сигналам. Также в некоторых случаях вызываю свои Legacy Cи функции - Matlab их тогда просто вставляет в код.

Вот что хотел бы как-нибудь запустить на своем ARMe - так это External Mode. Чтобы наблюдать внутренности модели, когда она работает в реальном времени на железяки.
Go to the top of the page
 
+Quote Post
Allregia
сообщение Nov 24 2017, 12:46
Сообщение #11


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

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



Цитата(syoma @ Nov 23 2017, 10:59) *
У вас MATLAB скрипты или алгоритмы разрисованы в Simulink или Stateflow?


Скрипты.
Симулинком не пользуются.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Nov 24 2017, 15:37
Сообщение #12


Ally
******

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



Цитата(Allregia @ Nov 24 2017, 14:46) *
Скрипты.
Симулинком не пользуются.

В матлабе есть подробная инструкция как генерировать C-и файлы из m файлов.
Их нее следует, что все типы назначаются руками.
А если не объявлены, то их надо объявить.
Волшебного превращения алгоритмов из double во float не происходит.
Сгенерит-то сгенерит с другими типами, но сходимость алгоритма после этого матлаб никому не обещает.
Надо запускать отладку и перепроверять весь алгоритм сверху до низу.
Кстати я сравнивал результаты алгоритмов управления в float point в Simulink и сгенерированный им проект для Cortex-M4 по одной и той же выборке реальных данных (1000 отсчетов).
И они совпали только до 4-5-го знака.
Т.е. стандарт float point по умолчанию у сопроцессора Cortex не совпадает с Matlab-овским в какой-то мелочи.

Цитата(syoma @ Nov 24 2017, 10:50) *
Вот что хотел бы как-нибудь запустить на своем ARMe - так это External Mode. Чтобы наблюдать внутренности модели, когда она работает в реальном времени на железяки.

На Cortex-M3..7 совершенно не реально.
А вот в LabVIEW я видел специальный стек протоколов отладочного движка специально под RTOS RTX от Keil-а .
Go to the top of the page
 
+Quote Post
syoma
сообщение Nov 24 2017, 17:40
Сообщение #13


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

Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368



Цитата
На Cortex-M3..7 совершенно не реально.

Дык вроде как в примерах для Discovery такое присутствует. Надо только разобраться...
Go to the top of the page
 
+Quote Post
Grizzzly
сообщение Nov 24 2017, 19:35
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748



Цитата(AlexandrY @ Nov 24 2017, 18:37) *
И они совпали только до 4-5-го знака.
Т.е. стандарт float point по умолчанию у сопроцессора Cortex не совпадает с Matlab-овским в какой-то мелочи.

Наверное, всё-таки из-за различия FPU Cortex и сопроцессора на ПК.
Go to the top of the page
 
+Quote Post
Эдди
сообщение Nov 25 2017, 07:08
Сообщение #15


Знающий
****

Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250



Может поделитесь, чем же вы таким в матлабе занимаетесь, что потом это на STM32 запускаете? Я, как говорится, всю ночь не спал, не мог придумать, как можно скрестить матлаб и STM32... Ладно еще для плисины код генерировать, но для элементарного микроконтроллера?..
Go to the top of the page
 
+Quote Post
Allregia
сообщение Nov 25 2017, 07:46
Сообщение #16


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

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



Цитата(Эдди @ Nov 25 2017, 08:08) *
Может поделитесь, чем же вы таким в матлабе занимаетесь, что потом это на STM32 запускаете? Я, как говорится, всю ночь не спал, не мог придумать, как можно скрестить матлаб и STM32...


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


Цитата
Ладно еще для плисины код генерировать, но для элементарного микроконтроллера?..


Нихренассе "элементарный" - Ф4, и особено Ф7. Это же не АТТини sm.gif
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Nov 25 2017, 08:26
Сообщение #17


Ally
******

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



Цитата(Allregia @ Nov 25 2017, 09:46) *
Нихренассе "элементарный" - Ф4, и особено Ф7. Это же не АТТини sm.gif

От молодежь, ничего не помнит.

Вот проект сделанный в Matlab еще 10 лет назад как раз для Atmega8
И там и статистика и корреляция и фильтры и все все все... biggrin.gif
Go to the top of the page
 
+Quote Post
syoma
сообщение Nov 25 2017, 08:29
Сообщение #18


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

Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368



Цитата(Эдди @ Nov 25 2017, 10:08) *
Может поделитесь, чем же вы таким в матлабе занимаетесь, что потом это на STM32 запускаете? Я, как говорится, всю ночь не спал, не мог придумать, как можно скрестить матлаб и STM32... Ладно еще для плисины код генерировать, но для элементарного микроконтроллера?..

Разработка и моделирование управляющей логики и алгоритмов управления подъемным оборудованием
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Nov 25 2017, 09:19
Сообщение #19


Ally
******

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



Цитата(Grizzzly @ Nov 24 2017, 21:35) *
Наверное, всё-таки из-за различия FPU Cortex и сопроцессора на ПК.

Не различия, а настройки. Сопроцессор в ARM-ах настраивается. Но Matlab его настраивать под свои модели не умеет

Цитата(syoma @ Nov 24 2017, 19:40) *
Дык вроде как в примерах для Discovery такое присутствует. Надо только разобраться...

Там разбираться нечего.
Скачиваете Embedded Coder Support Package for STMicroelectronics Discovery Boards и смотрите какие исходники он имеет.
Видите там что он прикачал вам все тот же lwIP, операционку из проекта mbed и кучку убогих драйверов. Все!
Солвера там нет и быть не может, а по сему забудьте об External Mode.

Я для таких потребностей использую ActiveX компонент FreeMaster в матлабе со своим протоколом.
Но для его использования вам надо переехать на Kinetis-ы lol.gif
Go to the top of the page
 
+Quote Post
Allregia
сообщение Nov 26 2017, 08:56
Сообщение #20


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

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



Цитата(AlexandrY @ Nov 25 2017, 10:19) *
Скачиваете Embedded Coder Support Package for STMicroelectronics Discovery Boards и смотрите какие исходники он имеет.



А где взять сам Embedded Coder ? В комплекте Матлаба его нет, есть только Матлаб Кодер. На рутрекере тоже не нашел.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Nov 26 2017, 10:54
Сообщение #21


Ally
******

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



Цитата(Allregia @ Nov 26 2017, 10:56) *
А где взять сам Embedded Coder ? В комплекте Матлаба его нет, есть только Матлаб Кодер. На рутрекере тоже не нашел.

Вот линк. Лежать будет 48 часов.
https://drive.google.com/open?id=11tTAa3DZr...WWmADKWpeNzr1Ll
Go to the top of the page
 
+Quote Post
Эдди
сообщение Nov 26 2017, 12:17
Сообщение #22


Знающий
****

Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250



AlexandrY, не боитесь, что вас посадят за такую фигню?
Go to the top of the page
 
+Quote Post
Grizzzly
сообщение Nov 26 2017, 12:38
Сообщение #23


Знающий
****

Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748



Цитата(Эдди @ Nov 26 2017, 15:17) *
AlexandrY, не боитесь, что вас посадят за такую фигню?

Лол =) А что здесь не так? Это же Third-Party Package, который свободно загружается с сайта MathWorks: https://www.mathworks.com/hardware-support/arm-cortex-m.html
Go to the top of the page
 
+Quote Post
syoma
сообщение Nov 26 2017, 14:47
Сообщение #24


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

Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368



Цитата(Allregia @ Nov 26 2017, 11:56) *
А где взять сам Embedded Coder ? В комплекте Матлаба его нет, есть только Матлаб Кодер. На рутрекере тоже не нашел.

Embedded Coder - это тулбокс к Матлабу. Полный матлаб лeжит в закромах.
Go to the top of the page
 
+Quote Post
Allregia
сообщение Nov 26 2017, 16:38
Сообщение #25


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

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



Цитата(AlexandrY @ Nov 26 2017, 11:54) *
Вот линк. Лежать будет 48 часов.
https://drive.google.com/open?id=11tTAa3DZr...WWmADKWpeNzr1Ll



Гран мерси sm.gif

Это именно Embedded Coder, или то что можно и так с сайта ST скачать?

Цитата(syoma @ Nov 26 2017, 15:47) *
Embedded Coder - это тулбокс к Матлабу. Полный матлаб лeжит в закромах.


Этот тулбокс входит в полный комплект? Отдельно лежащего тулбокас в заромах не увидел (только очень старые какие-то).
Можно скачать 2017a или 2017b и там он будет?
Go to the top of the page
 
+Quote Post
syoma
сообщение Nov 26 2017, 19:55
Сообщение #26


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

Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368



Инсталляционный дистрибутив Матлаба включает все тулбоксы. Конкретно устанавливаемые тулбоксы определяются лицензией. В закромах есть полная лицензия - по крайней мере на 2016b видел.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 25th August 2025 - 02:48
Рейтинг@Mail.ru


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