FreeRTOS | STM32H7串口中断调用FreeRTOS API,导致程序卡死
文章目录
- 一、前言
- 二、串口中断调用xQueueSendFromISR
- 2.1、串口中断回调函数(usart.c)
- 2.2、stm32h7xx_it.c
- 三、调试
- 3.1、串口中断后,程序卡死
- 3.2、卡死原因
- 四、NIVC中断优先级
- 4.1、串口中断优先级
- 4.2、FreeRTOS配置文件的MAX_SYSCALL_INTERRUPT_PRIORITY
一、前言
在网络上搜寻了相关的问题,看一下其他人有没有碰到这个问题。实际上有较多CSDN的博主都碰到这个问题,但能把问题说清楚的博主真的很少。这篇CSDN博文解决了我的问题,只是中断的类型跟我不一样(我使用的是串口中断)。
相关CSDN博文的地址:FreeRTOS死机原因
二、串口中断调用xQueueSendFromISR
我计划将串口中断接收到的字节存放到FreeRTOS的消息队列里,代替裸机系统下的ringbuffer。
2.1、串口中断回调函数(usart.c)
在串口中断回调函数里,需要调用xQueueSendFromISR而不是xQueueSend。
2.2、stm32h7xx_it.c
将函数放进STM32系统中断的回调函数USART3_IRQHandler里,当串口3产生中断时,程序就会进入这个函数里面。
三、调试
3.1、串口中断后,程序卡死
进入MDK调试模式,找到程序卡死的位置。
3.2、卡死原因
FreeRTOS源码的注释里,对产生这个问题的原因进行了描述。
从上面的注释看来,大概的问题应该比较清楚了,就是因为中断优先级造成的。
四、NIVC中断优先级
4.1、串口中断优先级
4.2、FreeRTOS配置文件的MAX_SYSCALL_INTERRUPT_PRIORITY
程序卡死的根本原因是串口的中断优先级比FreeRTOS配置文件上的MAX_SYSCALL_INTERRUPT_PRIORITY要高。在明白问题的本质后,就有解决问题的解决方案:
- 串口中断的中断优先级设置2(比MAX_SYSCALL_INTERRUPT_PRIORITY大一级)。
- 在不修改中断优先级的情况下,串口中断回调函数里不要调用FreeRTOS的API函数。
FreeRTOS | STM32H7串口中断调用FreeRTOS API,导致程序卡死相关推荐
- runtime无法执行grep_Runtime.getRuntime.exec()执行linux脚本导致程序卡死有关问题
Runtime.getRuntime.exec()执行linux脚本导致程序卡死问题 问题: 在Java程序中,通过Runtime.getRuntime().exec()执行一个Linux脚本导致程序 ...
- 串口服务器通讯中断不流畅,在FreeRTOS下串口中断不正常工作,一中断就死机为何?...
CPU: UC3A0512 AVR32Studio 2.1.1 + Tool 2.1.6 中断处理程序如下: 问题描述: 系统跑FreeRTOS系统,开几个任务. 运行正常. 但串口有数据进来的时候立 ...
- Runtime.getRuntime.exec()执行linux脚本导致程序卡死问题
问题: 在Java程序中,通过Runtime.getRuntime().exec()执行一个Linux脚本导致程序被挂住,而在终端上直接执行这个脚本则没有任何问题. 原因: 先来看Java代码: pu ...
- 图解C# 调用Win32 API 示例程序
一 弹出消息框和发声 先上代码:相关函数不解释:网上比较容易查到: using System; using System.Collections.Generic; using System.Compo ...
- Win10中控制台程序输出阻塞导致程序卡死
问题描述: 在win10下运行cmd程序,发现程序回卡死,卡死的时候发现对cmd窗口回车会叫醒 问题原因: 是因为在Win10程序运行的过程中,无意用鼠标左键点击来了控制台,则控制台进入"快 ...
- 小程序入门学习06--data、url传参、调用豆瓣api
豆瓣不能用了,可以用这个 data- 自定义数据属性 设置 <view class='container movie-card' bindtap='f1' data-user-name=&quo ...
- 解决QT接受串口数据时数据更新不及时,串口数据太多导致程序界面崩溃,串口接收数据过快等问题
1.问题背景 最近在使用上位机测试传感器接受数据是否正常,发现了很多问题,由于没有系统的学过Qt,用到什么库就学什么库,导致库中的函数很多不清晰,产生了标题中的一系列问题,经过不断的尝试,终于解决上述 ...
- 嵌入式FreeRTOS系统,在中断中调用FreeRTOS系统的API函数
作为在中断中调用FreeRTOS系统的API函数的参考,disp_str()是显示屏的显示函数会将传入的字符串进行显示. void TIM5_Int_Init(u16 arr,u16 psc) {TI ...
- 梳理STM32F429之通信传输部分---NO.3 串口空闲IDEL中断+DMA+FreeRTOS
梳理STM32F429之通信传输部分---NO.3 串口空闲IDEL中断+DMA+FreeRTOS 目录 一.串口空闲IDEL中断: 二.串口及串口中断的配置: 三.stm32f4xx_it.h 的配 ...
最新文章
- urlparse模块(专门用来解析URL格式)
- 一次性搞定权限树遍历(通用解决方案)
- python中用来占位的语句是_python占位语句
- java的reflection
- 配置MySQL数据库单机多实例
- ehcache 手动刷新缓存_【第 21 期】一个架构师的缓存修炼之路
- 博客搜索引擎索引博文数量分析与评估
- 如何将Windows 10帐户还原为本地帐户(在Windows Store劫持它之后)
- python字符串设置字体_python怎么更改字符串后几位
- 过程(栈帧结构是干货)
- 这几个行业会从物联网革命中获得最大利益
- jQuery 表单验证插件 jQuery Validation Engine 使用
- 【探路者】10月16日立会报告(团队第1周-第3次)
- 运行Django,Python崩溃
- OverFeat心得
- 被头条开除了....
- 中国步进电机市场现状研究分析与发展前景预测报告(2022)
- 头戴式蓝牙耳机,出现左耳没有声音,右耳正常。
- 不会linux也没关系,点击鼠标即可完成的LDSC分析来了
- 解决iview weapp的i-input组件在微信开发者工具中不能输入值的问题