如下
嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,要求
设置一绝对地址为0x67a9的整型变量的值为0xaa66。编译器是一个纯粹的ANSI编译器。写
代码去完成这一任务。
原来的答案如下:
*(int * const)(0x67a9) = 0xaa55;
我个人认为更应该是
*(int * volatile)(0x67a9) = 0xaa55;
大家讨论,为什么是const而不是volatile呢?
貌似ARM等嵌入式控制器的内部寄存器等地址就是这样设置的
*(volatile unsigned *)0x1c80000
一般用volatile的是CPU等的寄存器,因为可能会被硬件控制器改变值,所以要求每次读取。
而你所说的,是固定地址的内存,这个内存的值是不会被别的硬件控制器改变值的。所以,不用volatile
其实,const都不需要。只是加了const,阅读代码更方便,知道0x67a9是不可变的,因为这个个固定地址。