在另一个模块中定义了一个常量全局变量。
我想在运行时操作此变量(因为我无法在其他模块中进行更改并删除const关键字)。
我知道常量放在ROM中...
该代码将下载到微控制器(豹powerpc 5643),所以我认为常量将位于闪存中(而不是普通的PC ROM)
我已经尝试过类似的操作,并且编译器在编译过程中产生了错误:
const int global_Variable = 0;
const int* ptr = &global_Variable;
*ptr = 5;
那么,您知道其他方法可以完成此操作吗?
如果您知道常量确实放在平台上的ROM(或更可能是闪存)中,那么您当然将无法修改,至少不能直接修改。
如果它是闪存,则可能会出现,但是您将不得不更深入一点,因为对闪存进行重新编程并不是仅通过对其进行写操作就必须擦除相关部分,并且通常存在块/扇区大小限制来处理。不会很漂亮
您的实际代码无法编译,因为您无法通过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
是恒定的。您正在尝试推翻设计的特定部分,如果成功,很可能会破坏很多东西。换句话说:考虑不这样做。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句