打印
[STM32]

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

[复制链接]
3456|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 同意这种说法,很给力!
5
杨爱林林| | 2014-3-4 11:06 | 只看该作者
数组xy 为右值 才算使用

使用特权

评论回复
评分
参与人数 4威望 +14 收起 理由
xinzha + 5
zhaoqingtao007 + 1 你说的很对
niuyaliang + 2
dong_abc + 6
6
WYT440| | 2014-3-4 11:47 | 只看该作者
数组在if条件语句里面,有可能会被优化掉的,if后面加个else对数组进行操作试试

使用特权

评论回复
7
ayb_ice| | 2014-3-4 14:42 | 只看该作者
极有可能是
if(1 == Read_IO_ADS())

这个条件永远不成立

使用特权

评论回复
8
zzj025| | 2014-3-4 16:49 | 只看该作者
导致这个警告是因为 u16 xy[2][10]只是局部变量,编译器的警告指示告诉你,这个变量虽然赋值了,但没有意义,函数退出变量就不存在了

使用特权

评论回复
9
q553178245| | 2014-3-4 17:32 | 只看该作者
楼上正解.

使用特权

评论回复
10
江枫渔火| | 2014-3-4 18:18 | 只看该作者
正确答案是5楼,其他楼层不是。请注意!

使用特权

评论回复
11
myxiaonia| | 2014-3-4 19:04 | 只看该作者
为擦,那个坛上一模一样的问题哈哈哈

使用特权

评论回复
12
niuyaliang| | 2014-3-4 20:01 | 只看该作者
杨爱林林 发表于 2014-3-4 11:06
数组xy 为右值 才算使用

同意五楼的,只有在右面才算使用

使用特权

评论回复
13
香水橙| | 2014-3-4 21:32 | 只看该作者
同意5楼,疏忽了,:L:L

使用特权

评论回复
14
ifpga| | 2014-3-4 21:48 | 只看该作者
代码是有问题
xy 会被优化掉

使用特权

评论回复
15
sedatefire| | 2014-3-4 21:56 | 只看该作者
智能编译器的原则是
1.只有写入而没有读出的数据是没有意义的。
2.只有读出,没有写入的数据区,是非法的,被警告的。

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

使用特权

评论回复
评分
参与人数 1威望 +8 收起 理由
xyz549040622 + 8
16
dictionary| | 2014-3-5 08:33 | 只看该作者
你只是将数据放了进去,更本就没使用过,从数组的 分配 到 释放,更本就没参与运算过。你把数据放入数组然后再释放数组 这样算是用过leme
?

使用特权

评论回复
17
HORSE7812| | 2014-3-5 08:42 | 只看该作者
:)

使用特权

评论回复
18
58HEYANG| | 2014-3-5 16:45 | 只看该作者
嗯,五楼厉害!

使用特权

评论回复
19
nashouat| | 2014-3-5 22:02 | 只看该作者
杨爱林林 发表于 2014-3-4 11:06
数组xy 为右值 才算使用

正解

使用特权

评论回复
20
bobde163| | 2014-3-7 23:47 | 只看该作者
学习了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

23

帖子

0

粉丝