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

[复制链接]
5330|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.对编译器不信任
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

粉丝
快速回复 在线客服 返回列表 返回顶部