STM32CubeIDE + FreeRTOS + newlib = HardFault!

ST Microelectronics проделали замечательную работу в попытке интегрировать инструменты для embedded разработки под STM32. У них почти получилось, но в CubeMX и генерируемой им коде довольно много косяков, для которых приходится придумывать обходные пути.

Одна из проблем — использование sprintf(«Value is %8.2f», f); приводит к HardFault

То есть вы не можете выводить и вводить числа с плавающей точкой при использовании FreeRTOS. На голом проце — пожалуйста, достаточно включить -u _printf_float в настройках проекта (MCU Settings). А вот под FreeRTOS это вызывает HardFault.

На сайте комьюнити на эту тему прилично репортов:

https://community.st.com/s/question/0D50X0000CBmXufSQF/newlibmalloc-locking-mechanism-to-be-threadsafe

https://community.st.com/s/question/0D50X0000BB1eL7SQJ/bug-cubemx-freertos-projects-corrupt-memory

есть статья Дэйва Надлера на эту тему:

http://www.nadler.com/embedded/newlibAndFreeRTOS.html

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

Единственным рабочим решением на сегодня является отказ от newlib nano при работе с FreeRTOS и float, а возможно и вообще при работе с вводом — выводом.

для этого в настройках проекта нужно выбрать «Standard C, Standard C++«

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.