扫码阅读
手机扫码阅读

STM32单片机进行除零运算为何程序不崩溃

176 2024-08-31

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

查看原文:STM32单片机进行除零运算为何程序不崩溃
文章来源:
一起学嵌入式
扫码关注公众号

摘要:

【一分钟聊嵌入式】是一个旨在提供快速阅读体验的平台,每篇文章围绕嵌入式话题展开,内容包括技术、职场、学习方法或程序代码等,读者可以通过公众号后台留言参与话题讨论。

本期讨论的话题是STM32单片机在执行C语言代码时,遇到除以零的操作不会导致程序崩溃的现象。一般情况下,在C语言中进行除零操作会触发异常处理,导致程序异常。然而,在STM32单片机上,除零运算却能继续执行后续代码。查询Cortex-M3指南可知,这一行为与DIV_0_TRP位的设置有关。当DIV_0_TRP位为0时,默认状态下除零操作不会产生异常,且结果为0。只有当DIV_0_TRP位设置为1时,才会触发除零异常中断。

此外,即便发生除零异常,由于UsageFault默认处于禁用状态,异常将会被转为HardFault异常中断。要使除零异常进入UsageFault,需要通过配置SHCSR寄存器的bit18来实现。

总结而言,STM32单片机在默认情况下进行除零操作时不会异常崩溃,是由于特定位寄存器配置所决定的行为。

读者可通过扫码加入高质量嵌入式交流群,和作者【一起学嵌入式】共同学习成长,并可以通过点击“分享”、“赞”、“在看”等方式支持文章。

想要了解更多内容?

查看原文:STM32单片机进行除零运算为何程序不崩溃
文章来源:
一起学嵌入式
扫码关注公众号