STM32踩坑:UCOSIII下串口中断服务中使用OSIntEnter函数使程序卡死解决方案

news2024/11/16 8:22:41

UCOSIII下串口中断服务中使用OSIntEnter函数使程序卡死解决方案

本文侧重于 STM32 标准库,HAL 库可以借鉴,因为该项目是基于标准库做的(因为涉及到保密,这里我就张贴源码进行描述了)。

因项目需求,需要使用RTOS实时操作系统来完成单片机程序的应用开发,今天在串口模块开发完成后自测,功能实现没有问题,问题出在串口在高频数据收发下,会造成整个程序卡死(因为只对串口收发模块做了改动,所以可以直接锁定问题出处,就死在串口收发上),用Debug进行程序调试,发现卡死的程序最终都会跑飞,一直在中断函数HardFault_Handler中死循环。

/**
  * @brief  This function handles Hard Fault exception.
  * @param  None
  * @retval None
  */
void HardFault_Handler(void)
{
  /* Go to infinite loop when Hard Fault exception occurs */
  while (1)
  {
  }
}

在学习了众多资料后,得出了一个结论,就是只要是中断函数,我们都把函数 OSIntEnter 与 函数 OSIntExit 怼起来(这里加删除线的原因是因为,这句话大部分时候是正确的,但有时候还是不管用,不要记住这句话,因为他是不完美的) ,大致形式如下:

void XXX_IRQHandler()
{
	OSIntEnter();

	。。。

	OSIntExit();
}

基于以上的形式,我对串口中断服务函数做了相同的处理,为了避免中断被打断,我还加了函数 OSSemPend 与函数 OSSemPost 来确保串口在数据接收过程中不被打断,在中间还使用了函数 OSQPost 来提交消息队列,把完整有效的数据帧传递到一个任务中进行处理。

在高频的串口数据收发模式下,我在网上查阅了很多资料,然而并没有把问题解决掉,我看有篇文章说有情况下的函数 OSIntEnter 使用会带来很大开销,然后又用 ChatGPT 查了一下,初步判定函数 OSIntEnter 对程序卡死会有一定影响,屏蔽掉函数 OSIntEnter 与 函数 OSIntExit 后,测试,还是会卡死,不过正常使用的次数多了几次,接着把函数 OSSemPend 与函数 OSSemPost 也给屏蔽掉,发现串口高频收发正常了,程序也不会卡死了。

下面是一些chatGPT的截图:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

学习分享,一起成长!以上为小编的经验分享,若存在不当之处,请批评指正!

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

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

相关文章

广域网技术——ppp,pppoe

目录 PPP协议概述 PPP协议原理 PPP协议三大组件: PPP链路建立流程 PPP连接建立接口状态: LCP协议报文格式 PPP协议报文格式: 1,链路层建立连接过程 LCP协商过程-正常协商 LCP协商-参数不一致 LCP协商-参数不识别 2&#xf…

JVM调优工具及其相关配置

1.查看JVM配置及其应用使用情况 1.1在启动应用中进行测试 1jsp命令的使用 1.jsp查看当前启动的程序 2.查看相关堆中对象的使用情况 jmap -histo 16700>./log.txtnum:序号instances:实例数量bytes:占用空间大小class name:类…

记录 | 将Word生成的静态网页部署到Github Page

任务描述 使用Word, 可以直接获得 一个静态的网页XXX.html和对应的文件夹XXX.files问题:如何将它托管在github上? 步骤 使用github pages进行托管和发布 步骤1:创建仓库 创建一个新的GitHub仓库:访问 https://github.com 并使用…

matplotlib模块

目录 ❤ 条形图 ❤ 直方图 ❤ 折线图 ❤ 散点图直线图 ❤ 饼图 ❤ 箱型图 ❤ plot函数参数 ❤ 图像标注参数 ❤ Matplolib应用 python从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129328397?spm1001.2014.3001.5502 …

物联网Lora模块从入门到精通(九)Flash的读取与存储--结题

一、前言 这将是"物联网Lora模块从入门到精通"系列的最后一篇文章,相信各位同僚通过前面八篇文章的分享已经极好的掌握了Lora模块的编程,本文的Flash的读取与存储将是Lora模块开发的最后一块,感谢大家的陪伴与支持! 希望…

SpringCloud(五)

文章目录 负载均衡策略自定义负载均衡策略饥饿加载 负载均衡策略 负载均衡的规则都定义在IRule接口中,而IRule有很多不同的实现类: 不同规则的含义如下: 内置负载均衡规则类规则描述RoundRobinRule简单轮询服务列表来选择服务器。它是Ribb…

Redis高级特性之慢查询的基本概念

慢查询概念 作为存储系统,Mysql等等,提供慢查询日志帮助开发和运维人员定位系统存在的满操作。慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预期阈值,便会将这条命令的相关信息。例如发生的时间,耗…

【零基础学JS - 10 】javaScript 中的比较和逻辑运算符

👨‍💻 作者简介:程序员半夏 , 一名全栈程序员,擅长使用各种编程语言和框架,如JavaScript、React、Node.js、Java、Python、Django、MySQL等.专注于大前端与后端的硬核干货分享,同时是一个随缘更新的UP主. 你可以在各个…

mysql8安装【含mysql安装包】

mysql8安装【含mysql安装包】 安装包等资源安装流程 安装包等资源 安装包下载地址【CSDN免费】:https://download.csdn.net/download/qq_47168235/87881866 如果上面的个下载不了,就通过百度网盘吧 百度网盘连接:https://pan.baidu.com/s/1G…

pycharm使用之torch_sparse安装

正式安装之前要先查看一下torch的版本 一、查看torch版本 1、winR ,输入cmd 2、输入python 3、 输入import torch,然后输入torch.__version__,最后回车 可以看到我的torch版本是1.10.0 二、下载合适的torch_sparse版本 1、打开链接 https…

[LsSDK][tool] ls_syscfg_gui2.1 and ls_syscfg_debug1.0

文章目录 一、简介1.工具的目的2. 更新点下个更新 三、配置文件 一、简介 1.工具的目的 ① 可视化选择IO口功能。 ② 自由配置IO支持的功能。 ③ 适用各类MCU,方便移植和开发。 ④ 功能配置和裁剪(选项-syscfg-待完成–需要适配keil语法有些麻烦&#…

只需一个Prompt,ChatGPT秒变万能导师,轻松学习任意领域知识

AI正在改变我们生活的方方面面,包括我们学习的方式。AI已经证明自己有能力成为我们的助手甚至是老师,帮助我们更有效地获取知识。 拿ChatGPT来说,我们平时有什么问题都可以向它提问,不过想让它更高效的帮助我们,还是需…

C++多态和文件读写

C黑马,每天1.5倍速2个视频(1小时),看到9月1日完成314个视频 目录 🔑多态 🌳基本语法 🌳原理剖析 🌳案例1 -- 计算器类 🌳纯虚函数和抽象类 🌳案例2 --…

区块链世界的大数据入门之zkMapReduce简介

1. 引言 跨链互操作性的未来将围绕多链dapp之间的动态和数据丰富的关系构建。Lagrange Labs 正在构建粘合剂,以帮助安全地扩展基于零知识证明的互操作性。 2. ZK大数据栈 Lagrange Labs 的ZK大数据栈 为一种专有的证明结构,用于在任意动态分布式计算的…

Nginx本地启动前端Vue项目

1.Nginx下载及安装 下载地址:nginx: download 下载stable稳定版本,解压安装包 2.前端项目打包 使用cnpm/npm run serve 或 yarn serve将前端项目打包,记录dist文件夹路径 3.nginx.conf 填写 根目录下conf文件夹有nginx.conf文件&#xf…

Linux——Centos系统中网络连接的三种方式(如何修改VMware的IP地址?)

一、CentOS系统中,三种常见的网络连接模式 我们在前面搭建Linux环境中使用了虚拟机的方式进行(后续也会发文演示用Docker来搭建Linux环境)。在虚拟机中选择安装CentOS系统,然后当时在安装流程的时候选择了NAT模式,但是…

MySQL基础知识:索引

一、索引基础知识 (一)辅助索引/二级索引 叶子节点除了包含键值以外,每个叶子节点中的索引行中还包含了一个书签( bookmark) (每个索引一颗B树,不包含行记录的全部数据) (二) 回表…

第一章 数据处理篇:数据集读取和构建

说在前面的话 满打满算工作也有三年了,还是没有感觉到自己和刚毕业相比有什么明显的进步。 严格来讲,代码力确实有提升,对各类工具的使用也更加熟练。但是对算法的理解和从0开始编程的能力仍然没有什么长进。归根到底,是因为在工作…

算法学习day18

文章目录 513.找树左下角的值递归迭代 112 .路径总和递归迭代 113.路径总和II递归 106.从中序与后序遍历序列构造二叉树递归 105.从前序与中序遍历序列构造二叉树卡尔递归版本递归优化 总结 513.找树左下角的值 给定一个二叉树的 根节点 root,请找出该二叉树的 最底…

PPT里文字太多如何排版-一口气教你7种布局瞬间让PPT高大上起来

简介 这是我们学PPT处于初级到中级进化阶段常做的一件事,就是拿了这种纯文字类版面来做布局。而且这种文字都是政企类的、相当苦涩难懂、无法创意。 因此我们会要求使用7种排版来优化这个版面。这和达芳奇画鸡蛋很像,这样的练习需要坚持一段时间,就是拿了纯文字来beautifu…