Перейти к содержанию
    

STM32: регистровый CMSIS или высокоуровневый HAL ?

Советую для начала взять libopencm3, а потом потихоньку свое сварганить, т.к. любая библиотека — это жиробасище то еще... Скажем, в реализации "полуаппаратного" 1-wire я местами напрямую регистрами инициализировал таймеры и ПДП, т.к. библиотека давала слишком большие задержки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Советую для начала взять libopencm3, а потом потихоньку свое сварганить, т.к. любая библиотека — это жиробасище то еще... Скажем, в реализации "полуаппаратного" 1-wire я местами напрямую регистрами инициализировал таймеры и ПДП, т.к. библиотека давала слишком большие задержки.

 

А что, в HAL есть модули для "полуаппаратного" 1-wire?

 

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

А реально выполняться в среднестатистической программе будет мизер.

К тому же HAL сделан под статический анализатор. Т.е. в нем должно просматривается все дерево вызовов.

 

Если за что и хаять HAL, то только не за результирующий объем кода.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Советую для начала взять libopencm3

....

Да, спасибо за напоминание о "третьем пути", как-то не подумал посмотреть еще какие-то библиотеки. на первый взгляд- довольно прозрачно. И как замечательно документировано!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Двухпроходный кейловский компилятор

это когда cross-module?

у меня вроде как три раза пробегает...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Извините, а libopencm3 под кейлом будет работать?

Они пишут "The most heavily tested toolchain is "gcc-arm-embedded" .... Other toolchains should work, but have not been nearly as well tested."

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

При чем здесь объем кода? А ничего, что тупо все эти "джампы" и манипуляции с регистрами при выполнении уймы функций, занимает довольно-таки значительное время?

 

Извините, а libopencm3 под кейлом будет работать?

Без понятия, я вообще не в курсе, что такое "кейл". Ни разу в жизни не видел.

Пользуюсь geany в качестве редактора (хоть geany и IDE), компиляю make'ом (gcc-none-eabi), прошиваю через бутлоадер при помощи stm32flash (тем же make'ом), отлаживаю через USB (CDC).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Извините, а libopencm3 под кейлом будет работать?

Они пишут "The most heavily tested toolchain is "gcc-arm-embedded" .... Other toolchains should work, but have not been nearly as well tested."

Буквально на прошлой неделе в соседней теме обсуждали портирование на IAR.

Если вдумчиво подойти, должно нормально взлететь.

 

Там есть странные особенности (типа генерации "на лету" заголовка с регистрами), свой стартап, но ничто не мешает пользоваться своим (или штатным кейловским).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Буквально на прошлой неделе в соседней теме обсуждали портирование на IAR.

Если вдумчиво подойти, должно нормально взлететь.

 

Там есть странные особенности (типа генерации "на лету" заголовка с регистрами), свой стартап, но ничто не мешает пользоваться своим (или штатным кейловским).

Да, я вчера ночью ту тему по диагонали прочитал- там в 90% сообщений обсуждают неотносящиеся к либе вопросы, так что зерна (обсуждения портирования) я не заметил, уже сегодня утром там задал тот же вопрос.

Спасибо за наводку, перечитаю еще раз.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При чем здесь объем кода? А ничего, что тупо все эти "джампы" и манипуляции с регистрами при выполнении уймы функций, занимает довольно-таки значительное время?

 

Пользуюсь geany в качестве редактора (хоть geany и IDE), компиляю make'ом (gcc-none-eabi), прошиваю через бутлоадер при помощи stm32flash (тем же make'ом), отлаживаю через USB (CDC).

 

Жесть, "компиляю make'ом (gcc-none-eabi)" и после этого восклицать "все эти "джампы" и манипуляции....занимает довольно-таки значительное время?"

 

А в курсе что только из-за GCC вы убиваете почти половину производительности процессора?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В проекте с цифровой обработкой звука применяется компилятор arm-none-eabi (GCC с launchpad.net). Рассматривая критические места в дизассемблере, пришел к выводу, что лучше соптимизировать не сильно получится - т.е. в коде учитывается конвеер, не мгновенное вычисление функция плавающей точки сопроцессором...

SPL/HAL не использую, но многократную вложенность функций моих библиотек компилятор прекрасно инлайнит.

Изменено пользователем Genadi Zawidowski

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А в курсе что только из-за GCC вы убиваете почти половину производительности процессора?

А в курсе, что подобные слова надо либо предварять фразой "мне Рабинович по телефону напел", либо приводить результаты тестирования?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А в курсе что только из-за GCC вы убиваете почти половину производительности процессора?

Кто такой бред выдумал?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

про HAL

 

в драйвере CAN-а HAL_UNLOCK не вызывается, если все три мейлбокса заняты (типа, индусский код?). после этого драйвер встает (по крайней мере пришлось исправить код HAL, чтобы заработало)

 

в драйвере UART при запуске приема и передачи по DMA - иногда данные терялись (ORE) - скорость 115к у проца ~50МГц - как такое происходит я не понимаю - сделано была высокоприоритетная задача во FreeRTOS, которая ждала завершения приема и перезапускала ...receive_dma...

после переписывания драйвера (перезапуск DMA в обработчике) - ORE перестало происходить - тут может я не разабрался, но осадочек остался :)

кстати полезная фича в UART 373-го прерывание по таймауту (железное, не софт, я в ПЛИС всегда так в УАРТах делаю) не поддерживается в HAL - то есть по любому драйвер надо переписывать

 

нафига они еще каких-то дебильных оберток к FreeRTOS-ным функциям понаделали - тоже х.з.

 

===============

 

то есть как всегда (по-моему у 386-го или 186-го был уже графический официальный конфигуратор железа) - быстро что-то склепать, вполне все это в тему cubemx, HAL и т.д.

но если начинать копать вглубь - то неприятные впечатления гарантированы :)

 

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в драйвере UART при запуске приема и передачи по DMA - иногда данные терялись (ORE) - скорость 115к у проца ~50МГц - как такое происходит я не понимаю

...

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

 

На скорости 115 кбод это приводит к завешиванию равных и более низкопроиоритетных прерываний (ну и всего нижележащего) примерно на 12 мксек (длительность передачи одного байта). Соответственно завешивается приемник (если он на равном или низшем приоритете) и получаем ORE.

 

Это легко убирается либо коррекцией кода HAL, либо снижением приоритета прерываний DMA передачи ниже DMA приема (именно priority, а не subpriority).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...