我正在构建一个更新功能,它可以完全删除程序闪存中用完的程序代码,并在其位置上闪烁一个新图像。为此,有必要将更新功能复制到 RAM 中,并在其 RAM 位置分支到它以执行实际的删除/编程功能。
void update(){
//Erase flash
//Program flash
}
void main(){
// ...
ramfunction = copytoram((int)update);
ramfunction();
}
这个过程似乎对我来说应该有效,但由于某种原因,当我运行它时,它失败了。我似乎能够使用调试器单步执行它,但是当我运行时它失败了。
我应该通过禁用中断来保护 ramfunction();
吗?我确实有其他任务在后台运行。还有其他可能的问题吗?
非常感谢!
编辑 - 所有其他任务都从闪存运行。更新功能也链接到从闪存运行,但我可以成功地将它复制到 ram 并分支到它。我什至可以逐步通过它(至少是反汇编代码),只有当我通过它时我才会遇到问题。
最佳答案
如果您同时运行其他任务,则它们可能会中断 ramfunction 的编程阶段。这可能会导致灾难性的失败。我会尝试这样的事情:
void main(){
// ...
ramfunction = copytoram((int)update);
disable_interrupts();
ramfunction();
enable_interrupts();
}
关于c - 从 RAM 执行代码时应该禁用中断吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39773807/