Stm32 y FREERTOS

0

Soy un novato en el mundo integrado. Escribo este ejemplo para aprender a programar; Tengo este problema: escribí este código pero no lo entiendo. Tengo la siguiente situación:

Tengo dos subprocesos "Led_Green_Task" con prioridad normal y "Led_Red_Task" con alta prioridad, y una función "AccessShareData" donde uso un semáforo para encender un LED naranja cuando inicio el programa veo solo el LED naranja encendido ¡Fuera, no entiendo esta situación!

saludos cordiales A.

/* definition and creation of Led_Green_Task */
osThreadDef(Led_Green_Task, StartGreenLedTask, osPriorityNormal, 0, 128);
Led_Green_TaskHandle = osThreadCreate(osThread(Led_Green_Task), NULL);

/* definition and creation of Led_Red_Task */
osThreadDef(Led_Red_Task, StartRedLedTask, osPriorityHigh, 0, 128);
Led_Red_TaskHandle = osThreadCreate(osThread(Led_Red_Task), NULL);

/* StartGreenLedTask function */
void StartGreenLedTask(void const * argument)
  {
    /* USER CODE BEGIN StartGreenLedTask */ 
    AccessShareData();
    /* Infinite loop */
    for(;;)
    {
      HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5); // ledgreen  
      vTaskSuspend(Led_Green_TaskHandle);
    }
    /* USER CODE END StartGreenLedTask */
  }

 /* StartRedLedTask function */
 void StartRedLedTask(void const * argument)
 {
   /* USER CODE BEGIN StartRedLedTask */
   AccessShareData();
   /* Infinite loop */
   for(;;)
   {
     HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_7);  //led red
     vTaskSuspend(Led_Red_TaskHandle);
   }
   /* USER CODE END StartRedLedTask */
}
/* USER CODE BEGIN Application */
void AccessShareData()
  {
    osSemaphoreWait(CriticalResourceSemaphoreHandle,3000) ; /*acquire token*/

    HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_6);   //led orange
    osSemaphoreRelease(CriticalResourceSemaphoreHandle);  //relase token
  }

este es el principal:

    int main(void)
   {
   /* MCU Configuration-----------------------------*/

 /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
 HAL_Init();
 /* Configure the system clock */
 SystemClock_Config();

 /* Initialize all configured peripherals */
 MX_GPIO_Init();
 /* USER CODE BEGIN 2 */
 /* USER CODE END 2 */
 /* Call init function for freertos objects (in freertos.c) */
 MX_FREERTOS_Init();
 /* Start scheduler */
 osKernelStart(); 
/* We should never get here as control is now taken by the scheduler */
 /* Infinite loop */
 /* USER CODE BEGIN WHILE */
while (1)
{

 /* USER CODE END WHILE */
 /* USER CODE BEGIN 3 */

}
/* USER CODE END 3 */
}
    
pregunta Ant

0 respuestas

Lea otras preguntas en las etiquetas