【发布时间】:2016-09-29 23:52:21
【问题描述】:
我正在构建一个更新功能,它可以完全擦除我的程序代码用完程序闪存,并在其位置上闪存一个新图像。为此,需要将更新功能复制到 RAM 中并在其 RAM 位置分支到它以执行实际的擦除/编程功能。
void update(){
//Erase flash
//Program flash
}
void main(){
// ...
ramfunction = copytoram((int)update);
ramfunction();
}
这个过程似乎应该对我有用,但由于某种原因,当我运行它时,它失败了。我似乎可以用调试器单步执行它,但是当我运行它时失败了。
我是否应该通过禁用中断来保护ramfunction();?我确实有其他任务在后台运行。还有其他可能的问题吗?
非常感谢!
编辑 - 所有其他任务都从闪存运行。更新功能也链接到从闪存运行,但我可以成功地将它复制到 ram 并分支到它。我什至可以单步执行(至少是反汇编代码),只有在执行时才会遇到问题。
【问题讨论】:
-
我觉得这是一个非常有趣的问题,虽然它可能会因为它相当广泛而被关闭。
-
@xxbbcc:假设会添加必要的细节,它仍然不会普遍适用。这个主题的变量太多了。
-
我可以为您提供什么以使其更具体?
-
其他任务是否从闪存运行?中断向量是否指向闪存中的代码?更新函数的位置是独立的,还是链接到从 ram 运行,即使它是在闪存中加载的?更新功能(或任何其他任务)是否使用存储在闪存中的任何常量?这是一个多核 CPU,禁用中断不会停止其他内核上的任务?
-
是的,所有其他任务都从闪存运行。更新功能也链接到从闪存运行,但我可以成功地将它复制到 ram 并分支到它。我什至可以单步执行它(至少是反汇编代码),只有当我运行它时才会遇到问题。