我正在构建一个更新功能,该功能将完全擦除程序闪存用尽的程序代码,并在其位置闪烁一个新镜像。为此,必须将更新功能复制到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/