打印

stm32 关键字IO I 有什么区别

[复制链接]
5647|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
110xia|  楼主 | 2009-9-21 13:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 110xia 于 2009-9-21 13:23 编辑

typedef   signed   int    int32_t;

typedef    int32_t             s32;
typedef    __IO int32_t     vs32;
typedef    __I int32_t       vsc32;


关键字 IO与 I 有什么区别?

typedef    int32_t             s32;
typedef   volatile   int32_t             vs32;
有 volatile 与没有 volatile 有什么区别 ?
沙发
香水城| | 2009-9-21 13:29 | 只看该作者
没有见过这样的用法。这不是标准的C修饰符,应该是你用的编译器自定义的,请参考相应的编译器手册。

volatile 是标准的C修饰符,表示被修饰的变量是动态变化的,详细区别请参考任意一本C语言手册。

使用特权

评论回复
板凳
110xia|  楼主 | 2009-9-21 13:38 | 只看该作者
谢谢LS,
仔细查找了,发现原来是这样,在core_cm.3.h  文件有有这样的定义
#define     __I     volatile const            /*!< defines 'read only' permissions      */
#define     __O     volatile                  /*!< defines 'write only' permissions     */
#define     __IO    volatile                  /*!< defines 'read / write' permissions   */

使用特权

评论回复
地板
sinadz| | 2009-9-21 15:12 | 只看该作者
嗯,这种情况一般要看头文件里面是怎么定义的

使用特权

评论回复
5
aozima| | 2009-9-21 15:56 | 只看该作者
#define     __I     volatile const   
typedef    __I int32_t       vsc32;
是为了防止你对仅能做输入的IO进行写操作

#define     __O     volatile  
#define     __IO    volatile  
typedef    __IO int32_t     vs32;
typedef    __I int32_t       vsc32;
对IO寄存器加volatile 是防止编译器把
GPIOC = 0x0000;
GPIOC = 0xFFFF;
这样语句直接把GPIOC = 0x0000;给优化掉

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

519

帖子

2

粉丝