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