Не смогу подсказать. Мне кажется потактовый симулятор с выводом такого профайла — штука сложная, учитывая что нужно же и кэши процессорные симулировать тогда, если по-хорошему… Ну и еще, там нужно следить за сопроцессорами, и симулировать их в том же цикле что и ЦПУ, типа на одну инструкцию ЦПУ всегда исполняем одну инструкцию сопроцессора и тд (я видел такое в одном симуляторе для MIPS). Поэтому тот же куему ограничивается лишь генерацией Translation блоков с ассеблерными инструкциями. И вся периферия в куему делает ввод-вывод прямо в главном цикле с ЦПУ. Т.е. любые общения с периферией (тот же дма) будут сразу же «ухудшать» частоту ЦПУ. Так что в куему тогда нужно гигантскую архитектурну переделку производить, чтобы такое реализовать. Про другие открытые и более-менее поддерживаемы симуляторы для ARM я, если честно, не в курсе.
Я согласен с Вами. Отлаживать нужно на реальном железе, «работа на эмуляторе» != «работа на железе». Например, именно на железе можно настраивать клоки, управление питанием. Но на эмуляторе можно отладить не только математику, но и большинство драйверов периферии (опять же, какие-то специфические штуки могут проявиться только на железе, но основная логика драйвера при этом сохранится). И если я вижу что какая-то платформа есть в эмуляторе, я сначала пробую ее, а уже потом иду за железкой.
Конечно может не заработать, я же явно указал в статье, что для упрощения не будем заниматься настройками уарта. Ниже в статье ссылка на эту платформу в Embox, там уже по-настоящему настраивается уарт, прерывания, системный таймер.
Тут смысл был не в том, чтобы научить в уарт писать, а чтобы показать как этот образ правильно собрать, чтобы он запустился.
Спасибо, интересная альтернатива. Правда полученный бинарник на железке не запустить без пересборки с настоящими не-хостовыми функциями (как я понял, компилятор навставляет в этих местах bkpt в образе), но любопытно. Я такое не использовал, посмотрю.
Дело в том, что у меня httpd показывает только index.html, а остальные страницы пустые, хотя в исходниках это не так. Да и стартует он, но не работает через раз. Команда ls то показывает список файлов то нет.
Некоторое время назад проверялось на F4, работало. Возможно, это проблема работы под F7. Плюс в этом примере в бранче я ограничил кол-во потоков до 2ух, что тоже может влиять на работу httpd. Если интересен httpd, то лучше попробовать в мастере темлейт arm/stm32f7cube.
У нас многие приложения подтягиваются по зависимостям, некоторые требуют конкрутную версию и (иногда) патчи, поэтому мы не можем считать их предустановленными. Так и в случае с Cube — пока мы работаем только с конкретной протестированной версией 1.5.0 Но в будущем, возможно, постараемся учесть, что Cube может быть предустановлен.
P.S. Кстати, там у них в исходниках есть макрос USE_USB_HS, который должен где-то определяться (Projects/STM32746G-Discovery/Applications/USB_Device/MSC_Standalone/readme.txt). Без него тоже не будет работать. Может в вашем случае он как раз и не определен оказался, кто знает…
Я проверил USB_HS в режиме девайса. Для этого импортировал в Embox вот этот пример — Projects/STM32746G-Discovery/Applications/USB_Device/MSC_Standalone. Там алгоритм такой:
1) Вставляем SD карту.
2) Вставляем micro USB кабель в USB_HS (CN12) и включаем плату.
3) Подключаем кабель к PC. Должен появиться девайс.
Embox является POSIX совместимым, имеет сетевой стек, файловую систему и т.д… Это позволило, например, запустить pjsip на stm32f4-discovery. А на более больших платформах на Embox работает даже Qt embedded.
Спасибо, да, согласен что скомкано. Но целиком мат. часть было писать не вариант :) Попробую на досуге собрать под катом основные идеи, как Вы предлагаете.
По поводу БПФ хорошее замечание. Пробовали, но почему-то получалось хуже. Возможно БПФ на какую-то статичность сигнала завязан, и изменение распеределения ему не нравится, и он отфильтровал в том числе и «нужные частоты». Но это нужно еще раз проверить, попробую разобраться в этом детальней.
Ведь кукла вызывается не в момент срабатывания конкретного прерывания, а просто по таймеру
А вот тут я видимо неправильно Вас понял сначала. Подумал как раз про общий обработчик, который уже остальные дергает. И им весь вектор прерываний заполняется.
Нет, регистры мы так же быстро грузить умеем, с инструкцией ldmia знакомы, уж поверьте.
Ну а вообще да, жертвуя читабельностью что угодно можно на асме наваять. Хотя может это что-то и крутое, я без цельной картины не пойму отдельно выдранный кусок
Достаточно перейти в защищённый режим, и будим иметь два уникальных стека
Вы похоже про MSP и PSP? Как конкретно это решает проблему описанную в статье? Вот вы вошли в обработчик прерывания, вот у вас есть стек — окей, но пока вы из него не выйдете по стеку, новые прерывания того же типа не случаются. Именно поэтому во FreeRTOS и NuttX модифицируется стек.
Не требуется универсальный обработчик прерываний — это кстати костыль FreeRTOS и чибиос
У них есть вектор прерываний, насколько я знаю. На каждое прерывание дергается свой обработчик
Тут смысл был не в том, чтобы научить в уарт писать, а чтобы показать как этот образ правильно собрать, чтобы он запустился.
Некоторое время назад проверялось на F4, работало. Возможно, это проблема работы под F7. Плюс в этом примере в бранче я ограничил кол-во потоков до 2ух, что тоже может влиять на работу httpd. Если интересен httpd, то лучше попробовать в мастере темлейт arm/stm32f7cube.
Сейчас у ST на сайте версия поновее — 1.9.0. Но пока не было времени затащить.
1) Вставляем SD карту.
2) Вставляем micro USB кабель в USB_HS (CN12) и включаем плату.
3) Подключаем кабель к PC. Должен появиться девайс.
Вот бранч в Embox, в котором этот пример работает — github.com/embox/embox/tree/stm32f7-usb-device-example. Темлейт: make confload-platform/stm32f7/usb-device
По поводу БПФ хорошее замечание. Пробовали, но почему-то получалось хуже. Возможно БПФ на какую-то статичность сигнала завязан, и изменение распеределения ему не нравится, и он отфильтровал в том числе и «нужные частоты». Но это нужно еще раз проверить, попробую разобраться в этом детальней.
Ну а вообще да, жертвуя читабельностью что угодно можно на асме наваять. Хотя может это что-то и крутое, я без цельной картины не пойму отдельно выдранный кусок
Почему это плохо? Мне кажется — часто удобно.
Статья как раз была об этом. Еще раз повторюсь :)
У них есть вектор прерываний, насколько я знаю. На каждое прерывание дергается свой обработчик