我正在构建一个更新功能,该功能将完全擦除程序闪存用尽的程序代码,并在其位置闪烁一个新镜像。为此,必须将更新功能复制到RAM中,并在其RAM位置分支到该位置,以执行实际的擦除/编程功能。

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

void main(){
  // ...

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

这个过程似乎应该对我有用,但是由于某种原因,当我运行它时,它失败了。我似乎可以使用调试器来逐步解决问题,但是运行时失败。

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

非常感谢!

编辑-所有其他任务都从Flash运行。该更新功能也可以从Flash运行,但是我可以成功地将其复制到ram并分支到它。我什至可以逐步解决它(至少是反汇编代码),只有当我遍历它时才会遇到问题。

最佳答案

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

void main(){
  // ...

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

关于c - 从RAM执行代码时应该禁用中断吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39773807/

10-12 20:49