更改常量全局变量

标签 c constants

在另一个模块中定义了一个常量全局变量。

我想在运行时操作这个变量(因为我无法在其他模块中更改并删除 const 关键字)。

我知道常量被放入 ROM 中...

代码将被下载到微 Controller (leopard powerpc 5643),因此我认为常量将位于闪存(而不是普通的 PC ROM)中

我尝试过类似的方法,但编译器在编译过程中产生了错误:

const int global_Variable = 0;
const int* ptr = &global_Variable;
*ptr = 5;

那么,您知道还有其他方法可以实现这一目标吗?

最佳答案

如果您知道常量确实被放入您平台上的 ROM(或者更可能是闪存)中,那么您当然无法修改它,至少不能直接修改它。

如果它是闪存,您可能,但是您必须更深入地研究,因为重新编程闪存不能仅通过写入来完成,您必须删除相关部分,并且通常需要处理 block /扇区大小限制。不会很漂亮。

您的实际代码无法编译,因为您无法通过 const 指针进行编写(毕竟,这就是 const 的要点)。您可以放弃它并强制编译器生成写入,但是如果目标地址指向不可写内存,它当然不会工作:

const int global_Variable = 0;
int *ptr = (int *) &global_Variable; /* Cast away the const. */
*ptr = 5; /* Do the write! */

同样,如果 global_Variable 位于不可写内存中,则此将不起作用。您将得到未定义的结果。

最后,这太明显了,我什至没有想到要写它:你正在做的事情听起来像是一个非常糟糕的主意。显然,您正在开发的软件是在假设global_Variable恒定的情况下设计的。你试图覆盖设计的特定部分,如果你成功了,这很可能会破坏很多东西。换句话说:考虑不这样做。

关于更改常量全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26626331/

相关文章:

c - ARM 的 LLVM 是否支持#pragma warning?

c - 访问结构内的结构乘以 3?

C 总线错误 : 10 bootstrap. sh

c - SQLite 的测试代码与生产代码的比率

ios - 如何从 H 文件访问变量

c++ - 初始化结构中的常量数组

python - 为什么 Micropython 'const' 不接受浮点值?

c - 指向结构体中 char 的指针,段错误

c++ - fftw3 的常量正确性

r - 如何在 R 中跨多个函数定义全局变量? (不在包环境中)