出现问题场景
作为刚接触FreeRTOS实时操作系统的菜鸟,我在练习一个程序功能:按键3按下,将LED闪烁的任务挂起;按键4按下,将LED闪烁的任务恢复到就绪。按键使用外部中断。恢复就绪的语句是 xTaskResumeFromISR(xHandleTaskLED1(该函数用于在中断中恢复一个被挂起的任务)。
两个按键的中断优先级程序如下:
/*------------------------------------------------------------------------*/
HAL_NVIC_SetPriority(EXTI3_IRQn, 2, 0);    //KEY3按键中断优先级配置
HAL_NVIC_EnableIRQ(EXTI3_IRQn);
HAL_NVIC_SetPriority(EXTI4_IRQn, 3, 0);    //KEY4按键中断优先级配置
HAL_NVIC_EnableIRQ(EXTI4_IRQn);
/*------------------------------------------------------------------------*/
按键3的中断优先级配置为2,按键4配置为3。按键3的挂起任务是在另一个任务中实现,按下按键3后正常将LED任务挂起。按键4的恢复任务在中断中,按下按键4出现整个系统卡死,没有任何反应。
出现问题原因
  • 在使用FreeRTOS系统时,如果想在中断中恢复一个被挂起的任务,需要使用 xTaskResumeFromISR(TaskHandle_t xTaskToResume)函数,而不是 xTaskResume(TaskHandle_t xTaskToResume) 函数。
  • 当单片机芯片使用的是CM内核的MCU,官方强烈建议将NVIC的优先级分组配置为全抢占式优先级,没有响应式优先级。这样方便系统管理。我看了以下我的设置:HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4); 全为抢占式优先级,正常。
  • 在系统的 FreeRTOSConfig.h 配置头文件里,定义了一个宏定义:#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5 。它的意思是:用户可以在抢占式优先级为 5 - 15的中断里调用FreeRTOS的API函数(抢占式式优先级为0的中断里面不允许调用)。仔细看,我定义的是从5-15的优先级中断可以去调用系统的API,但是上面的代码中,我把两个按键的优先级设置为2和3,已经超过了5-15的抢占式优先级范围,所以我按下按键后,调用不了恢复任务函数!
解决办法
  • 我将 #define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5 宏定义改为 #define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 1 (因为0级抢占式优先级不允许用户使用)。这表明 在 1 - 15级的抢占式优先级范围,我的按键3和按键4的中断优先级在范围之内,可以调用系统的API函数了。这样,我的问题就解决了。

转载于:https://www.cnblogs.com/KeeganLu/p/11328529.html

FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法...相关推荐

  1. c语言 执行free函数程序被卡住,FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法...

    FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法 时间:2019-08-10 14:39:47  来源:  作者:  所属栏目:其他服务端 这里将告诉您FreeRT ...

  2. 关于IDEA中CSS、WXSS代码不能自动补全的原因和解决办法

    https://blog.csdn.net/qq_45735316/article/details/120304411 关于IDEA中CSS.WXSS代码不能自动补全的原因和解决办法 注:以下内容参考 ...

  3. R语言dplyr包filter函数 Error in filter(., ) : 找不到对象的报错原因和解决办法

    报错描述 当我们想使用dplyr包中的 filter 函数对指定的dataframe进行如下的行筛选时,R报错Error in filter(., ) : 找不到对象X.stage_id. ,提示我们 ...

  4. eclipse android 不能生成r类 appt错误,Ubuntu中Eclipse新建Android project提示缺失R文件的原因及解决办法...

    环境: 64位Ubuntu12.04进行Android开发,sun-JDK1.7,官网下载的最新ADT-Eclipse-SDK集成包.JDK配置正确.SDK已更新,版本一致 问题: 第一次启动Ecli ...

  5. php数组使用json_encode函数中文被编码成null的原因和解决办法

    大写的囧,提客户处理问题,前端的APP一直在叽叽咂咂,说收到的值是null,弄了半天原来是这个问题,记录下吧 json格式在开发中用的十分广泛.在php中json_encode函数可以直接将数组转成 ...

  6. mouseup 左键_javascript中mouseup事件丢失的原因与解决办法

    这篇文章主要跟大家介绍了关于Javascript中mouseup事件丢失的原因与解决办法的相关资料,文中给出详细的示例代码供大家参考学习,需要的朋友们下面跟着小编一起来学习学习吧. 前言 当实现类似E ...

  7. 中标麒麟操作系统,yum安装软件时提示:“已加载插件:langpacks,无须任何处理“的解决办法

    中标麒麟操作系统,yum安装软件时提示:"已加载插件:langpacks,无须任何处理"的解决办法 通常都是由于yum仓库未包含你所要安装的那款软件造成. 解决办法: 输入如下命令 ...

  8. CAD图纸中CAD文字边界为锯齿形的原因及解决办法

    在使用浩辰CAD软件绘制CAD图纸的过程中,为了方便绘图/看图经常需要在图纸中输入一些文字.那么当图纸中CAD文字边界显示为锯齿形时该怎么办呢?下面就给大家详细介绍一下吧! CAD文字边界为锯齿形的原 ...

  9. 小米4支持html5,针对在webview模式中,小米魅族手机不支持html5原生video的control的解决办法![原创]...

    其实,解决办法就是,重新写个control控制功能,.同样用流行的video.js可以实现 第一步就是增加个播放的图片..要不然没有按钮多难看! webkit-playsinline> 上面的视 ...

最新文章

  1. The practice program of C on point
  2. Python学习札记(二十) 函数式编程1 介绍 高阶函数介绍
  3. 人工智能状态图matlab,人工智能—TensorFlow(七):matplotlib图形可视化
  4. java基础知识系列---垃圾收集
  5. 面向对象阶段个人总结
  6. 学习webpack4 - ES6语法转化
  7. php 盾灵新闻系统,代码审计 | 记一次盾灵系统审计从后台到Getshell
  8. 值传递,指针传递,引用传递
  9. 27. JavaScript Cookies
  10. Python 持久存储
  11. python爬虫qq音乐_Python爬虫实战:采集全部QQ音乐歌曲
  12. limesurvey的问卷类型
  13. 切比雪夫加权 matlab,matlab切比雪夫多项式
  14. anaconda配置清华镜像源
  15. 小米冲高端?差了几口气
  16. 工资条: EmailSender部分
  17. 【项目笔记_RP552D】rtthread winusb 修改 vid 与 pid
  18. 09-搜索前端开发-搜索页面
  19. 企业/公司如何初创建一个小程序
  20. python的学习笔记案例3--基础代谢率计算1.0

热门文章

  1. IDEA下搜狗输入法输入中文时卡着不动的参考解决方法
  2. KVM虚拟机相关步骤
  3. 【转】游戏编程中的人工智能技术--神经网络
  4. Zynq7000系列之芯片引脚功能综述
  5. Lucene.net 下载地址
  6. javascript 传多个参数的正则表达式(用来获取某个参数值)
  7. javascript --- ES6模块与CommonJS模块的差异
  8. H5页面适配所有iPhone和安卓机型的六个技巧
  9. CCNP精粹系列之十八--路由映射实战二,博主推荐文章
  10. Elementary OS安装Chrome