OpenEdv-开源电子网

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

挺牛的一个宏定义,大家看看。解释解释。

[复制链接]

21

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2013-4-12
在线时间
0 小时
发表于 2013-4-15 19:40:02 | 显示全部楼层 |阅读模式
#define LD_WORD(ptr)   (WORD)(((WORD)*(BYTE*)((ptr)+1)<<8)|(WORD)*(BYTE*)(ptr)) 这个怎么解释?
自由的代价永远是警惕!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

16

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2012-10-13
在线时间
13 小时
发表于 2013-4-15 20:14:01 | 显示全部楼层
我是这么理解的:首先ptr是一个指针,将ptr指向的数据单元值强制类型转换为字节数据,又将ptr+1数据单元值强制类型之后
左移8位,这两个数据进行WORD类型或运算。
简单来说,就是ptr+1指向单元内容是所得到数据的高八位,ptr指向单元内容是低八位。。。
It?never?rains?but?it?pours!
回复 支持 反对

使用道具 举报

9

主题

66

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2013-3-16
在线时间
0 小时
发表于 2013-4-16 17:16:49 | 显示全部楼层
简单点说就是,比如说地址0x0001寸的内容为0xa0,地址0x0002内容为0xb0,那么这个宏定义的作用就是取这俩地址中内容然后合并为0xb0a0
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2013-4-16 17:24:49 | 显示全部楼层
就是一个 十六位的数据, 前8位 和后8位调换,
 一般常用在比如ModbusRTU的通信使用
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2013-4-16 17:26:55 | 显示全部楼层
因为ModbusRTU 不知道谁定 的标准, 脑有点残, 数据部分顺序  是 MSB LSB, 而 CRC又是 LSB MSB , 所以就用到这样的处理
回复 支持 反对

使用道具 举报

21

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2013-4-12
在线时间
0 小时
 楼主| 发表于 2013-5-27 17:37:38 | 显示全部楼层
我这个是摘自Petit Fatfs,文件系统的简版,可用于8位单片机的移植。
自由的代价永远是警惕!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-19 12:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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