[STM32] 实在是无法解决的C语言问题

[复制链接]
4101|32
 楼主| zhaoqingtao007 发表于 2014-3-3 22:01 | 显示全部楼层 |阅读模式
今天调程序的时候,发现一个奇怪的问题,说我二维数组定义了没有使用,我明明在函数里面使用了。好奇怪,大神求解决!
warning:  #550-D: variable "xy" was set but never used
void Read_IO_XY(u16 *x, u16 *y)                                   //读取10次,取平均值
{
        u16 xy[2][10];
        u8 cnt;
        
        cnt = 0;
        while((Pen_State == 0) && (cnt < 10))
        {
                if(1 == Read_IO_ADS())
                {
                        xy[0][cnt] = Pen.X0;
                        xy[1][cnt] = Pen.Y0;
                        cnt++;
                }        
        }        
}
sqmm 发表于 2014-3-3 23:22 | 显示全部楼层
不会是其他函数内还有xy变量吧
香水橙 发表于 2014-3-3 23:38 | 显示全部楼层
有一种可能性,就是这句话永远不成立:if(1 == Read_IO_ADS());即Read_IO_ADS()永远不等于1。这种情况下,编译器把下面三行优化掉了。
xinzha 发表于 2014-3-4 10:04 | 显示全部楼层
我猜Pen_State是个来自于硬件寄存器的值,而定义这个值的时候没有使用volatile,而且这个值的初始定义不是1

评分

参与人数 1威望 +3 收起 理由
香水橙 + 3 同意这种说法,很给力!

查看全部评分

杨爱林林 发表于 2014-3-4 11:06 | 显示全部楼层
数组xy 为右值 才算使用

评分

参与人数 4威望 +14 收起 理由
xinzha + 5
zhaoqingtao007 + 1 你说的很对
niuyaliang + 2
dong_abc + 6

查看全部评分

WYT440 发表于 2014-3-4 11:47 | 显示全部楼层
数组在if条件语句里面,有可能会被优化掉的,if后面加个else对数组进行操作试试
ayb_ice 发表于 2014-3-4 14:42 | 显示全部楼层
极有可能是
if(1 == Read_IO_ADS())

这个条件永远不成立
zzj025 发表于 2014-3-4 16:49 | 显示全部楼层
导致这个警告是因为 u16 xy[2][10]只是局部变量,编译器的警告指示告诉你,这个变量虽然赋值了,但没有意义,函数退出变量就不存在了
q553178245 发表于 2014-3-4 17:32 | 显示全部楼层
楼上正解.
江枫渔火 发表于 2014-3-4 18:18 | 显示全部楼层
正确答案是5楼,其他楼层不是。请注意!
myxiaonia 发表于 2014-3-4 19:04 来自手机 | 显示全部楼层
为擦,那个坛上一模一样的问题哈哈哈
niuyaliang 发表于 2014-3-4 20:01 | 显示全部楼层
杨爱林林 发表于 2014-3-4 11:06
数组xy 为右值 才算使用

同意五楼的,只有在右面才算使用
香水橙 发表于 2014-3-4 21:32 | 显示全部楼层
同意5楼,疏忽了,:L:L
ifpga 发表于 2014-3-4 21:48 | 显示全部楼层
代码是有问题
xy 会被优化掉
sedatefire 发表于 2014-3-4 21:56 | 显示全部楼层
智能编译器的原则是
1.只有写入而没有读出的数据是没有意义的。
2.只有读出,没有写入的数据区,是非法的,被警告的。

编译器有许多关键字来显示表明这些特殊内存区,比如unused等

评分

参与人数 1威望 +8 收起 理由
xyz549040622 + 8

查看全部评分

dictionary 发表于 2014-3-5 08:33 | 显示全部楼层
你只是将数据放了进去,更本就没使用过,从数组的 分配 到 释放,更本就没参与运算过。你把数据放入数组然后再释放数组 这样算是用过leme
?
HORSE7812 发表于 2014-3-5 08:42 | 显示全部楼层
58HEYANG 发表于 2014-3-5 16:45 | 显示全部楼层
嗯,五楼厉害!
nashouat 发表于 2014-3-5 22:02 | 显示全部楼层
杨爱林林 发表于 2014-3-4 11:06
数组xy 为右值 才算使用

正解
bobde163 发表于 2014-3-7 23:47 | 显示全部楼层
学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

23

帖子

0

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