在arm中,下面的定义随处可见。
- #define MEM_FOR_INFO_SAVE (*(volatile unsigned *)0x0c0000c3)
- unsigned char* p=(unsigned char*)(&MEM_FOR_INFO_SAVE)
在arm中,对存储器的操作,刚开始接触的时候挺诡异的,就像上面的操作,这种写法到处都是。总感觉这样反过来复过去的指针操作不累吗。
困惑了好久后,才明白过来其中包含的意义。
0x0c0000c3这个肯定是flash的地址,究竟怎样写,编译器才认为它是个地址呢,上面诡异的定义就是这个地址的诠释。
(volatile unsigned *)0x0c0000c3 说明0x0c0000c3是个地址
(*(volatile unsigned *)0x0c0000c3) 地址0x0c0000c3中存的数字
&MEM_FOR_INFO_SAVE 取地址,还是0x0c0000c3这个地址
(unsigned char*)(&MEM_FOR_INFO_SAVE) 地址类型强制转化为unsigned char。
不过还是感觉挺啰嗦的,直接写成
unsigned char* p=(unsigned char*)(0x0c0000c3);
难道编译不过去吗,手头上没ADS编译器,就不实验了。
阅读(2662) | 评论(0) | 转发(0) |