网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 电子/半导体 > 控制/MCU >

在STM32单片机上运行除零运算的C程序代码时为何

时间:2023-09-14 11:11

人气:

作者:admin

标签:

导读:众所周知,在 C 语言中,当一个数除以0的时候,会导致除法运算异常。程序也会因此崩溃。为了避免程序崩溃,我们需要在代码中包含对 0 的判断。...

众所周知,在 C 语言中,当一个数除以0的时候,会导致除法运算异常。程序也会因此崩溃。 为了避免程序崩溃,我们需要在代码中包含对 0 的判断。 但是呢,在 STM32 单片机上运行除零运算的C程序代码时,却不会出现程序崩溃的现象。这是怎么回事呢?

今天来简单聊一聊这个问题。

聊一聊

按照常规的认知,如果 C 语言程序代码中出现除以零的操作时,会进入异常处理,而导致程序出现异常。 有小伙伴遇到过这种场景,除零操作后续的代码可以正常执行。其单片机为STM32系列单片机。

我们查阅 Cortex-M3 指南,可以看到除以零操作会导致用法异常(Usage Fault)。

af8026ca-52ab-11ee-a25d-92fbcf53809c.png

从中可以得知,进入Usage Fault 是有前提条件的,即 只有在 DIV_0_TRP 置位时才会发生。

通过 DIV_0_TRP 配置,打开除零异常中断捕获。这个位寄存器在 SCB->CCR 寄存器中。

afa4a716-52ab-11ee-a25d-92fbcf53809c.png

默认状态下,DIV_0_TRP 为 0,除零操作不会产生异常,并且得到的结果总是为 0;当将 DIV_0_TRP 配置为1时,将会触发除零异常中断。

afb6380a-52ab-11ee-a25d-92fbcf53809c.png

好了,到此可以解释为何 STM32 单片机默认情况下,进行除零操作,不会出现程序异常崩溃。

另外,除零异常触发 UsageFault ,但是默认情况下,UsageFault 处于被禁用状态。这时,除零异常会进入 HardFault 异常中断。

若想使其进入 UsageFault 则需要通过 SHCSR 寄存器 bit18 进行配置。

afd3cb4a-52ab-11ee-a25d-92fbcf53809c.png






审核编辑:刘清

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信