智能车制作

标题: 悬赏三百贡献,解决一个小问题!!! [打印本页]

作者: 二硫碘化钾    时间: 2012-5-9 21:57
标题: 悬赏三百贡献,解决一个小问题!!!
本帖最后由 二硫碘化钾 于 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]的值就错了,有时候会达到是两万多或是负两万多,根据返回至的范围来看这不可能啊!!!原来以为是类型问题,加了强制类型转换还是不行。
之前没有加无线发送时也没出现过这样的问题,纠结好几天了,百思不得其解,求高手!

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

作者: electric    时间: 2012-5-10 14:50
本帖最后由 electric 于 2012-5-10 14:51 编辑

请问你有没有初始化             int   arry[10]={0};     最好是确定的数组个数
作者: 二硫碘化钾    时间: 2012-5-10 16:18
electric 发表于 2012-5-10 14:50
请问你有没有初始化             int   arry[10]={0};     最好是确定的数组个数

初始化了,怀疑是编译的问题,但又找不到问题所在
作者: guang09080908    时间: 2012-5-12 22:38
建议贴一下代码 这样看起来比较容易
分析原因可能有2:
1,中断中不止一次的调用相关程序段。
2.传参的时候变量精度转换问题,最好把编译器的编译级别调到遇到Warning的级别。
作者: 二硫碘化钾    时间: 2012-5-13 10:44
guang09080908 发表于 2012-5-12 22:38
建议贴一下代码 这样看起来比较容易
分析原因可能有2:
1,中断中不止一次的调用相关程序段。

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

作者: vvv    时间: 2012-5-14 10:54
signed 与 unsigned?
作者: 二硫碘化钾    时间: 2012-5-14 15:40
vvv 发表于 2012-5-14 10:54
signed 与 unsigned?

unsigned
作者: 基佬    时间: 2012-5-17 18:25
贴上代码比较直观吧




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2