打印
[STM32F4]

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

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

任务“vHandlerTask”
static void vHandlerTask(void *pvParameters)
{               
        for(;;)
        {
                if(xSemaphoreTake(BinarySemaphore_a, portMAX_DELAY)==pdPASS)
                {
                        printf("Handler task - Processing event.\n\r");
                        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);       
                }
        }
}

main函数代码
int main(void)
{
  HAL_Init();
  SystemClock_Config();
        gpio_config();
        uartconfig();
        vSemaphoreCreateBinary( BinarySemaphore_a );
       
        if(BinarySemaphore_a != NULL)
        {
                xTaskCreate(vHandlerTask,"HandlerTask",configMINIMAL_STACK_SIZE+50,NULL,3,NULL );
                vTaskStartScheduler();
        }
  while (1)
  {
               
  }
}

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

请大神们帮忙分析一下问题所在。
沙发
nefusmzj|  楼主 | 2015-12-14 13:36 | 只看该作者
了解FreeRTOS在STM32上运行的大神们,帮忙分析下呗。

使用特权

评论回复
板凳
nefusmzj|  楼主 | 2015-12-15 09:00 | 只看该作者
问题解决了,参考前辈**STM32F4使用FreeRTOS的中断。主要问题在于GPIO初始化时优先级与RTOS优先级系统的兼容问题。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

148

帖子

2

粉丝