[STM32F4] 请教FreeRTOS二值信号量GPIO中断无效问题

[复制链接]
3240|2
 楼主| nefusmzj 发表于 2015-12-14 11:42 | 显示全部楼层 |阅读模式
各位工程师好:
       目前基于STM32F411RE(NUCLEO)移植了freeRTOS,并逐步学习中。在进行到“利用二值信号量对任务和中断进行同步”实验验证时,遇到了问题。请大神们帮忙分析一下问题所在。
1、任务“vHandlerTask”处于阻塞态,等待有效的信号量;
2、期望实现按键按下中断,xSemaphoreGiveFromISR()给出信号量;
3、"vHandlerTask"运行,打印语句。
目前程序运行后,先执行了“vHandlerTask”,如果按键中断触发,会执行中断内的打印,但貌似没有给出信号量,“vHandlerTask”任务也不会继续执行,然后程序就卡死不动了。
PS:不实用操作系统,按键中断正常。
中断给出信号量代码:
  1. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
  2. {
  3.         static portBASE_TYPE xHigherPriorityTaskWoken;
  4.         xHigherPriorityTaskWoken = pdFALSE;
  5.   if(GPIO_Pin == GPIO_PIN_13)
  6.   {
  7.                
  8.                 printf("Generate a IRQ\n\r");
  9.                 xSemaphoreGiveFromISR( BinarySemaphore_a, &xHigherPriorityTaskWoken );
  10.                 if( xHigherPriorityTaskWoken == pdTRUE )
  11.                 {
  12.                         //portSWITCH_CONTEXT();
  13.                         printf("need --portSWITCH_CONTEXT--\n\r");
  14.                         portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );
  15.                 }
  16.   }
  17. }

任务“vHandlerTask”
  1. static void vHandlerTask(void *pvParameters)
  2. {               
  3.         for(;;)
  4.         {
  5.                 if(xSemaphoreTake(BinarySemaphore_a, portMAX_DELAY)==pdPASS)
  6.                 {
  7.                         printf("Handler task - Processing event.\n\r");
  8.                         HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);       
  9.                 }
  10.         }
  11. }

main函数代码
  1. int main(void)
  2. {
  3.   HAL_Init();
  4.   SystemClock_Config();
  5.         gpio_config();
  6.         uartconfig();
  7.         vSemaphoreCreateBinary( BinarySemaphore_a );
  8.        
  9.         if(BinarySemaphore_a != NULL)
  10.         {
  11.                 xTaskCreate(vHandlerTask,"HandlerTask",configMINIMAL_STACK_SIZE+50,NULL,3,NULL );
  12.                 vTaskStartScheduler();
  13.         }
  14.   while (1)
  15.   {
  16.                
  17.   }
  18. }

附上整个工程:
9利用二值信号量对任务和中断进行同步.zip (266.5 KB, 下载次数: 5)

请大神们帮忙分析一下问题所在。
 楼主| nefusmzj 发表于 2015-12-14 13:36 | 显示全部楼层
了解FreeRTOS在STM32上运行的大神们,帮忙分析下呗。
 楼主| nefusmzj 发表于 2015-12-15 09:00 | 显示全部楼层
问题解决了,参考前辈**STM32F4使用FreeRTOS的中断。主要问题在于GPIO初始化时优先级与RTOS优先级系统的兼容问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

148

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部