从 RAM 执行代码时应该禁用中断吗?

Should I disable interrupts when executing code from RAM?

我正在构建一个更新功能,可以从程序闪存中完全擦除我的程序代码 运行ning,并在其位置闪烁一个新图像。为此,有必要将更新函数复制到 RAM 中,并在其 RAM 位置分支到它以执行实际的 erase/program 函数。

void update(){
  //Erase flash
  //Program flash
}

void main(){
  // ...

  ramfunction = copytoram((int)update);
  ramfunction();
}

这个过程似乎对我有用,但由于某种原因,当我 运行 通过它时,它失败了。我似乎能够使用调试器单步执行它,但是当我 运行 它失败了。

我是否应该通过禁用中断来保护 ramfunction();?我在后台还有其他任务 运行ning。还有其他可能的问题吗?

非常感谢!

编辑 - 所有其他任务都运行来自闪存。更新功能也从闪存链接到 运行,但我可以成功地将它复制到 ram 并分支到它。我什至可以通过它(至少是反汇编代码),只有当我 运行 通过它时我才会遇到问题。

如果您同时有其他任务运行,它们可能会中断 ramfunction 的编程阶段。这可能会导致灾难性的失败。我会尝试这样的事情:

void main(){
  // ...

  ramfunction = copytoram((int)update);
  disable_interrupts();
  ramfunction();
  enable_interrupts();
}