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

时间:2019-08-10 14:39:47  来源:  作者:  所属栏目:其他服务端

这里将告诉您FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法,教程操作方法:出现问题场景:

作为刚接触FreeRTOS实时操作系统的菜鸟,我在练

这里将告诉您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函数了。这样,我的问题就解决了。FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法就为您介绍到这里,感谢您关注懒咪学编程c.lanmit.com.

本文地址:https://c.lanmit.com/czxt/qita/8799.html

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

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

    出现问题场景: 作为刚接触FreeRTOS实时操作系统的菜鸟,我在练习一个程序功能:按键3按下,将LED闪烁的任务挂起:按键4按下,将LED闪烁的任务恢复到就绪.按键使用外部中断.恢复就绪的语句是 x ...

  2. c语言野指针导致问题,C语言进阶之路(三)----野指针的产生原因及解决办法

    1.会产生野指针的做法 #include //这就是一种错误的写法 int main(){ int *p = NULL; p = (int *)malloc(); //释放P所指向的内存空间,但指针变 ...

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

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

  4. codeblock的c语言编译,CodeBlocks无法编译的原因和解决办法

    原标题:CodeBlocks无法编译的原因和解决办法 CodeBlocks16.01最新版百度云下载(安装包内含编译器) https://pan.baidu.com/s/1kWjtmKJ CodeBl ...

  5. DEV C++编写程序出现 [errror]Id returned 1 exit status报错可能出现的原因及解决办法

    前言: 在DEV C++编写程序时总是出现出现 [errror]Id returned 1 exit status报错,但是却找不到任何问题(气死人了),我就为此问题困扰了好几个月,看遍了所有网页.博 ...

  6. Win7下双击U盘,”找不到应用程序”的原因与解决办法

    Win7下双击U盘,"找不到应用程序"的原因与解决办法 1. 打开注册表,直接在WIN7下按WIN+R调出输入 regedit回车即可打 2. 直接展开如下的注册表项: HKEY_ ...

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

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

  8. STM32F103ZE单片机在WWDG窗口看门狗的EWI中断中喂狗导致系统复位的原因及解决办法(中断函数重入问题)

    版权声明:本文为博主原创文章,欢迎转载    https://blog.csdn.net/ZLK1214/article/details/78308058 程序开启了WWDG的Early wakeup ...

  9. 此程序将从您的计算机删除adobe,电脑中安装Adobe软件时提示该程序已安装的最佳解决方案...

    很多用户都喜欢在电脑中安装这款Adobe软件来使用,不过有时候会碰到一些故障,就有用户在电脑中安装Adobe软件的时候,却提示该程序已安装或者无法安装的现象,这是怎么回事呢,经过分析一般是之前安装过没 ...

最新文章

  1. iOS 7 — navigationController is setting the contentInset and ContentOffset of my UIScrollView
  2. 无招胜有招之Java进阶JVM(三)内存模型
  3. 第013课_代码重定位
  4. hadoop简介(大数据技术)
  5. 【ElasticSearch】Es 源码之 LifecycleComponent 源码解读
  6. UVA10493 Cats, with or without Hats【组合】
  7. request payload怎么发_如果不是你,我也不会发朋友圈
  8. String、StringBuilder、StringBuffer、StringConcatFactory
  9. 数仓OLAP基础知识
  10. MYSQL相比于其他数据库有哪些特点?
  11. 华为笔记本换装linux双系统,matebook的win+ubuntu双系统安装方法
  12. java 前置零_程序员面试必考题(二十二):Java中的前置条件和后置条件
  13. 网络安全之手机安全使用手册
  14. USB总线驱动及鼠标驱动实例
  15. 2019年中国社交电商行业市场分析:社交电商巨头已浮出水面
  16. Shift键变成大小写切换怎么换回Caps lock键
  17. Flash之SM25QH128M、JFM25F32A读写操作FPGA Verilog实现
  18. 网吧XP无盘系统集成优化及母盘封装
  19. 2012年1月房价排行
  20. Matlab图像处理rgb2ind函数

热门文章

  1. 《构架之美》阅读笔记三
  2. XP或Win7系统下grub4dos安装双系统ubuntu(32或64)
  3. [转]进程,线程和多线程
  4. 2018年第九届蓝桥杯 第五题:快速排序 (满分9分)
  5. django定义模型类-14
  6. 算法学习--Day5
  7. loadrunner—事务、TPS
  8. 给JBoss种蛊分析
  9. RabbitMQ introduction
  10. 这些年书读太少,没有读进去