如何在微控制器硬件复位之前保存一些数据?

Anm*_*nmk 5 c embedded microcontroller nxp-microcontroller

我正在研究一款 Freesacle 微控制器。该微控制器有多个复位源(例如时钟监视器复位、看门狗复位等)。假设由于看门狗的原因,我的微控制器被重置。如何在重置发生之前保存一些数据?我的意思是,例如,我如何理解看门狗重置之前程序计数器在哪里。通过这种方法,我想知道哪里有错误(换句话说,很长的过程)导致看门狗重置。

Lun*_*din 3

大多数飞思卡尔 MCU 的工作方式如下:

  • 看门狗复位后 RAM 被保留。但在 LVD 复位后可能不会,并且在上电复位后肯定不会。在大多数情况下,这完全没有记录。
  • MCU 要么有一个状态寄存器,您可以在其中检查复位原因(例如 HCS08、MPC5x、Kinetis),要么有针对不同复位原因的特殊复位向量(例如 HC11、HCS12、Coldfire)。

重置后无法保存任何内容。重置发生后,您才能找出导致重置的原因。

然而,可以保留一块 RAM 作为特殊段。上电复位后,您可以通过将所有内容设置为零来初始化该段。如果看门狗复位,您可以假设该 RAM 段仍然有效且完好无损。所以你不要初始化它,而是保持原样。此方法使您能够在重置期间保存变量值。可能- 对于大多数 MCU 系列来说,这并没有很好的记录。我至少在HCS08、HCS12和MPC56上使用过这个技巧。

至于程序计数器,你就不走运了。它已重置,无法恢复。这意味着找出看门狗重置发生位置的唯一方法是乏味的老式方法,即在代码中一点一点地移动断点,运行程序并检查它是否到达断点。

尽管对于 MPC56 或 Cortex M 等现代 MCU,您只需检查跟踪缓冲区并查看导致重置的代码即可。您不仅可以获得 PC,还可以看到 C 源代码。但您可能需要一个专业的、不依赖 Eclipse 的工具链来完成此操作。