OpenEdv-开源电子网

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

请教一下大家,stm32中关于类型转换的问题,很多地方为什么都 要两次类型转换呢

[复制链接]

13

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
407
金钱
407
注册时间
2016-5-26
在线时间
108 小时
发表于 2019-7-25 17:26:47 | 显示全部楼层 |阅读模式
5金钱
#define  RCC_CR_HSEON       ((uint32_t)0x00010000)
  RCC->CR |= ((uint32_t)RCC_CR_HSEON);  
问一下大家 ,为什么这个 总是要两 次 强制类型转换,程序中有很多地方都这样

还有
FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
为什么 要重复这样做呢?

最佳答案

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

感觉只需要转换一次就可以了呀,至于为什么会出现这种情况,我猜测这套代码不是一个人完成的,后来者在编写这套代码的时候并不知道RCC_CR_HSEON被赋予了什么数据类型,为了避免出错就添加了(uint32_t)对宏进行了强制类型转换,至于为什么在((uint32_t)~FLASH_ACR_LATENCY)前面还会添加(uint32_t),估计是为了赶工作进度就随便添加了,因为涉及到数据类型转换的地方肯定还有很多,再次添加强制类型转换肯定不会错,这种方式不用动脑 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
196
金钱
196
注册时间
2018-5-8
在线时间
22 小时
发表于 2019-7-25 17:26:48 | 显示全部楼层
本帖最后由 尹林 于 2019-7-25 18:07 编辑

感觉只需要转换一次就可以了呀,至于为什么会出现这种情况,我猜测这套代码不是一个人完成的,后来者在编写这套代码的时候并不知道RCC_CR_HSEON被赋予了什么数据类型,为了避免出错就添加了(uint32_t)对宏进行了强制类型转换,至于为什么在((uint32_t)~FLASH_ACR_LATENCY)前面还会添加(uint32_t),估计是为了赶工作进度就随便添加了,因为涉及到数据类型转换的地方肯定还有很多,再次添加强制类型转换肯定不会错,这种方式不用动脑子,速度最快。其实不用太纠结这些问题,重要的是读懂写这份代码的人的思想
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-5 12:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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