打印

STM32的数据位数是怎么定义的,把我弄得好晕,就是不明白!

[复制链接]
4182|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pingandpeng|  楼主 | 2012-3-16 13:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
typedef unsigned short int uint16_t;
typedef unsigned          int uint32_t;
前面那个就是定了了一个16位数,后面那个就是定义了一个32位数码?
可是这个语句又如何理解呢:( (PIN) & (uint16_t)0x00) == 0x00  等号前面应该是16位的数据啊,等号后面咋又莫名奇妙的变成8位数据了!
沙发
呆瓜一个| | 2012-3-16 13:33 | 只看该作者
1.后面那个是32位数据,这个和编译器有关系。
2.这个等号内的uint16_t应该没有什么价值,可以去掉。

使用特权

评论回复
板凳
pingandpeng|  楼主 | 2012-3-16 13:41 | 只看该作者
不对哦,括号里可是强制类型转换的 2# 呆瓜一个

使用特权

评论回复
地板
adce| | 2012-3-16 13:45 | 只看该作者
没研究过ARM的汇编指令...
看:( (PIN) & (uint16_t)0x00) == 0x00  的样子
是不是ARM既有8位的寄存器赋值命令 又有16位的寄存器赋值命令啊....
PIN应该是16位的...如果编译器傻的话...不填充高八位...比较结果就不稳定...
强行用(uint16_t)把0x00扩展成0x0000....用16位填充....

原因有两个
1.耐优化
2.对编译器不信任

使用特权

评论回复
5
adce| | 2012-3-16 13:46 | 只看该作者
没研究过ARM的汇编指令...
看:( (PIN) & (uint16_t)0x00) == 0x00  的样子
是不是ARM既有8位的寄存器赋值命令 又有16位的寄存器赋值命令啊....
PIN应该是16位的...如果编译器傻的话...不填充高八位...比较结果就不稳定...
强行用(uint16_t)把0x00扩展成0x0000....用16位填充....

原因有两个
1.耐优化
2.对编译器不信任

使用特权

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

本版积分规则

0

主题

18

帖子

0

粉丝