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

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

3天内不再提示

浅析基于STM32的除以0运算话题

茶话MCU 来源:茶话MCU 作者:Miler 2021-11-26 11:42 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

有人使用STM32G4系列芯片开发产品。他发现程序中如果遇到除以0的操作时,会跑进出错异常中断而影响程序运行。他想知道能否通过设置,即使发生除以0操作也不让程序跑进异常中断,并期望此时的除法运行结果【也就是商】直接等于当前变量类型所支持的最大值,比如,若被除数为16位变量,则经过该除以零操作后直接为其赋值为0xffff。【实际应用中客户的需求往往也是五彩斑斓的。^_^】

事实上是否可以如该STM32用户所愿呢?我们不妨一起看看。

首先,这个问题不属于STM32外设相关的,而是内核相关的。客户选用的是Cortex M4的内核STM32芯片,那我们就从M4内核手册中寻找相关内容。

我们通过查看ARM M4的内核手册,可以看到除以0操作会导致用法异常[UsageFault],同时它又说了,该操作和非对齐访问操作是否触发异常是可以配置的。详见下方绿色方框内文字。

68412096-4ddc-11ec-9eda-dac502259ad0.png

那么对该用法异常的监测控制是通过哪个寄存器进行配置的呢?经浏览手册得知它是通过配置控制寄存器[SCB-》CCR]进行配置的。

68a05afc-4ddc-11ec-9eda-dac502259ad0.png

690568ac-4ddc-11ec-9eda-dac502259ad0.png

根据上面描述可知,当CCR寄存器的DIV_0_TRP位被配置0时,即使发生除以0操作也不会触发异常,只有当该位被置1前提下,当发生除以0操作时才触发异常事件并产生相应中断。

下面我们具体验证下。我找了块M4内核的STM32芯片的开发板。我们先使用ARM MDK来验证。

测试代码很简单,就是下面截图中的几行,简单的闪灯操作,里面夹了一句除法操作。SCB-》CCR被赋值0x00000210即置位了DIV_0_TRP,当被赋值0x00000200时对其进行清零。

6976770e-4ddc-11ec-9eda-dac502259ad0.png

经过测试,当我们置位上面CCR寄存器的DIV_0_TRP位,在发生除以0操作时就会进入HardFault中断,同时被除数的结果【Result】即商变为0.

69e1d44a-4ddc-11ec-9eda-dac502259ad0.png

而当我们对DIV_0_TRP位清零,即SCB-》CCR被赋值0x00000200时发生除以0操作不会触发Hardfault中断,但被除数除以0后其结果依然保持为0。整个程序运行起来感觉不到任何阻滞。

上面是基于ARM MDK环境测试的,我们换为IAR IDE测试看看。

我们依然先验证CCR寄存器的DIV_0_TRP位被置1的情况。经测试,结果跟ARM MDK环境下的测试结果完全一致。

6a73de8a-4ddc-11ec-9eda-dac502259ad0.png

当我们对CCR寄存器的DIV_0_TRP位清零时,测试结果也跟ARM MDK环境下的一致。

显然,结合Cortex M4内核手册的描述和实际验证,当发生除以0操作时是否触发异常事件是可以配置的,至于发生除以0操作后的商,它始终是0,这个结果其实在上面截图有明确提及,这里再单独截图出来。

6adaa07a-4ddc-11ec-9eda-dac502259ad0.png

不过,这个结果跟开篇客户所期望的不一致,这是由硬件决定的,不同的硬件在这个地方处理不尽相同。其实,其它Cortex M内核芯片这个地方约定是一样的。

聊到这里,或许有人发现了一个问题。从手册上看,这个除以0操作触发的应该是用法异常【UsageFault】,而我们在实际测试时进入的中断却是HardFault异常,这两个异常并不一样啊?

6b412dcc-4ddc-11ec-9eda-dac502259ad0.png

这是怎么回事呢?在此抛砖引玉吧,有兴趣的话不妨查找相关资料继续寻找相关答案。

【注:上面部分截图来自于Cortex-M4的各种手册,有需要可以到arm网站自行搜索下载】

编辑:jq

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

    关注

    463

    文章

    54475

    浏览量

    469804
  • ARM
    ARM
    +关注

    关注

    135

    文章

    9596

    浏览量

    393851
  • 寄存器
    +关注

    关注

    31

    文章

    5621

    浏览量

    130461
  • MDK
    MDK
    +关注

    关注

    4

    文章

    211

    浏览量

    33738

原文标题:基于STM32的除以0运算话题

文章出处:【微信号:stmcu832,微信公众号:茶话MCU】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    浅析激光焊膏在电子互连领域中的应用

    激光焊膏作为一种先进的焊接材料,在电子互连领域中展现出了显著的应用优势和广阔的发展前景。以下从激光焊膏的原理、优势、应用领域及发展趋势等方面,对其在电子互连领域中的应用进行浅析
    的头像 发表于 04-29 09:15 108次阅读

    STM32G0 系列 CSS 功能及应用问题

    1. 前言STM32 G0 系列 MCU 自带时钟丢失功能,即 CSS 功能,能自动检测 HSE 和 LSE 是否丢失。本文对 CSS 功能进行简单介绍,并对客户在应用 LSECSS 功能的过程中
    发表于 04-15 16:16 0次下载

    STM32L072xx 超低功耗32位MCU,基于ArmR的Cortex-M0+规格书

    电子发烧友网站提供《STM32L072xx 超低功耗32位MCU,基于ArmR的Cortex-M0+规格书.pdf》资料免费下载
    发表于 03-20 15:58 0次下载

    LAT1599_STM32G0 系列 CSS 功能及应用问题

    STM32 G0 系列 MCU 自带时钟丢失功能,即 CSS 功能,能自动检测 HSE 和 LSE 是否丢失。本文对 CSS 功能进行简单介绍,并对客户在应用 LSECSS 功能的过程中发现的问题进
    发表于 03-11 10:49 0次下载

    STM32C0x1 基于 Arm® 内核的 32 位高级 MCU参考手册

    本参考手册是对 STM32C0x1 微控制器数据手册的补充,提供了应用(特别是软件开发)所需的信息,属于 STM32C0x1 微控制器上提供的功能集的超集。有关特定 STM32C0x1 器件的功能集、订购信息以及机械和电气特性的
    发表于 01-04 11:24 0次下载

    CW32L012与STM32G431的CORDIC三角函数运算性能对比

    本文对比均为作者实测,结果仅供参考,可附代码供有意者评估~ STM32G431是STM32家族中较新的产品。CW32L012也是武汉芯源半导体最新推出的混合信号MCU,让我们深入分析基于各自芯片
    的头像 发表于 12-29 15:55 2836次阅读
    CW32L012与<b class='flag-5'>STM32</b>G431的CORDIC三角函数<b class='flag-5'>运算</b>性能对比

    CW32L012与STM32F103的三角运算性能对比

    ​  CW32L012和STM32F103在定位和性能上差异显著,在三角函数的运算性能上的对比亦非常直观。 一、 硬件架构对比(性能基础) 芯片型号 CW32L012C8 STM32
    的头像 发表于 12-29 15:32 2552次阅读
    CW32L012与<b class='flag-5'>STM32</b>F103的三角<b class='flag-5'>运算</b>性能对比

    IEEE 802.11af 与空白频谱无线技术的话题

    IEEE 802.11af 与空白频谱无线技术的话题
    的头像 发表于 12-14 15:12 1990次阅读

    国产混合信号处理的重要突破:浅析PSOC 7020的可配置运算架构

    本文简要介绍了国产PSOC 7020芯片内集成的关键运算电路模块,阐述了其作为可编程片上系统(PSoC)的核心模拟处理能力。文章重点分析了其运算放大器、比较器、模数/数模转换器等模块的可配置特性,并说明了其在简化设计、提升系统集成度方面的优势,展示了该芯片作为国产高性能嵌
    的头像 发表于 12-04 17:29 1128次阅读
    国产混合信号处理的重要突破:<b class='flag-5'>浅析</b>PSOC 7020的可配置<b class='flag-5'>运算</b>架构

    卷积运算分析

    卷积运算的基础运算是乘加运算(MAC,Multiplication and Accumulation),本文设计了基本运算单元PE模块来实现MAC
    发表于 10-28 07:31

    STM32C031x4/x6:面向主流应用的Arm® Cortex®-M0+ 微控制器

    STMicroelectronics的STM32C0x Arm^® ^Cortex ^®^ -M0+ 32位MCU安装了高性能Arm Cortex-M0+ 32位RISC内核,工作频率高达48MHz
    的头像 发表于 10-27 15:05 1102次阅读
    <b class='flag-5'>STM32</b>C031x4/x6:面向主流应用的Arm® Cortex®-M<b class='flag-5'>0</b>+ 微控制器

    浮点数是如何实现开平方运算

    一些特殊处理。 浮点数开平方运算可以表达为以下公式: 这里的符号位是逻辑零,这意味着平方根块总是期望正浮点数。平方根运算只在尾数部分进行,这可以通过任意一种平方根算法来实现。指数部分除以2,也就是右移
    发表于 10-24 08:42

    【米尔-STM32MP257开发板试用体验】——测试米尔-STM32MP257开发板外设功能

    /temp 转换成实际的温度 除以1000 就是49121/1000 = 49度 因为STM32MP257是双核,所以查看双核温度的指令为 cat /sys/class/thermal
    发表于 07-07 18:22

    同步电机失步浅析

    纯分享帖,需要者可点击附件免费获取完整资料~~~*附件:同步电机失步浅析.pdf【免责声明】本文系网络转载,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请第一时间告知,删除内容!
    发表于 06-20 17:42

    STM32多通道FFT运算异常的原因?怎么解决?

    问题报告:STM32多通道FFT运算异常 报告人:XXX日期:2025年X月X日硬件平台:STM32F407VGT6开发环境:STM32CubeMX + KeilCMSIS-DSP库版
    发表于 06-19 06:27