0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

Dp1040 来源:一起学嵌入式 2023-09-14 11:11 次阅读

众所周知,在 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






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5334

    浏览量

    120208
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136611
  • 触发器
    +关注

    关注

    14

    文章

    2000

    浏览量

    61124
  • Cortex-M3
    +关注

    关注

    9

    文章

    269

    浏览量

    59462
  • STM32单片机
    +关注

    关注

    59

    文章

    549

    浏览量

    58700

原文标题:STM32单片机除零运算为何程序不崩溃?

文章出处:【微信号:玩点嵌入式,微信公众号:玩点嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    IC卡的读写程序 (C语言源程序代码)

    IC卡的读写程序 (C语言源程序代码)
    发表于 03-25 08:56 354次下载

    基于51单片机的EEPROM的源程序代码

    基于51单片机的EEPROM的源程序代码
    发表于 11-16 19:04 37次下载

    频率计程序代码

    51单片机C语言应用开发 程序代码+原理图 频率计程序代码
    发表于 06-29 18:28 12次下载

    公路温度采集系统程序代码

    51单片机C语言应用开发 程序代码+原理图
    发表于 07-01 15:01 1次下载

    晶闸管数字触发控制器程序代码

    51单片机C语言应用开发 程序代码+原理图
    发表于 07-01 15:21 3次下载

    音乐播放器程序代码

    51单片机C语言应用开发 程序代码原理图
    发表于 07-01 15:21 5次下载

    GPS定位导航系统程序代码

    51单片机C语言应用开发 程序代码原理图
    发表于 07-01 15:21 1次下载

    公交车自动报站系统程序代码

    51单片机C语言应用开发 程序代码原理图
    发表于 07-01 15:21 5次下载

    汽车自动刹车系统程序代码

    51单片机C语言应用开发 程序代码原理图
    发表于 07-01 15:21 2次下载

    51单片机抢答器程序代码

    51单片机制作抢答器程序代码,感兴趣的小伙伴们可以看看。
    发表于 08-05 17:32 6次下载

    基于51单片机的ADC0809C程序代码

    基于51单片机的ADC0809C程序代码
    发表于 11-22 15:51 1.2w次阅读

    基于51单片机的波形计数c程序代码详细资料免费下载

    本文档的主要内容详细介绍的是基于51单片机的波形计数c程序代码详细资料免费下载。
    发表于 09-06 15:00 23次下载
    基于51<b class='flag-5'>单片机</b>的波形计数<b class='flag-5'>c</b><b class='flag-5'>程序代码</b>详细资料免费下载

    使用51单片机设计的C语言音乐程序代码资料免费下载

    本文档的主要内容详细介绍的是使用51单片机设计的C语言音乐程序代码资料免费下载。
    发表于 12-21 08:00 17次下载
    使用51<b class='flag-5'>单片机</b>设计的<b class='flag-5'>C</b>语言音乐<b class='flag-5'>程序代码</b>资料免费下载

    STM32F1_ 外部NorFlash存储程序代码

    STM32F1_外部NorFlash存储程序代码
    的头像 发表于 04-08 09:55 4249次阅读
    <b class='flag-5'>STM32</b>F1_ 外部NorFlash存储<b class='flag-5'>程序代码</b>

    基于LabVIEW和单片机实现DSP应用程序代码的自举模块设计

    针对现有DSP自举模块普遍存在程序代码更新不便的缺陷,提出了一种可便捷高效地在线更新用户应用程序代码的DSP自举模块。该模块由基于LabVIEW的图形用户界面(GUI)软件与C8051F340
    发表于 07-16 20:36 2051次阅读
    基于LabVIEW和<b class='flag-5'>单片机</b>实现DSP应用<b class='flag-5'>程序代码</b>的自举模块设计