Cómo hacer que freeRTOS funcione en stm32f4

2

Estoy intentando ejecutar un RTOS en mi placa STM32F407VGT6. Descargué la versión parcial de programa CORTEX_M4F_STM32F407ZG-SK del sitio web freeRTOS y actualicé el código con IAR IDE, sin embargo, los leds no están parpadeando como se esperaba. Mientras depuraba el programa, encontré que el programa falla aquí:

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!!!!

Hice una investigación en FAQ de freeRTOS , la sección "La aplicación que creé se compila, pero no se ejecuta" parece para tratar el mismo problema pero

#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
#define xPortSysTickHandler SysTick_Handler

existe en el archivo FreeRTOSConfig.h ¿Alguien enfrentó el mismo problema? o el RTOS que estoy usando no es el correcto?

    
pregunta fedi

3 respuestas

3

Si su código está "fallando" en esa línea, entonces es muy probable que no tenga instalado el controlador FreeRTOS SVC. Observo que incluyó la línea:

#define xPortPendSVHandler PendSV_Handler

Lo que reemplazará un nombre estándar de CMSIS (PendSV_Handler) con el nombre de FreeRTOS, pero se supone que su tabla de vectores usa el nombre de estándar de CMSIS. Verifique que ese es el caso, y que nada más en su aplicación está reemplazando la tabla de vectores con una diferente reescribiendo el registro de direcciones base de vectores. Por cierto, FreeRTOS tiene un foro de soporte muy activo en cualquier otro lugar. que el lugar donde los expertos de FreeRTOS están observando y listos para responder preguntas.

  

Los productos ARM cortex M4 se basan en la arquitectura central ARM7

En realidad, esto no es el caso. Por más confuso que parezca, los microcontroladores ARM7 usan un núcleo ARMv4, mientras que los microcontroladores Cortex-M4 usan un núcleo ARMv7: o) Por lo tanto, las preguntas frecuentes en particular no se aplican en este caso.

    
respondido por el Richard
2

En las preguntas frecuentes de FreeRTOS que está utilizando verificó el punto 5

  1. El programador RTOS se bloquea al intentar iniciar la primera tarea Si está utilizando un objetivo ARM7, el procesador debe estar en modo Supervisor cuando se inicia el programador RTOS.

Los productos ARM cortex M4 se basan en la arquitectura central ARM7, consulte esta referencia de wikipedia y, como se ve claramente en el fragmento de código "vPortStartFirstTask" esto parece describir completamente lo que está sucediendo con su sistema.

    
respondido por el Kvegaoro
0
  1. Debe eliminar el controlador SVC_Handler y PendSV_Handler ISR en el archivo stm32f4xx_it.c .

  2. Los archivos de FreeRTOS deben compilarse en el modo compilador de c no en C ++, lo que significa que los archivos de C deben compilarse como código fuente de C y los archivos de C ++ deben compilarse como código fuente de C ++. Puede seleccionar "Auto (basado en extensión)" en la sección Idioma.

  3. Debe agregar la raíz del archivo FreeRTOSConfig.h a la pestaña del preprocesador de la sección de ensamblador de la ventana de opciones del proyecto de esta manera:

respondido por el masoud

Lea otras preguntas en las etiquetas