【笔记】单片机卡死的八大原因和解决方法

80ff6d7417c80130fd61319727081803.png

在微控制器上,程序卡住(即停止执行)可能有多种原因。下面我将列举一些常见的原因,并提供一些可能导致程序卡住的示例情况。请注意,这里只是一些示例,并不能穷尽所有可能的情况。

1. 死循环(Infinite Loop):在程序中存在无法跳出的循环结构,导致程序无法继续执行。例如:

while(1)
{// 执行某些操作
}

如果该循环没有跳出条件,或者跳出条件永远不满足,程序将永远停留在这个循环中。

2. 中断问题:某个中断服务程序(ISR)出现错误,导致无法正确返回主程序。例如:

void EXTI_IRQHandler(void)
{// 处理外部中断事件// 没有正确清除中断标志,导致一直触发中断
}

如果中断服务程序没有正确处理中断标志,将导致中断一直触发,从而导致程序卡住。

3. 资源争用(Resource Conflict):多个任务或中断竞争同一个资源,导致死锁或资源无法释放。例如:

void Task1(void)
{while(1){// 任务1使用某个共享资源// 没有正确释放资源,导致其他任务无法访问}
}void Task2(void)
{while(1){// 任务2使用相同的共享资源}
}

如果任务1没有正确释放共享资源,任务2将无法获得该资源,从而导致程序卡住。

4. 初始化问题:某些硬件或外设没有正确初始化,导致程序无法正常运行。例如:

int main(void)
{// 初始化代码// 某个外设初始化失败,导致无法继续执行while(1){// 此处可能添加错误处理或调试代码}
}

如果某个外设初始化失败,可能会导致程序卡住在错误处理或调试代码处。

5. 堆栈溢出(Stack Overflow):程序使用的堆栈空间超出了预分配的大小,导致程序无法继续正常执行。例如:

void RecursiveFunction(void)
{// 递归调用函数,没有递归出口条件RecursiveFunction();
}int main(void)
{RecursiveFunction();while(1){// 无法到达这里,程序卡住}
}

在递归函数中,如果没有递归出口条件,将导致堆栈溢出,程序卡住。

6. 时钟问题:某些外设或模块需要正确的时钟配置才能正常工作。如果时钟配置错误或时钟源不正确,可能导致程序停止执行。例如:

int main(void)
{   // 时钟配置错误,外设无法正常工作      while(1)    {        // 无法到达这里,程序卡住    }
}

如果时钟配置错误,例如外设使用了错误的时钟源或时钟分频配置,将导致外设无法正常工作,从而导致程序卡住。

7. 外设等待问题:某些外设需要等待一些特定条件的发生才能继续执行。如果这些条件无法满足,程序将无法继续执行。例如:

int main(void)
{// 某个外设等待某个事件发生while(1){// 无法到达这里,程序卡住}
}

如果外设等待的事件没有发生,例如等待一个数据传输完成或一个标志位的设置,程序将无法继续执行。

8. 外部设备问题:与外部设备通信时,如果设备未正确响应或数据传输中断,可能导致程序停止执行。例如:

int main(void)
{// 与外部设备进行通信// 设备未正确响应或数据传输中断while(1){// 无法到达这里,程序卡住}
}

如果外部设备未正确响应或数据传输中断,程序将停止执行,因为没有处理该情况的代码。

总之,程序卡住的原因有很多,包括死循环、中断问题、资源争用、初始化问题、堆栈溢出、时钟问题、外设等待问题和外部设备问题等。在调试时,可以通过使用调试器、日志输出、错误处理机制和逐步执行等方法来定位和解决这些问题。每个具体的情况可能需要根据具体的硬件平台、软件配置和应用需求进行调试和排查。

==========

往期回顾:

【PID专题】MATLAB如何实现PID?

【PID专题】控制算法PID之微分控制(D)的原理和示例代码

【PID专题】控制算法PID之积分控制(I)的原理和示例代码

【PID专题】控制算法PID之比例控制(P)的原理和示例代码

==========

5221d990487af9e6b5eb69aa98a69bdb.png

8447347234b06a4d912f6846e55702b9.png

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

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

相关文章

Nignx安装负载均衡动静分离以及Linux前端项目部署将域名映射到特定IP地址

目录 一、nginx简介 1.1 定义 1.2 背景 1.3 作用 二、nginx搭载负载均衡提供前后分离后台接口数据 2.1 nginx安装 2.1.1 下载依赖 2.1.2 下载并解压安装包 2.1.3 安装nginx 2.1.4 启动nginx服务 2.2 tomcat负载均衡 2.2.1 负载均衡所需服务器准备 2.2.2 配置修改 …

2022年12月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 列表L1中全是整数,小明想将其中所有奇数都增加1,偶数不变,于是编写了如下图所示的代…

驱动开发11-2 编写SPI驱动程序-点亮数码管

驱动程序 #include <linux/init.h> #include <linux/module.h> #include <linux/spi/spi.h>int m74hc595_probe(struct spi_device *spi) {printk("%s:%d\n",__FILE__,__LINE__);char buf[]{0XF,0X6D};spi_write(spi,buf,sizeof(buf));return 0; …

阿里云推出AI编程工具“通义灵码“;生成式 AI 入门教程 2

&#x1f989; AI新闻 &#x1f680; 阿里云推出AI编程工具"通义灵码"&#xff0c;支持多种语言及实时续写功能 摘要&#xff1a;阿里云推出了一款名为"通义灵码"的AI编程工具&#xff0c;支持多种主流编程语言&#xff0c;包括Java、Python、Go等。该工…

Redis Sentinel 哨兵模式

Sentinel 哨兵模式 Redis Sentinel 官网 Redis 的 Sentinel 文档 -- Redis中国用户组&#xff08;CRUG&#xff09; Sentinel Redis 命令参考&#xff08;红色&#xff09; Sentinel 通过监控的方式获取主机的工作状态是否正常&#xff0c;当主机发生故障时&#xff0c; Senti…

十年JAVA搬砖路——Linux搭建Ldap服务器。

1.安装命令 yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel2.启动ldap systemctl start slapd systemctl enable slapd3.修改密码 slappasswd Aa123456获得返回的密码加密密码串&#xff1a; {SSHA}DkSw0…

RPC 原理详解

文章目录 什么是 RPCRPC 基本原理RPC核心功能服务寻址数据编解码网络传输一次RPC的调用过程 实践基于HTTP协议的RPC基于TCP协议的RPC 什么是 RPC RPC&#xff08;Remote Procedure Call&#xff09;&#xff0c;即远程过程调用&#xff0c;它允许像调用本地服务一样调用远程服…

Python基础入门例程37-NP37 不低于与不超过(运算符)

最近的博文&#xff1a; Python基础入门例程36-NP36 谁的数字大&#xff08;运算符&#xff09;-CSDN博客 Python基础入门例程35-NP35 朋友的年龄是否相等&#xff08;运算符&#xff09;-CSDN博客 Python基础入门例程34-NP34 除法与取模运算&#xff08;运算符&#xff09;…

07.Diffusion Model概述

文章目录 Diffusion Model原理Reverse ProcessDenoise模块Forward Process(Diffusion Process) 文字生成图片by Diffusion Model文字生成图像的常见套路Text EncoderFrchet Inception DistanceContrastive Language-Image Pre-Training(CLIP) DecoderGeneration Model 部分截图…

Fourier分析导论——第3章——Fourier级数的收敛性(E.M. Stein R. Shakarchi)

第 3 章 Fourier级数的收敛性(Convergence of Fourier Series) The sine and cosine series, by which one can represent an arbitrary function in a given interval, enjoy among other remarkable properties that of being convergent. This property did not escape…

【Midjourney入门教程1】Midjourney的注册、订阅

文章目录 前言一、Midjourney是什么二、Midjourney注册三、新建自己的服务器四、开通订阅 前言 AI绘画即指人工智能绘画&#xff0c;是一种计算机生成绘画的方式。是AIGC应用领域内的一大分支。 AI绘画主要分为两个部分&#xff0c;一个是对图像的分析与判断&#xff0c;即“…

行业观察:数字化企业需要什么样的数据中心

伴随着数字经济在中国乃至全球的高速发展&#xff0c;数字化转型已经成为广大企业的必经之路。而作为数字经济的核心基础设施&#xff0c;数据中心充当了接收、处理、存储与转发数据流的“中枢大脑”&#xff0c;对驱动数字经济发展和企业数字化转型起到了极为关键的重要作用。…

路由器基础(十一):ACL 配置

访问控制列表 (Access Control List,ACL) 是目前使用最多的访问控制实现技术。访问控制列表是路由器接口的指令列表&#xff0c;用来控制端口进出的数据包。ACL适用于所有的被路由协议&#xff0c;如IP、IPX、AppleTalk 等。访问控制列表可以分为基本访问控制列表和高级访问控制…

第10章_创建和管理表

文章目录 1 基础知识1.1 一条数据存储的过程1.2 标识符命名规则1.3 MySQL中的数据类型 2 创建和管理数据库2.1 创建数据库2.2 使用数据库2.3 修改数据库2.4 删除数据库代码演示 3 创建表3.1 创建方式13.2 创建方式23.3 查看数据表结构代码演示 4 修改表4.1 追加一个列4.2 修改一…

shell学习脚本05(小滴课堂)

可以对海量的数据进行提取。 -v对提取的内容进行取反。 -n显示出行号。 -w精确匹配&#xff1a; -i:忽略大小写&#xff1a; -E正则匹配&#xff1a; cut命令&#xff1a; -d指定分隔符&#xff0c;-f指定截取区域&#xff1a; 截取第一列到第三列&#xff1a; 截取第二列到最…

在Python中添加Selenium Web Driver等待

本文将介绍在Python中在Selenium Web驱动程序中添加等待的示例。 Python Selenium Web 驱动程序等待 大多数 Web 应用程序都使用 AJAX 技术。 因此&#xff0c;网页上存在的不同元素需要不同的时间间隔才能完全上传&#xff0c;因为硒在网页上存在之前无法找到任何文本。 我们…

系列六、Mybatis的一级缓存

一、概述 Mybatis一级缓存的作用域是同一个SqlSession&#xff0c;在同一个SqlSession中执行两次相同的查询&#xff0c;第一次执行完毕后&#xff0c;Mybatis会将查询到的数据缓存起来&#xff08;缓存到内存中&#xff09;&#xff0c; 第二次执行相同的查询时&#xff0c;会…

【ML】分类问题

分类问题 classification&#xff1a;根据已知样本特征&#xff0c;判断输入样本属于哪种已知样本类。 常用入门案例&#xff1a;垃圾邮件检测、图像分类、手写数字识别、考试通过预测。 分类问题和回归问题的明显区别&#xff1a; 分类问题的结果是非连续型标签&#xff0c…

【算法|二分查找No.1】leetcode 704. 二分查找+二分模板 leetcode 34. 在排序数组中查找元素的第一个和最后一个位置

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

C/C++ static关键字详解(最全解析,static是什么,static如何使用,static的常考面试题)

目录 一、前言 二、static关键字是什么&#xff1f; 三、static关键字修饰的对象是什么&#xff1f; 四、C 语言中的 static &#x1f34e;static的C用法 &#x1f349;static的重点概念 &#x1f350;static修饰局部变量 &#x1f4a6;static在修饰局部变量和函数的作用 &a…