嵌入式C里面设置绝对地址的数值的问题

00448011   2008-7-16 14:53 楼主
如下  
嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,要求
设置一绝对地址为0x67a9的整型变量的值为0xaa66。编译器是一个纯粹的ANSI编译器。写
代码去完成这一任务。

原来的答案如下:
*(int * const)(0x67a9) = 0xaa55;

我个人认为更应该是  
*(int * volatile)(0x67a9) = 0xaa55;

大家讨论,为什么是const而不是volatile呢?

回复评论 (3)

貌似ARM等嵌入式控制器的内部寄存器等地址就是这样设置的
*(volatile unsigned *)0x1c80000
点赞  2008-7-16 15:05
一般用volatile的是CPU等的寄存器,因为可能会被硬件控制器改变值,所以要求每次读取。

而你所说的,是固定地址的内存,这个内存的值是不会被别的硬件控制器改变值的。所以,不用volatile

其实,const都不需要。只是加了const,阅读代码更方便,知道0x67a9是不可变的,因为这个个固定地址。

点赞  2008-7-16 15:35
这个题目我也做过,汗...
点赞  2008-7-16 22:53
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复