智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2096|回复: 8
打印 上一主题 下一主题

[编程类] 悬赏三百贡献,解决一个小问题!!!

[复制链接]

27

主题

244

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6556

论坛元老奖章热心会员奖章

QQ
威望
1277
贡献
4939
兑换币
188
注册时间
2011-12-31
在线时间
170 小时
跳转到指定楼层
1#
发表于 2012-5-9 21:57:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
300贡献
本帖最后由 二硫碘化钾 于 2012-5-9 22:03 编辑

我定义了一个函数:int fun(void),其返回值范围为0~206,函数中用到一个临时变量tmp是unsigned char 类型,返回该值
主函数中调用这个函数:arry[0] = fun();    arry是int类型
后面还有一个无线发送函数:send(data);   该函数用到arry,将arry赋给另一个数组。
然后,奇迹出现了。。。。。。
arry[0]中的值是正确的,但是,把send(data)屏蔽掉,arry[0]的值就错了,有时候会达到是两万多或是负两万多,根据返回至的范围来看这不可能啊!!!原来以为是类型问题,加了强制类型转换还是不行。
之前没有加无线发送时也没出现过这样的问题,纠结好几天了,百思不得其解,求高手!

最佳答案

查看完整内容

我常常遇到这样的问题,后来发现是Codewarrior对代码进行了优化,如果你只是单纯的对某个变量赋值,而在其他的地方又没有引用该变量,那么在编译阶段就不给这个变量分配空间,或者是这一变量的空间被分配到无效的地址,这样不会对程序造成影响,这个是正常的。

5

主题

63

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1513
威望
657
贡献
662
兑换币
180
注册时间
2012-4-6
在线时间
97 小时
2#
发表于 2012-5-9 21:57:12 | 只看该作者
我常常遇到这样的问题,后来发现是Codewarrior对代码进行了优化,如果你只是单纯的对某个变量赋值,而在其他的地方又没有引用该变量,那么在编译阶段就不给这个变量分配空间,或者是这一变量的空间被分配到无效的地址,这样不会对程序造成影响,这个是正常的。
回复

使用道具 举报

0

主题

14

帖子

0

精华

高级会员

Rank: 4

积分
905
威望
478
贡献
193
兑换币
0
注册时间
2012-2-1
在线时间
117 小时
毕业学校
XIHUA
3#
发表于 2012-5-10 14:50:34 | 只看该作者
本帖最后由 electric 于 2012-5-10 14:51 编辑

请问你有没有初始化             int   arry[10]={0};     最好是确定的数组个数
回复

使用道具 举报

27

主题

244

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6556

论坛元老奖章热心会员奖章

QQ
威望
1277
贡献
4939
兑换币
188
注册时间
2011-12-31
在线时间
170 小时
4#
 楼主| 发表于 2012-5-10 16:18:14 | 只看该作者
electric 发表于 2012-5-10 14:50
请问你有没有初始化             int   arry[10]={0};     最好是确定的数组个数

初始化了,怀疑是编译的问题,但又找不到问题所在
回复

使用道具 举报

4

主题

38

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1899
QQ
威望
509
贡献
1176
兑换币
2
注册时间
2011-12-6
在线时间
107 小时
5#
发表于 2012-5-12 22:38:32 | 只看该作者
建议贴一下代码 这样看起来比较容易
分析原因可能有2:
1,中断中不止一次的调用相关程序段。
2.传参的时候变量精度转换问题,最好把编译器的编译级别调到遇到Warning的级别。
回复

使用道具 举报

27

主题

244

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6556

论坛元老奖章热心会员奖章

QQ
威望
1277
贡献
4939
兑换币
188
注册时间
2011-12-31
在线时间
170 小时
6#
 楼主| 发表于 2012-5-13 10:44:07 | 只看该作者
guang09080908 发表于 2012-5-12 22:38
建议贴一下代码 这样看起来比较容易
分析原因可能有2:
1,中断中不止一次的调用相关程序段。

1、中断中只改变了一个标志位,执行程序执行程序再主函数中。
2、参数问题可能更有可能,但是后面的函数影响前面的函数,这就搞不懂了
回复

使用道具 举报

0

主题

72

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1544
威望
675
贡献
441
兑换币
78
注册时间
2012-2-2
在线时间
214 小时
毕业学校
vvvvvvvvvvvv
7#
发表于 2012-5-14 10:54:06 | 只看该作者
signed 与 unsigned?
回复

使用道具 举报

27

主题

244

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6556

论坛元老奖章热心会员奖章

QQ
威望
1277
贡献
4939
兑换币
188
注册时间
2011-12-31
在线时间
170 小时
8#
 楼主| 发表于 2012-5-14 15:40:35 | 只看该作者
vvv 发表于 2012-5-14 10:54
signed 与 unsigned?

unsigned
回复

使用道具 举报

0

主题

125

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1859
威望
825
贡献
426
兑换币
166
注册时间
2012-4-28
在线时间
304 小时
9#
发表于 2012-5-17 18:25:59 | 只看该作者
贴上代码比较直观吧
回复

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-21 03:35 , Processed in 0.138234 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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