你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32 cubemx freertos 中断二值信号量卡死问题

[复制链接]
STMCU小助手 发布时间:2021-7-16 16:35

功能: 按键中断里面释放二值信号量,  然后点亮LED灯

问题: 卡在xSemaphoreGiveFromISR

代码:

  1. <font face="微软雅黑" size="3">
  2. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
  3.           uint32_t ulReturn;
  4.                 BaseType_t pxHigherPriorityTaskWoken;
  5.           /* 进入临界段,临界段可以嵌套 */
  6.   ulReturn = taskENTER_CRITICAL_FROM_ISR();
  7.        
  8.         if(GPIO_Pin == KEY1_Pin){

  9.                 BaseType_t pxHigherPriorityTaskWoken;
  10.           xSemaphoreGiveFromISR(BinarySem_Handle,&pxHigherPriorityTaskWoken);        //释放二值信号量
  11.                 //如果需要的话进行一次任务切换
  12.                 portYIELD_FROM_ISR(pxHigherPriorityTaskWoken);
  13.         }
  14.           /* 退出临界段 */
  15.   taskEXIT_CRITICAL_FROM_ISR( ulReturn );
  16. }

  17. static void LED_Task(void* parameter)
  18. {       
  19.         BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为pdPASS */
  20.   uint32_t r_queue;        /* 定义一个接收消息的变量 */

  21.   while (1)
  22.   {
  23.     //获取二值信号量 xSemaphore,没获取到则一直等待
  24.                 xReturn = xSemaphoreTake(BinarySem_Handle,/* 二值信号量句柄 */
  25.                               portMAX_DELAY); /* 等待时间 */
  26.     if(pdPASS == xReturn)
  27.     {

  28.       printf("收到数据");

  29.     }
  30.                
  31.                
  32.                 HAL_GPIO_WritePin( LED0_GPIO_Port,LED0_Pin,0);
  33.     vTaskDelay(500);   /* 延时500个tick */
  34.    
  35.     HAL_GPIO_WritePin( LED0_GPIO_Port,LED0_Pin,1);;     
  36.     vTaskDelay(500);   /* 延时500个tick */
  37.   }
  38. }

  39.   /* EXTI interrupt init*/
  40.   HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);
  41.   HAL_NVIC_EnableIRQ(EXTI0_IRQn);
  42. </font>
复制代码

解决方案:  按键抢占优先级太高了,导致rtos不能抢占, 所以改低抢占优先级为7就可以

  1. <font face="微软雅黑" size="3">/* EXTI interrupt init*/
  2.   HAL_NVIC_SetPriority(EXTI0_IRQn, 7, 0);
  3.   HAL_NVIC_EnableIRQ(EXTI0_IRQn);</font>
复制代码


收藏 评论0 发布时间:2021-7-16 16:35

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版