Я пытаюсь запустить RTOS на своей плате STM32F407VGT6. Я загрузил демо-версию CORTEX_M4F_STM32F407ZG-SK с сайта freeRTOS и записал код с помощью IAR IDE, однако светодиоды не мигают, как ожидалось. во время отладки программы я обнаружил, что программа падает здесь:
vPortStartFirstTask
ldr r0, =0xE000ED08
ldr r0, [r0]
ldr r0, [r0]
msr msp, r0
cpsie i
cpsie f
dsb
isb
svc 0 // The program crashes here!!!!
Я провел некоторое исследование в FAQ по freeRTOS , раздел «Созданное мной приложение компилируется, но не запускается», похоже, решает ту же проблему, но
#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
#define xPortSysTickHandler SysTick_Handler
существует в файле FreeRTOSConfig.h. Кто-нибудь сталкивался с такой же проблемой? или ОСРВ, которую я использую, не подходит?
Если ваш код «сбой» в этой строке, то, скорее всего, у вас не установлен обработчик FreeRTOS SVC. Я заметил, что вы включили строку:
#define xPortPendSVHandler PendSV_Handler
Это заменит стандартное имя CMSIS (PendSV_Handler) на имя FreeRTOS, но это предполагает, что ваша векторная таблица использует стандартное имя CMSIS — проверьте, что это так, и что ничто другое в вашем приложении не заменяет векторную таблицу другим один путем перезаписи регистра базового адреса вектора. Между прочим — у FreeRTOS очень активный форум поддержки — меня всегда удивляет, почему люди задают вопросы по FreeRTOS в любом другом месте, кроме того места, где эксперты FreeRTOS наблюдают и готовы ответить на вопросы.
Продукты ARM cortex M4 основаны на базовой архитектуре ARM7.
На самом деле это не так. Как бы это ни сбивало с толку, микроконтроллеры ARM7 используют ядро ARMv4, тогда как микроконтроллеры Cortex-M4 используют ядро ARMv7 :o) Так что этот конкретный FAQ не применим в данном случае.
В часто задаваемых вопросах FreeRTOS, которые вы используете, проверьте пункт 5.
Продукты ARM cortex M4 основаны на базовой архитектуре ARM7, см. этот справочник в Википедии , и, поскольку ваш фрагмент ясно показывает «vPortStartFirstTask», это, кажется, полностью описывает, что происходит с вашей системой.
Вы должны удалить обработчик ISR SVC_Handler
и PendSV_Handler
в stm32f4xx_it.c
файле.
Файлы FreeRTOS должны быть скомпилированы в режиме компилятора c, а не в C++, это означает, что файлы C должны быть скомпилированы как исходный код C, а файлы C++ должны быть скомпилированы как исходный код C++. Вы можете выбрать «Авто (на основе расширения)» в разделе «Язык».
Вы должны добавить корень FreeRTOSConfig.h
файла на вкладку препроцессора раздела ассемблера окна параметров проекта следующим образом:
Евгений Ш.
феди
Евгений Ш.