STM32中除零运算,为何程序不崩溃?
在 C 语言中,除零运算会导致异常吗?

在 C 语言中,当一个数除以零时,会导致除法运算错误,通常表现为“除以零”错误或被称为“浮点异常”(floating-point exception)。
对于整数除法,C 语言标准规定除数不能为零。如果在程序中进行整数除法时除数为零,会导致 undefined behavior(未定义行为),这意味着程序的行为将是不确定的,可能导致崩溃或产生不正确的结果。为了避免这种情况,应该在进行除法运算前,检查除数是否为零。
对于浮点数除法,当除数为零时,C 语言标准规定结果是正无穷大(positive infinity)或负无穷大(negative infinity),并且不会引发异常。但在某些环境中,可能会通过浮点异常来报告这种情况,这取决于编译器和执行环境的具体实现。
以下是一个整数除法的例子,展示了当除数为零时可能导致的问题:
#include <stdio.h>int main() {int num = 10;int deno = 0;// 检查除数是否为零if (deno != 0) {int result = num / deno;printf("Result: %d\n", result);} else {printf("Error: Division by zero!\n");}return 0;
}
这个例子中,如果deno为零,程序会输出错误消息并避免执行除法运算。
为何STM32中除零运算程序不崩溃?

在某些嵌入式系统(包括STM32单片机)上,对除零错误的处理方式可能不同于一般的桌面计算机系统。在嵌入式系统中,为了提高系统的可靠性和稳定性,通常会对硬件进行配置,使其在发生一些异常条件时能够提供适当的处理而不是导致程序崩溃。
STM32单片机采用的是ARM Cortex-M架构,而这个架构的处理器通常具有对异常处理的灵活性。具体来说,ARM Cortex-M处理器允许通过中断和异常向量表(Interrupt and Exception Vector Table)来处理各种异常情况,包括除零错误。
当在STM32单片机上运行除零运算的C程序时,如果发生除零错误,处理器可能会引发一个异常,然后通过相应的异常处理程序进行处理。在这种情况下,程序不会直接崩溃,而是有可能进入一个特殊的异常处理状态。这样的处理方式允许嵌入式系统采取适当的措施,例如记录错误、执行特定的错误处理代码,或者重置系统以确保其正常运行。
需要注意的是,确切的行为取决于所使用的编译器、编译选项以及STM32芯片上的具体配置。如果在程序中进行了除零运算而没有相应的异常处理,系统可能仍然会出现问题,但具体情况可能会因芯片型号和配置而异。在编写嵌入式系统的代码时,可以查阅相关的芯片手册和编译器文档,以了解异常处理的详细信息。
结论
在一些特殊的硬件或嵌入式系统环境中,包括一些 STM32 单片机上,除零操作可能不会导致程序崩溃,而是触发硬件中断或异常。这种行为通常与硬件架构和嵌入式系统的设计有关。
在一般的桌面计算机或服务器上,当执行除零操作时,操作系统会捕获异常并终止程序,以防止对整个系统的影响。但在嵌入式系统中,特别是一些实时操作系统(RTOS)或裸机环境下,系统可能允许程序继续执行,并通过硬件中断或异常处理机制来处理除零情况。
在 STM32 单片机上,这种行为可能是由硬件的浮点单元(FPU)引起的。STM32 系列中的一些型号具有硬件 FPU,它们支持浮点运算,并且可能具有对浮点异常的处理能力。当发生除零操作时,硬件 FPU 可能生成一个浮点异常,并通过中断或异常向量表中的相应处理程序来处理,而不是导致程序终止。
要注意的是,这种行为可能取决于编译器的优化设置、使用的编译器版本以及编译器对浮点运算的处理方式。有些编译器可能会优化除零操作的代码,使其不会引起程序中断或异常。在嵌入式系统中,通常需要详细查阅芯片手册、编译器文档以及相关工具链的文档,以了解具体的行为和配置选项
在任何情况下,依赖于未定义行为(如除以零)可能会导致不可预测的结果,因此最好的做法是在代码中显式检查除零情况,并采取适当的措施来处理或避免这种情况。
相关文章:
STM32中除零运算,为何程序不崩溃?
在 C 语言中,除零运算会导致异常吗? 在 C 语言中,当一个数除以零时,会导致除法运算错误,通常表现为“除以零”错误或被称为“浮点异常”(floating-point exception)。 对于整数除法,…...
sprinbboot 2.7启动不生成日志文件
新增了一个springboot项目,通过idea 调试,并且在idea 的vm options中指定-Dlogging.configclasspath:logback-pro.xml 或者 -Dlogging.configclasspath:logback-dev.xml 都能正常生成对应的日志文件。 部署到测试环境以及生产环境,日志文件却…...
Kafka - 3.x 图解Broker总体工作流程
文章目录 Zk中存储的kafka的信息Kafka Broker总体工作流程1. broker启动后向zk中注册2. Controller谁先启动注册,谁说了算3. 由选举出来的Controller监听brokers节点的变化4. Controller决定leader选举5. Controller将节点信息上传到Zk中6. 其他Controller从zk中同步…...
APP自动化测试 ---- Appium介绍及运行原理
在面试APP自动化时,有的面试官可能会问Appium的运行原理,以下介绍Appium运行原理。 一、Appium介绍 1.Appium概念 Appium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试。它使用WebDriver协议驱动IOS…...
学习模板发布
学习目标: 提示:这里可以添加学习目标 例如: 一周掌握 Java 入门知识 学习内容: 提示:这里可以添加要学的内容 例如: 搭建 Java 开发环境掌握 Java 基本语法掌握条件语句掌握循环语句 学习时间&#x…...
Hive 视图和索引
1.视图 1.1 简介 Hive 中的视图和 RDBMS 中视图的概念一致,都是一组数据的逻辑表示,本质上就是一条 SELECT 语句的结果集。视图是纯粹的逻辑对象,没有关联的存储 (Hive 3.0.0 引入的物化视图除外),当查询引用视图时,Hive 可以将视图的定义与查询结合起来,例如将查询中的过…...
EtherCAT主站SOEM-- 0 SOEM下载编译及文件功能介绍
0 介绍EtherCAT主站SOEM文件及主要功能函数 1. soem介绍:2 soem主要功能文件说明:3 soem下载链接4 编译soem4.1 Windows (Visual Studio):4.2 Linux & macOS: 该文档修改记录:总结 1. soem介绍: SOEM&…...
【Python机器学习】零基础掌握RFE特征选择
如何在数据分析中选出关键特征? 面对大量、高维度的数据,如何有效地选取关键特征以提高模型效率和准确度?这是数据分析领域中常见的问题。解决这个问题的一种方法就是递归特征消除(RFE)算法。 假设一个房地产公司希望预测房价,他们收集了很多关于房子的信息,如面积、房…...
R语言的极值统计学、分位数回归、机器学习方法
受到气候变化、温室效应以及人类活动等因素的影响,自然界中极端高温、极端环境污染、大洪水和大暴雨等现象的发生日益频繁;在人类社会中,股市崩溃、金融危机等极端情况也时有发生;今年的新冠疫情就是非常典型的极端现象。研究此类…...
【SpringCloudNetflix】一图理解Spring Cloud Netflix解决了那些微服务问题?
什么是微服务理解: SpringCloudNetflix解决的问题理解: SpringCloudNetflix核心点: 注册中心:Eureka负载均衡:Ribbon、Feign服务熔断:Hystrix服务降级:Hystrix服务监控:Hystrix Da…...
C++环境配置【学习笔记(一)】
文章目录 1、安装 VS Code 插件2、VS Code SSH远程连接Ubuntu主机3、编写py程序及 debug4、编写C程序5、C程序的 debug6、附录:vs code 中变量解释 C开发工具:Visual Studio Code 下载地址: 地址 其中本文将介绍使用 VS Code ssh 远程连接 a…...
Python数据结构——树
树(Tree)是一种重要的数据结构,它在计算机科学中被广泛应用,用于构建层次结构、组织数据和解决各种问题。本文将详细介绍Python中树数据结构的使用,包括二叉树、二叉搜索树、平衡二叉树等,并提供示例代码来…...
Simulink和GUI联合使用
1、内容简介 略 9-可以交流、咨询、答疑 2、内容说明 Simulink和GUI联合使用 Simulink、GUI、参数传递 3、仿真分析 4、参考论文 略...
【0基础学Java第一课】-- 初始Java
目录 1. 初识java1.1 Java是什么1.2 Java应用领域1.3 Java语言发展简史1.4 Java语言特性1.5 JRE与JDK1.6 Java开发环境1.6.1 安装JDK1.6.2 配置环境变量 1.7 初始Java中main函数1.7.1 JDK、JRE、JVM之间的关系 1.8 注释1.9 标识符1.10 关键字 1. 初识java 1.1 Java是什么 Jav…...
osg3.4的插件及功能
OpenSceneGraph(OSG) 学习之 核心结构(基础篇)-CSDN博客 OSG源码中主要包含17个库,每个库的功能如所示表 1 OSG核心库功能...
『力扣刷题本』:轮转数组
一、题目 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,…...
Java关于实例对象调用静态变量和静态方法问题
直接去看原文 原文链接:Java关于实例对象调用静态变量和静态方法问题_java对象可以调用static方法吗_骑个小蜗牛的博客-CSDN博客 --------------------------------------------------------------------------------------------------------------------------------- 实例…...
【开源】基于SpringBoot的海南旅游景点推荐系统的设计和实现
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四、核心代码4.1 随机景点推荐4.2 景点评价4.3 协同推荐算法4.4 网站登录4.5 查询景点美食 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的海南旅游推荐系统ÿ…...
字符串中的assert和strcat
assert:函数原型是:void assert( int expression );其作用是现计算表达式 expression ,如果其值为假(即为0),那么它先 stderr 打印一条出信息,然后通过调用 abort 来终止程序运行。使用assert 的缺点是,频繁的调用会影…...
方舟生存进化ARK个人服务器搭建教程保姆级
方舟生存进化ARK个人服务器搭建教程保姆级 大家好我是艾西,在很久之前我有给大家分享过方舟生存进化的搭建架设教程,但时间久远且以前的教程我现在回头看去在某些地方说的并不是那么清楚。最近也是闲暇无事打算重新巩固下方舟生存进化的搭建架设教程&…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...
算法—栈系列
一:删除字符串中的所有相邻重复项 class Solution { public:string removeDuplicates(string s) {stack<char> st;for(int i 0; i < s.size(); i){char target s[i];if(!st.empty() && target st.top())st.pop();elsest.push(s[i]);}string ret…...
游戏开发中常见的战斗数值英文缩写对照表
游戏开发中常见的战斗数值英文缩写对照表 基础属性(Basic Attributes) 缩写英文全称中文释义常见使用场景HPHit Points / Health Points生命值角色生存状态MPMana Points / Magic Points魔法值技能释放资源SPStamina Points体力值动作消耗资源APAction…...
基于Java项目的Karate API测试
Karate 实现了可以只编写Feature 文件进行测试,但是对于熟悉Java语言的开发或是测试人员,可以通过编程方式集成 Karate 丰富的自动化和数据断言功能。 本篇快速介绍在Java Maven项目中编写和运行测试的示例。 创建Maven项目 最简单的创建项目的方式就是创建一个目录,里面…...
