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