Почему приведение к плавающей точке приводит к серьезной ошибке в STM32F429ZI (App_Fault_ISR) - PullRequest
1 голос
/ 29 января 2020

Почему приведение к float приводит к серьезной ошибке в STM32F429ZI (App_Fault_ISR)?

Я не совсем уверен, что здесь происходит. Я использую Nucleo Board, STM32F429ZI, на Atolli c TrueSTUDIO

Код

CPU_FP32 speed;
CPU_INT32U val = (CPU_INT32U)(0x20u >> 4u);
speed = (CPU_FP32)val;

Сборка, в которой он последний раз падает

080026f2:   bl      0x8001dc8 <BSP_Tick_Init>
51            CPU_INT32U val = (CPU_INT32U)(0x20u >> 4u);
080026f6:   movs    r3, #2
080026f8:   str     r3, [r7, #4]
52            speed = (CPU_FP32)val;
080026fa:   ldr     r3, [r7, #4]
080026fc:   vmov    s15, r3            <----  

Похоже проблема перемещения

Окно «Обнаружен жесткий сбой» shos

Ошибка шины, управления памятью или использования (FORCED) Дополнительные сведения Попытка выполнить инструкцию сопроцессора (NOCP) )

Это приземляется на App_Fault_ISR , который представляется серьезной ошибкой

Поскольку конфигурация Assembler, Compiler и C Linker имеют в настройке, имеют FPU включено (FPv4-SP-D16) Выбрана аппаратная реализация

1 Ответ

1 голос
/ 29 января 2020

Похоже, вы не включили FPU, это нужно сделать до того, как будут предприняты какие-либо инструкции с плавающей запятой. Вы должны установить биты 20-23 в регистре CPACR.

Эта ссылка показывает необходимые шаги, я обычно делаю это в своем коде запуска.

...