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 */
}