【问题标题】:AVR/Arduino how to jump to address 0x0000 ("soft reset")AVR/Arduino 如何跳转到地址 0x0000(“软复位”)
【发布时间】:2021-02-16 11:06:34
【问题描述】:

我有一个用 C 编写的 Arduino 程序。有几十个全局变量内联初始化,例如:

unsigned char wpm = 25;
unsigned char weighting = 50 ;

我可以调用setup() 来重新初始化一些功能和端口,但这会使全局变量保持原样。此外,ISR 向量将保持不变。我想要的实际上是重新启动处理器,但没有进入引导加载程序,因为当这种情况发生时,已经在连接的 PC 的串行端口上建立了一个链接。我不想浪费额外的程序空间来编写一个特殊的“重置默认值”例程,所以“软件重置”听起来是一个可能的解决方案。

有没有办法跳转到 0x0000,它真的有很大帮助吗?

谢谢 金德拉

【问题讨论】:

标签: arduino


【解决方案1】:

解决方案:

void soft_reset() {
  void (*reboot)() = 0x0000 ;
  (*reboot)();
}

调用soft_reset()后会发生以下情况:

  1. 程序将从头开始,即setup()函数将再次运行。
  2. 使用初始化器声明的所有全局变量都将被重新初始化。

这正是我想要的。

WDT 重置是我在互联网上找到的唯一替代方案,它似乎相当复杂,并且在重置发生之前需要一些额外的超时。这样更快更干净。

【讨论】:

    猜你喜欢
    • 2014-06-16
    • 1970-01-01
    • 2023-02-11
    • 2022-12-11
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多