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

时间:2016-09-29 15:02:10

标签: c ram

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

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

void main(){
  // ...

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

这个过程似乎应该对我有用,但出于某种原因,当我经历它时,它失败了。我似乎能够通过调试器逐步完成它,但是当我运行它失败时。

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

非常感谢!

编辑 - 所有其他任务都在从闪存运行。更新功能链接到从闪存运行,但我可以成功将其复制到RAM并分支到它。我甚至可以逐步完成它(至少是反汇编代码),只有当我遇到它时才会遇到问题。

1 个答案:

答案 0 :(得分:1)

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

void main(){
  // ...

  ramfunction = copytoram((int)update);
  disable_interrupts();
  ramfunction();
  enable_interrupts();
}
相关问题