Processing math: 100%

2 votos

FreeRtos stm32f4 atascado en vTaskDelay

Hola estoy usando la API FreeRtos con el microcontrolador stm32f4 , el programa se atasca cuando entra en vTaskDelay , cuando lo depuro veo que se atasca en esta linea (2588 de tasks.c en la funcion vTaskDelay)

            if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ tskIDLE_PRIORITY ] ) ) > ( UBaseType_t ) 1 )
        {
            taskYIELD();
        }

muchas gracias por su ayuda

3voto

ufk Puntos 4939

Bueno, he encontrado la razón por la que se produjo este error es que parece que el tiempo no avanza porque la interrupción del systick era como si no hiciera nada , y esto porque utilicé un FreeRTOSConfig.h generado con stmcube y se comentó lo siguiente

/* IMPORTANT: This define MUST be commented when used with STM32Cube firmware, 
to prevent overwriting SysTick_Handler defined within STM32Cube HAL */
/* #define xPortSysTickHandler SysTick_Handler*/

lo descomenté, también tuve que comentar la definición de la interrupción systick en stm32f4xx__it.c para evitar la definición duplicada

0voto

Kstro21 Puntos 179

Con STM32Cube_FW_F4_V1.13.1 y FreeRTOS V8.2.3 es necesario definir el símbolo USE_RTOS_SYSTICK .

He aquí un ejemplo práctico:

#include "stm32f4xx.h"
#include "stm32f4xx_nucleo_144.h"

// don't forget to define USE_RTOS_SYSTICK globally!

#include <cmsis_os.h>

#define LED_PIN     GPIO_PIN_0
#define LED_PORT        GPIOB

void blinky_task( void* pvParameters)
{
    for(;;)
    {
        vTaskDelay( 1000 / portTICK_PERIOD_MS);
        HAL_GPIO_WritePin( LED_PORT, LED_PIN, GPIO_PIN_SET);

        vTaskDelay( 200  / portTICK_PERIOD_MS);
        HAL_GPIO_WritePin( LED_PORT, LED_PIN, GPIO_PIN_RESET);
    }
}

int main(void)
{
    HAL_Init();
    __HAL_RCC_GPIOB_CLK_ENABLE();

    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStructure.Pin  = LED_PIN;
    HAL_GPIO_Init( LED_PORT, &GPIO_InitStructure);

    xTaskCreate( blinky_task, (char*) "blinky", configMINIMAL_STACK_SIZE, 0, 1, 0);
    vTaskStartScheduler();
}

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X