STM32 硬件I2C 死循环 自动退出
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32 硬件I2C 死循环 自动退出相关的知识,希望对你有一定的参考价值。
STM32 用库函数使用硬件I2C,看到库函数用的while死循环来检测标志位。
我们都知道,while死循环是程序大忌,如果I2C通讯异常,那程序不是一直死在这里了吗?STM32 不就瘫痪了吗?
请问,STM32 官方库是如何考虑这个问题的?
arm程序退出死循环
ldr lr,=halt_loop
ldr pc,=main
halt_loop:
b halt_loop
配置了链接寄存器指向的是halt_loop,在pc跳到主函数运行结束之后,pc的值会指向链接寄存器lr,然后就跳到halt_loop这个死循环上了,这是程序结束至死循环的意思。
1、如果main是死循环,那么本条语句是不会执行,cpu在一直取指运行。
2、如果main不是死循环,那么main返回后,执行汇编里面的这条循环。
如果不这么做,cpu会继续往下执行,然而后边并没有代码了,就会会把垃圾数据当做指令,触发未定义指令异常,导致系统崩溃可能就重启了
以上是关于STM32 硬件I2C 死循环 自动退出的主要内容,如果未能解决你的问题,请参考以下文章