[C语言] 警告conversion from pointer to smaller integer,怎么修改代码好?

[复制链接]
 楼主| 奔牛滚滚 发表于 2016-4-15 08:57 | 显示全部楼层 |阅读模式
本帖最后由 奔牛滚滚 于 2016-4-15 08:59 编辑
  1.     DMA_Cmd(DMA1_Channel3, DISABLE );
  2.     DMA1_Channel3->CM0ARL = (uint8_t)(waveDatas);
  3.     DMA_Cmd(DMA1_Channel3, ENABLE );
waveDatas是一个指针,指向波形数据.上面的第二句,是把指针的低字节写入DMA源地址寄存器的低位.但是收到警告
conversion from pointer to smaller integer
怎么写代码更规范,让这个警告消失?

dirtwillfly 发表于 2016-4-15 09:56 | 显示全部楼层
警告可以不管它
lxyppc 发表于 2016-4-15 11:47 来自手机 | 显示全部楼层
conversion from pointer to smaller integer
转换  从  指针   到   较小的   整数
你把指针转换成了一个较小的整数,看你的代码是转成了uint8
uint8的范围是0到255
你确定这个数能表示你的waveDatas这个地址么

p.s.data是不可数名词,复数形式不用加s
 楼主| 奔牛滚滚 发表于 2016-4-15 15:15 | 显示全部楼层
lxyppc 发表于 2016-4-15 11:47
conversion from pointer to smaller integer
转换  从  指针   到   较小的   整数
你把指针转换成了一个 ...

是的,16位地址.高位一直不变的,这个在中断里面执行,所以把高位赋值省略掉了.只改写低位地址.
()英文菜,谢谢指出英文语法错误.)
cuya 发表于 2016-4-15 21:16 | 显示全部楼层
警告不能不理。
一是用 #pragma 禁止此警告。
二是想法解决。一般编译器使用强制转换不应该有警告。 可以试试先转换为等宽的整数: (uint8_t)((unsigned int) waveDatas); 或是看看编译器手册是否有专门的指针强制转换命令

ghost2 发表于 2016-4-16 09:32 来自手机 | 显示全部楼层
用CM0AR寄存器可以么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

384

主题

1461

帖子

6

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