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

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

3天内不再提示

深入探讨单片机异常处理

单片机匠人 来源:单片机匠人 作者: 黄忠老师 2021-10-20 10:55 次阅读

ARM处理器中,如果一个程序产生了错误并且被处理器检测到,这是就会产生错误异常。

错误是怎么发生的呢?

许多可能的原因都会引起错误发生,比如对于存储器相关错误,总线系统的异常响应可以有以下原因:

访问的地址非法;

由于传输的类型非法,总线的从设备不接受此次传输(从设备决定)

由于传输未使能或初始化,总线的从设备无法进行此次传输(例如,如果外设的时钟被关闭,那么访问这个外设时,微控制器就可能会产生错误响应)。

当确定了硬件错误异常的直接原因以后,我们可能还得花费一些时间来确定问题的根源。例如,总线错误可以由很多种情况引发,例如错误的指针操作、栈空间损坏、内存溢出、非法存储器映射以及其他原因。

分析错误

根据错误类型的不同,通常能够直接确定引起硬件错误异常的指令的位置。要实现这个目的,就需要知道进入硬件错误异常时的寄存器的内容,以及异常处理前压入栈中的寄存器的内容。这些值中包含了程序返回地址,通过它也能知道引起错误的指令地址。

如果使用了调试器,那么可在工程中创建硬件错误异常处理,并且在其中添加一个用以暂停处理器的断点指令;或者也可以在硬件错误异常处理的开始部分设置一个断点,这样当硬件错误发生时,处理器就会自动暂停。在处理器由于硬件错误暂停后,我们就可以尝试着按照下面图的流程对错误进行定位。

为了给分析提供更多的信息,也可以生成程序映像的汇编代码,并且利用在栈帧中找到的PC值确定错误的位置。如果错误的地址为存储器访问指令,就应该检查寄存器的值确定存储器访问的地址是否合法。除了检查地址范围,也应该确认存储器的地址是否正确地对齐。

除了压入栈中的PC值(返回地址),栈帧中也包含了其他有助于调试的寄存器值。例如,压入栈的IPSR能够反映处理器是否在进行异常处理,EPSR则代表了处理器状态(EPSR的T位为0,则表示错误由意外切换至ARM状态引起)。

栈中的LR也可能会提供一些信息,例如发生错误的函数的返回地址,错误是否发生在异常处理中,以及EXC_RETURN的值是否被异常破坏等。

另外,当前的寄存器值也可以提供有助于定位错误原因的各种信息,除了当前栈指针的值,当前的链接寄存器的值也可能有帮助。如果LR中为非法的EXC_RETURN的值,这就意味着它在前面异常处理中被错误地修改了。

CONTROL寄存器也可以提供帮助。在没有OS的简单应用程序中,进程栈指针(PSP)不会被用到,并且CONTROL寄存器会一直保持为0。如果CONTROL寄存器被设置为0x2(PSP用于线程状态),这就意味着LR在之前的异常处理中被错误地修改了,或者栈内容被破坏导致了EXC_RETURN的值错误。

编辑:jq

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

    关注

    30

    文章

    5027

    浏览量

    117711
  • 存储器
    +关注

    关注

    38

    文章

    7144

    浏览量

    161978
  • ARM处理器
    +关注

    关注

    6

    文章

    346

    浏览量

    41322

原文标题:单片机的异常处理

文章出处:【微信号:gh_e7f294a514ca,微信公众号:单片机匠人】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    深入探讨:DLTAP713SA芯片在智能跳绳计数器中的应用及其电子方案

    本文深入探讨了一款采用DLTAP713SA芯片的智能跳绳计数器的电子方案,突出其电池供电、恒压输出和低功耗设计的特点。文章详细介绍了设备的主要部件,包括机械按键、数码管显示屏、霍尔开关和马达,以及
    的头像 发表于 03-12 11:56 230次阅读
    <b class='flag-5'>深入探讨</b>:DLTAP713SA芯片在智能跳绳计数器中的应用及其电子方案

    深入探讨电源变压器在储能设备中的应用

    深入探讨电源变压器在储能设备中的应用  电源变压器在储能设备中的应用已经成为当代能源储备和利用的关键技术之一。随着可再生能源的不断发展和应用,储能设备的需求也越来越大。电源变压器作为储能设备中的关键
    的头像 发表于 02-02 09:44 422次阅读

    stm32和51单片机的区别

    单片机的区别 架构 STM32单片机采用了Cortex-M系列的处理器架构,而51单片机则采用了传统的8位处理器架构。Cortex-M系列的
    发表于 11-20 13:18

    51单片机怎么处理机械臂数据?

    51单片机怎么处理机械臂数据
    发表于 10-31 06:29

    一颗8位的51单片机是如何处理32位数据的?

    如果你曾经跟小编一样好奇过一颗8位的51单片机是如何处理32位数据的,那么你来对地方了。本文将揭开单片机这个神秘领域的面纱,具体探讨它们如何处理
    的头像 发表于 10-30 11:26 752次阅读

    深入 Cortex‐M3 的 Faults异常

    深入 Cortex‐M3 的 Faults异常
    的头像 发表于 10-26 16:57 316次阅读
    <b class='flag-5'>深入</b> Cortex‐M3 的 Faults<b class='flag-5'>异常</b>

    单片机异常复位原因 简述单片机如何复位

    单片机异常复位原因 简述单片机如何复位  单片机异常复位是指在正常运行期间,单片机出现了不可恢复
    的头像 发表于 10-17 16:44 2297次阅读

    云芯为您探究单片机TDL:功能、应用与技术特点

    的应用,可以实现复杂的电子控制系统。云芯将带您深入探讨单片机TDL的功能、应用领域以及其技术特点,以帮助您更好地了解这一重要的电子元件。
    的头像 发表于 10-16 15:36 298次阅读

    STM8系列单片机开发与应用

    公司推出的STM8系列单片机即是典型代表之一。本文首先把STM8系列单片机做一简要介绍,并与传统的Intel 80C51系列单片机进行对比,然后介绍其调试原理与开发工具,最后就其开发应用中的一些问题做一些
    发表于 10-10 06:36

    单片机4个IO口的作用

    中,同时,可以输出控制命令或信号到外部设备,完成各种复杂任务。而一个常见的单片机常常都会有4个IO口,接下来,我们将深入探讨这4个IO口的作用。 1.输入端口 输入端口是单片机连接外部传感器、按钮等元器件的主要接口,通过输入端口
    的头像 发表于 09-22 16:21 4310次阅读

    STM32的中断和异常(2)#单片机

    单片机STM32
    未来加油dz
    发布于 :2023年08月11日 16:35:06

    STM32的中断和异常(1)#单片机

    单片机STM32
    未来加油dz
    发布于 :2023年08月11日 16:34:25

    中断_异常的响应序列及异常返回(2)#单片机

    单片机函数STM
    未来加油dz
    发布于 :2023年08月02日 21:49:11

    中断_异常的响应序列及异常返回(1)#单片机

    单片机函数STM
    未来加油dz
    发布于 :2023年08月02日 21:48:25

    单片机使用案例及代码资料合集

    想要深入学习单片机,案例学习不可少
    发表于 05-31 18:37