进入 hardfault 之后,单片机一切正常,一个部件都没有停摆。
单片机各个部位电源时钟一切正常,为什么停摆呢?包括定时器一切工作正常
因为 hardfault 中断的优先级很高很高,是个负数,仅仅低于 reset 复位优先级,所以 hardfault 中断最优先执行,并且 hardfault 中断服务函数是个死循环,也就是他一旦执行永远霸占 cpu 不释放,优先级高又不会结束,所以其他一切中断,任务都没有机会运行,抢不到 CPU 时间,看起来是CPU不响应任何任务或者中断,貌似死了,其实外设一个都没有停摆。
退一步讲,就算 CPU 跑飞,外设也不会停摆,外设是否运行根本不依赖CPU是否运行,比如 CPU 运行任务的时候,时钟该怎么计数还是怎么计数,跟 CPU 同时运行互不干扰,CPU 运行其他程序影响 timer 计数值了么,timer 走的慢了么? 都没有吧。