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

标签 c ram

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

相关文章:

使用 C 宏调用关联*函数

c - 我想知道 OCIStmt 结构

c - 嵌套for循环以在c中制作圣诞树

c - 撤回非法指令

java - JMeter 清除 JDBC 响应数据

c - openmp 没有利用所有线程

PHP/MySql/Jquery 脚本与 RAM

python - Django 过滤器是否会增加每个用户的内存消耗 : Python

java - 即使对于小型程序,Java 内存使用率也很高

c++ - 评估 C/C++ 内存泄漏时的虚拟内存与物理内存