EDA365电子工程师网

标题: volatile unsigned int * [打印本页]

作者: zsg456    时间: 2014-5-21 14:34
标题: volatile unsigned int *
#define          LCD_REG          (*((volatile  unsigned  int *)0x3BFF))
! h# G7 w) L0 Z0 M+ ^/ E最近学程序上面语句没看懂,本来这个语句在自己编程时用的也少,不是很理解,大家看看有这个语句真实用户如何?
7 l( p" p$ \% q9 y, Z& h" s3 s
作者: zsg456    时间: 2014-5-21 14:38
#define A (*(volatile unsigned long *)0x48000000)
8 F9 k4 k" P3 L* d8 v7 s... + P2 V9 [% C  B5 q8 ^1 Q
     A = 0x01;
) M& ?3 }) I6 b" n3 {, O...
' o- J( P- p# o0 y9 ?0 ~3 S    这实际上就是内存映射机制的方便性了。其中 volatile 关键字是嵌入式系统开发的一个重要特点。上述表达式拆开来分析,首先(volatile unsigned long *)0x48000000的意* Z0 V5 i9 A8 i0 G9 F# o
思是把 0x48000000 强制转换成 volatile unsigned long 类型的指针,暂记为 p,那么就是
- a6 T: a. H4 A7 p2 q#define A *p, 即A 为P 指针指向位置的内容了。 这里就是通过内存寻址访问到寄存器 A,+ F& p7 {# z! b9 P: C
可以读/写操作。 $ L6 f. P; A* t+ y* T& }$ r. M
用 GCC 编译时。volatile 所指示的寄存器不进行优化!!!
8 B# {7 I: {" F2 K$ s
作者: wzd5230    时间: 2014-6-6 17:17
随便打开一个stm32的工程,打开寄存器地址映射头文件,你就发现这个用法多么重要了!
作者: zsg456    时间: 2014-6-7 12:41
是的哇 以前一直没用这些语法 就用现成的东西 搞的现在好多都不懂




欢迎光临 EDA365电子工程师网 (https://bbs.elecnest.cn/) Powered by Discuz! X3.2