gpt4 book ai didi

c - 从 RAM 执行代码时应该禁用中断吗?

转载 作者:行者123 更新时间:2023-12-02 03:11:22 24 4
gpt4 key购买 nike

我正在构建一个更新功能,它可以完全删除程序闪存中用完的程序代码,并在其位置上闪烁一个新图像。为此,有必要将更新功能复制到 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com