OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4414|回复: 6

请问stm32库源码(keil4.0之前的版本),定义寄存器没有使用volatile关键字,为什么也能正常运行?

[复制链接]

63

主题

305

帖子

1

精华

高级会员

Rank: 4

积分
853
金钱
853
注册时间
2012-8-3
在线时间
79 小时
发表于 2015-3-11 15:45:48 | 显示全部楼层 |阅读模式
5金钱
大家可以看
解析stm32库函数
可见stm32库并没有使用volatile关键字(这里排除加了CMSIS之后的stm32库),为什么也能正常运行呢?

最佳答案

查看完整内容[请看2#楼]

这个不一定要volatile的.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-11 15:45:49 | 显示全部楼层
这个不一定要volatile的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

63

主题

305

帖子

1

精华

高级会员

Rank: 4

积分
853
金钱
853
注册时间
2012-8-3
在线时间
79 小时
 楼主| 发表于 2015-3-13 11:04:38 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
如果用到状态寄存器之类的,没有volatile,编译器会不会认为寄存器的值是不会改变的?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-13 23:11:50 | 显示全部楼层
回复【3楼】EDA3rd:
---------------------------------
不会
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

63

主题

305

帖子

1

精华

高级会员

Rank: 4

积分
853
金钱
853
注册时间
2012-8-3
在线时间
79 小时
 楼主| 发表于 2015-4-10 14:43:40 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
按照volatile的用法,如果不加volatile,编译器优化代码时,取寄存器变量时有可能只是读取一个备份的旧值,而不是真的读取改地址存放的内容。
所以,百撕不得骑姐,为什么不用加volatile呢?如果这些寄存器定义都不用加,那什么时候加?
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2015-4-10 14:57:16 | 显示全部楼层
只能说不一定。
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

63

主题

305

帖子

1

精华

高级会员

Rank: 4

积分
853
金钱
853
注册时间
2012-8-3
在线时间
79 小时
 楼主| 发表于 2015-4-10 15:30:16 | 显示全部楼层
殴,不好意思,是我看错了,里面确实用了volatile,比如串口寄存器:
typedef struct
{
  vu16 SR;
  u16  RESERVED0;
  vu16 DR;
  u16  RESERVED1;
  vu16 BRR;
  u16  RESERVED2;
  vu16 CR1;
  u16  RESERVED3;
  vu16 CR2;
  u16  RESERVED4;
  vu16 CR3;
  u16  RESERVED5;
  vu16 GTPR;
  u16  RESERVED6;
} USART_TypeDef;

vu16就是volatile u16
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 20:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表