Allregia 9 22 ноября, 2017 Опубликовано 22 ноября, 2017 · Жалоба Есть сделанные в Матлабе алгоритмы, как наиболее правильным образом (настройки и т.п.) сгенерировать Си код, для последующей компиляции Кейлом или ИАРом для STM32F4 и F7 ? (у F4 флоат только сингл, у F7 и дабл). Или может я не в тот раздел написал? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grizzly 0 22 ноября, 2017 Опубликовано 22 ноября, 2017 · Жалоба Есть сделанные в Матлабе алгоритмы, как наиболее правильным образом (настройки и т.п.) сгенерировать Си код, для последующей компиляции Кейлом или ИАРом для 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') Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 22 ноября, 2017 Опубликовано 22 ноября, 2017 · Жалоба Я не только формат float имел ввиду, а и вообще как все правильно сделать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 55 22 ноября, 2017 Опубликовано 22 ноября, 2017 · Жалоба Правильно посмотреть первые 4 ссылки в гугл. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 23 ноября, 2017 Опубликовано 23 ноября, 2017 · Жалоба Во 1-х. сразу скажыу я этот вопрос задал по просьбе коллег, сам я с матлабом слабо дружу. Во 2-х: Я не смотрел сейчас, но на 100% уверен, что "первые 4 ссылки в Гугл", показывают на stm32-mat-target. В документации к нему расписывется интеграция с Смулинком и Кубом, плюс отладка через jtag в железе. Мы не используем Куб, программы для STM32 пишутся в IAR или Keil, а к ним пристыковываются исходники из-под матлаба. Делают это Кодером, но есть мнение, что делаю это не правильно. В настройках кодера есть target, и там стоит MS Visual C++ 64bit. И мы вовсе не уверены, что сгенеренный для 64 бит Вижуала код, получается также хорош для 32-битного Кортекса, поотому и задал вопрос. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
syoma 1 23 ноября, 2017 Опубликовано 23 ноября, 2017 · Жалоба У вас MATLAB скрипты или алгоритмы разрисованы в Simulink или Stateflow? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 236 23 ноября, 2017 Опубликовано 23 ноября, 2017 · Жалоба В MATLAB double нативный формат. Вы хотите, чтобы он заменил double на float при генерации из m-скрипта в сишный код? Я думаю, нужно явно в скрипте приводить переменные к float... Раньше при кодогенерации MATLAB даже счетчики циклов в Си делал double. Вроде бы сейчас такого уже нет. Матлаб давным-давно умеет приводить свои результаты расчётов к float или целочисленным типам. Много лет назад когда я в симулинке считал фильтры, то сохранял их коэффициенты потом в целочисленке. Вкладка делающая это называлась как-то типа: "Квантование". вроде. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 23 ноября, 2017 Опубликовано 23 ноября, 2017 · Жалоба В настройках кодера есть target, и там стоит MS Visual C++ 64bit. И мы вовсе не уверены, что сгенеренный для 64 бит Вижуала код, получается также хорош для 32-битного Кортекса, поотому и задал вопрос. Похоже вы делаете также как и я. Simulink когда генерит код рассчитывает на некий готовый фреймворк на платформе. А мне такое не нужно. Поэтому генерю весь пакет файлов, но беру от туда только главный код и h-файл с объявлением типов. Компиляцией в самом Matlab не пользуюсь. Поэтому параметры касающиеся toolchain не имеют значения. Правда приходится править интерфейсы функций и передачу аргументов для совместимости с моим фреймворком. Иногда чтобы подстроить модель под мой стиль передачи параметров приходится переусложнять модель в Simulink. Короче разработка итерационная: строю модель, генерю код, смотрю как вышло, если не нравится переделываю модель чтоб сгенерила по другому. У меня такие настройки для code generation: Сгенерированный код отлично работает под Cortex-M4. Проверено многократно. Хорошо оптимизируется. Варианты double от float отличается только тем, что в последнем идут суффиксы f у всех чисел с плавающей точкой. Если проектируете фильтры, то Matlab покажет как различаются характеристики после усечения точности. Но не гарантирует, что фильтр построенный в Simulink бедет работать правильно. Надо все перепроверять там же. Перевод модели из нативного double в урезанный float без потери стабильности всегда ручная и сложная работа. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grizzly 0 23 ноября, 2017 Опубликовано 23 ноября, 2017 · Жалоба Матлаб давным-давно умеет приводить свои результаты расчётов к float или целочисленным типам. Много лет назад когда я в симулинке считал фильтры, то сохранял их коэффициенты потом в целочисленке. Вкладка делающая это называлась как-то типа: "Квантование". вроде. Это всегда так было. А вот с генерацией сишного кода раньше были странности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
syoma 1 24 ноября, 2017 Опубликовано 24 ноября, 2017 · Жалоба Правда приходится править интерфейсы функций и передачу аргументов для совместимости с моим фреймворком. Иногда чтобы подстроить модель под мой стиль передачи параметров приходится переусложнять модель в Simulink. Раз уж пошла такая пьянка, не поделимся опытом, кто как вводит/выводит сигналы из Симулинка? Лично я не использую I/O порты, а определяю нужные сигналы как ImportedGlobal. Тогда Матлаб их определяет как external и их можно задекларировать в любом куске программы. Короче разработка итерационная: строю модель, генерю код, смотрю как вышло, если не нравится переделываю модель чтоб сгенерила по другому. Моделирование забыли. Я смотрю, как оно работает в модели и генерю код, только когда полностью доволен поведением. Тогда проверка в железе чисто формальная. Модели для моделирования и генерации кода - разные. В первой контроллер подключен к Test Harness, которая состоит из эмулятора контролируемого процесса и собственно GUI - ну там кнопочки понажимать, симитировать аварийные ситуации. Вторая модель - чисто для генерации кода - там та же модель контроллера подключена к I/O сигналам. Также в некоторых случаях вызываю свои Legacy Cи функции - Matlab их тогда просто вставляет в код. Вот что хотел бы как-нибудь запустить на своем ARMe - так это External Mode. Чтобы наблюдать внутренности модели, когда она работает в реальном времени на железяки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 24 ноября, 2017 Опубликовано 24 ноября, 2017 · Жалоба У вас MATLAB скрипты или алгоритмы разрисованы в Simulink или Stateflow? Скрипты. Симулинком не пользуются. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 24 ноября, 2017 Опубликовано 24 ноября, 2017 · Жалоба Скрипты. Симулинком не пользуются. В матлабе есть подробная инструкция как генерировать C-и файлы из m файлов. Их нее следует, что все типы назначаются руками. А если не объявлены, то их надо объявить. Волшебного превращения алгоритмов из double во float не происходит. Сгенерит-то сгенерит с другими типами, но сходимость алгоритма после этого матлаб никому не обещает. Надо запускать отладку и перепроверять весь алгоритм сверху до низу. Кстати я сравнивал результаты алгоритмов управления в float point в Simulink и сгенерированный им проект для Cortex-M4 по одной и той же выборке реальных данных (1000 отсчетов). И они совпали только до 4-5-го знака. Т.е. стандарт float point по умолчанию у сопроцессора Cortex не совпадает с Matlab-овским в какой-то мелочи. Вот что хотел бы как-нибудь запустить на своем ARMe - так это External Mode. Чтобы наблюдать внутренности модели, когда она работает в реальном времени на железяки. На Cortex-M3..7 совершенно не реально. А вот в LabVIEW я видел специальный стек протоколов отладочного движка специально под RTOS RTX от Keil-а . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
syoma 1 24 ноября, 2017 Опубликовано 24 ноября, 2017 · Жалоба На Cortex-M3..7 совершенно не реально. Дык вроде как в примерах для Discovery такое присутствует. Надо только разобраться... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grizzly 0 24 ноября, 2017 Опубликовано 24 ноября, 2017 · Жалоба И они совпали только до 4-5-го знака. Т.е. стандарт float point по умолчанию у сопроцессора Cortex не совпадает с Matlab-овским в какой-то мелочи. Наверное, всё-таки из-за различия FPU Cortex и сопроцессора на ПК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 1 25 ноября, 2017 Опубликовано 25 ноября, 2017 · Жалоба Может поделитесь, чем же вы таким в матлабе занимаетесь, что потом это на STM32 запускаете? Я, как говорится, всю ночь не спал, не мог придумать, как можно скрестить матлаб и STM32... Ладно еще для плисины код генерировать, но для элементарного микроконтроллера?.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться