DMA传浮点型数据

[复制链接]
1446|3
 楼主| 拿起书本 发表于 2014-5-12 23:48 | 显示全部楼层 |阅读模式
我想用DMA传输浮点数据但是总是传输不了啊
volatile Uint16 DMABuf1[BUF_SIZE];
volatile Uint16 *DMADest;
volatile Uint16 *DMASource;
改成
volatile float DMABuf1[BUF_SIZE];
volatile Uint16 *DMADest;
volatile Uint16 *DMASource;
之后
DMADest = &DMABuf1[0];
DMASource = &AdcMirror.ADCRESULT0;
DMACH1AddrConfig(DMADest,DMASource);
这儿总是报错
说是a value of type "volatile float *" cannot be assigned to an entity of type "volatile Uint16 *
我知道是指针类型有问题 但是如果想用DMA传浮点型数据的话该怎么改啊?
是不是哪儿还要设置啊  



airwill 发表于 2014-5-13 12:24 | 显示全部楼层
浮点数据 是个 32 位的数据. 当然不能传给 16 位的数据.
DMA 系统并不关心所传的数据是整数还是浮点 (但必须是准确的位数).
所以即使当成 Uint32 传输也是可以的 (后面仍然按浮点数处理就是了).
tianli1980 发表于 2014-7-10 23:40 | 显示全部楼层
从编译角度来说,使用强制转换即可,代码修改如下:
DMADest = (volatile Uint16 *)(&DMABuf1[0]);
或者写成如下代码也行。
DMADest = (volatile Uint16 *)DMABuf1;
huangfeng33 发表于 2014-7-10 23:41 | 显示全部楼层
一般情况下,这种传参函数,我们习惯设置为void *,减少编译器的错误导致的强制转换。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:好好学习,天天向上!

519

主题

4194

帖子

31

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