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

出现问题场景
作为刚接触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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262930.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无法连接到远程的SQL SERVER2000

1、先保证ping通 2、在dos下写入telnet ip 1433不会报错 3、用ip连如企业管理器: 企业管理器-->右键SQlserver组-->新建sqlserver注册-->下一步-->写入远程实例名(IP,机器名)-->下一步-->…

妙趣横生算法 3:寻找相同元素的指针

实例说明 在已知两个从小到大的有序的数表中寻找出现的相同元素在第一个数表中的指针。 运行结果 实例解析 设两个数表的首元素指针分别为pa和pb,两个数表分别有元素an和bn个。另外,引入两个指针变量ca和cb,分别指向两个数表的当前访问元素。由于两个数表从小到大有…

PostgreSQL学习手册(PL/pgSQL过程语言)【转】

原文http://www.cnblogs.com/stephen-liu74/archive/2012/06/06/2312759.html 一、概述: PL/pgSQL函数在第一次被调用时,其函数内的源代码(文本)将被解析为二进制指令树,但是函数内的表达式和SQL命令只有在首次用到它们的时候,…

Nginx 笔记与总结(14)expires 缓存设置

设置缓存,可以提高网站性能。 当网站的部分内容,比如新闻站的图片,一旦发布就不太可能发生更改,此时需要用户在访问一次页面之后,把该页面的图片缓存在用户的浏览器端一段时间,就可以用到 nginx 的 expires…

WP7应用开发笔记(8) IP输入框控件

因为需要在手机上配置IP,我需要一个界面输入IP地址,虽然直接使用TextBox,但是这样不太友好,我希望能够有和Windows网络设置上一样的IP输入框。所以决定写一个自定义控件。 设计控件外观 4个TextBox和3个显示“.”的TextBlock就可以…

C#并发实战Parallel.ForEach使用

前言:最近给客户开发一个伙食费计算系统,大概需要计算2000个人的伙食。需求是按照员工的预定报餐计划对消费记录进行检查,如有未报餐有刷卡或者有报餐没刷卡的要进行一定的金额扣减等一系列规则。一开始我的想法比较简单,直接用一…

[MSDN]ASP.NET MVC2(5)MVCRoute和urls

说明:本内容来自微软的webcast,讲师为苏鹏。视频没有书方便(想看哪页就看哪页),所以抄录要点和老师语录。 内容介绍 - url和routes介绍 - routes匹配url的工作方式 - 使用routes Router对象mvc运转的核心。 预备知…

一个、说到所有的扩展指标

版权声明:本文博客原创文章,博客,未经同意,不得转载。

张小娴的文章,喜欢的,贴来存档

爱情是不能报复的爱情是不能报复的。一旦采取报复行动,你只会失去它。有些女人很傻,她以为以牙还牙就可以挽回一段爱情。男朋友在外面有女人,于是,她也去找男人。然而,两者的分别却是她男朋友找自己喜欢的女人&#xf…

MessagePack Java Jackson Dataformat 在 Map 中不使用 String 为 Key 的序列化

当你希望在 Map 中不使用 String 为 Key,那么你需要使用 MessagePackKeySerializer 来为 key 进行序列化。 本测试方法,可以在 https://github.com/cwiki-us-demo/serialize-deserialize-demo-java/blob/master/src/test/java/com/insight/demo/serializ…

批量获取远程计算机MAC

功能及用途 用于采集局域网所有计算机信息主要是mac地址,ip地址,主机名。 格式化读写函数 fprintf()格式化写 fscanf()格式化读 使用说明 IP文件:ip.txt IP文件格式:ip空格其他信息 IP文件和该执行文件放同一目录 代码 // ALLMAC.…

网络通信和网络编程

一、软件结构 C/S Client/Server B/S Browser/Server 二、网络通信协议 1、协议分类 UDP 应用: TCP/IP 三、网络编程三要素 1、协议(UDP、TCP/IP) 2、IP地址 3、端口号 转载于:https://www.cnblogs.com/wmqiang/p/11333351.html

[Android] 输入系统(二)

在上一篇文章的最后,我们发现InputDispatcher是调用了InputChannel->sendMessage把键值发送出去,那么相应的,也有接收键值的地方。接收函数是InputChannel->receiveMessage。 在InputConsumer::consume内找到了receiveMessage&#xff…

字体--Ubuntu手记之系统配置

今天上午终于实现了一次无windows办公。但是一上午下来竟然感到有些眼睛花,也不知道是因为ubunbtu的字体没配好,于是开始琢磨着下几个字体,还是照老规矩,先到社区里面搜。找到一个比较好的地址里面的字体比较多,"…

MM 常用table

*------------------------------------------------* MM 模块总结*------------------------------------------------mara " 物料主表makt " 物料描述 likp " 销售订单-Headerlips " 销售定单-Itemproj " 项目定义prps " 采购定…

TCP协议和套接字

一、TCP通信概述,逻辑连接就是三次握手 二、客户端和服务端实现TCP协议通信基本步骤 1、客户端套接字对象 Socket 2、服务端套接字ServerSocket 客户端补充完整代码:除了创建各自的Socket对象有关代码,其他代码一样,就输出流的输出…

【常用术语缩写】

---abbreviation--- href:Hypertext Reference的缩写。意思是超文本引用;gc()方法:garbage collector;MDI(Multiple Document Interface)就是所谓的多文档界面;ifconfig: network interfaces configuring,网络接口配置…

[摘抄]MySQL数据库系统的常规管理介绍

在运行数据库系统时, MySQL的使用相当简单,且进行MySQL安装和使用所需的工作也很少。然而,不论您是什么级别的专家,MySQL的安装程序都不能自动运行。必须有人来监视它以确保它能顺利和有效地运行,有时还必须知道当问题…

齐博V7仿爱丽图库模板(含齐博图库V1.0模板)

齐博模板图片模板 本齐博模板包含两个版本,分别适用于齐博V7整站的图片模型模板和齐博图库程序V1版。 1、图片独立频道页设置 整站后台添加独立频道页面名称:图片专题 网页头部模板:************************ 网页中间模板:******…

我的第一份工作 (2007.2.28--2008.2.28) 上海三高计算机中心有限公司

在这整整的一年的时间里,我完成了从学生到工人的转变, 知识也积累了挺多, 转载于:https://www.cnblogs.com/xinhua327/articles/1085169.html