volatile 使用误区

在建立编译环境的时候用typedef定义了指向volatile 单元的指针,最后终于发现行不通。

typedef char              u8;
typedef unsigned short    u16;
typedef unsigned int      u32;

typedef volatile u8       vu8;
typedef volatile u16      vu16;
typedef volatile u32      vu32;

typedef char  *           p8;
typedef unsigned short *  p16;
typedef unsigned int *    p32;

typedef char volatile *            vp8;
typedef unsigned short volatile *  vp16;
typedef unsigned int volatile *    vp32;

原来上述三行定义为

typedef volatile p8            vp8;
typedef volatile p16          vp16;
typedef volatile p32          vp32;

蓝色的部分语法通过了,但是volatile根本不起作用。

 

 

另外提一下寄存器还可以这样定义:

typedef uint32_t special_register;

typedef struct UART UART
struct UART
{
  special_register ULCON; 
  special_register UCON;    /*控制*/
  special_register USTAT;     /*状态*/
  special_register UTXBUF;    /*发送缓冲*/
  special_register URXBUF;    /*接收缓冲*/
  special_register UBRDIV;    
};


http://xjbclz.banzhu.net/article/xjbclz-16-880646.html

 

UART0对应的特殊寄存器被映射到0x03FFD000。我们有两种方法来访问该寄存器,一种是宏定义方法:
#define UART0 (( UART volatile *) 0x03FFD000)

另一种是通过常量指针:
UART volatile *const UART0  = ( UART volatile *)0x03FFD000;

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值