智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1533|回复: 6
打印 上一主题 下一主题

he mother's !what the fuck problem.

[复制链接]

50

主题

198

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1393
威望
690
贡献
439
兑换币
386
注册时间
2013-3-6
在线时间
132 小时
毕业学校
北京师范大学珠海分校
跳转到指定楼层
1#
发表于 2014-3-8 09:55:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
加了个函数...还没调用它,怎么就会让原来没问题的程序运行时死机呢?
这可能是什么原因?求老鸟,指条明路...
(内容看起来长,其实不长的,愿有心人给些建议,谢谢!)
问题奇葩到我不知道怎么说,抽象而简单的说是这样的:
原来的程序:
void main(void)
{
   if(flag1){
      ...
   }
   if(flag2){
     ...
  }
}
编译没问题,运行也正常!

在原来基础上加个函数:
void fun (void);
void main (void)
{
    if(flag1){
       ...
    }
    if(flag2){
      ...
   }
   fun(); //调用这个新实现的函数   
}
void fun (void)
{
   ...;
}
加了这个函数后,程序编译没问题,可是运行会死机...
这也不奇葩,也许我新写的函数有问题...不过后面的情况让我很想不开:

检查我新写的函数两天后,我实在没思路了,
就想是不是问题不是出在新函数上,而是在原有函数上。
于是我注释掉了调用新函数的语句,即不调用新写的函数,来检查原有的函数有没有问题,代码更改如下:
void fun (void);
void main (void)
{
    if(flag1){
       ...
    }
    if(flag2){
      ...
   }
   //fun(); //没改动其他的,就注释掉了这句。  
}
void fun (void)
{
   ...;
}
编译通过...可是运行会死机!诶,之前没问题的,怎么死机了呢?难道是我改的时候误操作了?
于是把之前备份的原有工程拿出来对比,没发现有误改的地方啊,分别测试原有的和现有的两个工程,
原有工程还是正常的,新的依旧会死机...这就怪了——虽然我添加了一个新的函数,但我都没调用,怎么就会引起死机呢???????进一步验证我修改中没误操作:我又做了以下修改(注释掉新写的函数)
//void fun (void);  //注释掉函数声明
void main (void)
{
    if(flag1){
       ...
    }
    if(flag2){
      ...
   }
   //fun(); //注释掉 调用语句。  
}
/*注释掉函数实体
void fun (void)
{
   ...;
}*/
再次编译没问题..运行也没死机!也就是说我没有误操作了。
这就怪了...怎么会这样呢??加了个函数...还没调用它呢,怎么就会让原来没问题的程序运行时死机了呢?

仁者见仁智者见智,都给点思路 / 建议 吧...





回复

使用道具 举报

50

主题

198

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1393
威望
690
贡献
439
兑换币
386
注册时间
2013-3-6
在线时间
132 小时
毕业学校
北京师范大学珠海分校
2#
 楼主| 发表于 2014-3-8 10:17:09 | 只看该作者
自己分析:对比前后的改动:“加了个函数,没调用就死机了”推出:没调用,不可能影响到程序的运行,难道是加了个函数造成了内存溢出,从而导致死机?印象中应该不会啊,没被调用的函数,只会被汇编成.o文件,不会被编译成目标代码(.hex)的,即烧写进单片机里的内容是不变的啊!自己查了下.map的情况:
  5 126  bytes of readonly  code memory
        60  bytes of readwrite code memory
   1 310  bytes of readonly  data memory
  17 929  bytes of readwrite data memory
不调用新函数的情况下,不管函数实体注释掉与否,code和data的量是不改变的...
而且,就算调用上新的函数,增大的量也不会超出容量啊...
我用的是K60:flash512_ram128

bulid文件夹下的release文件里的:.hex文件18KB
回复 支持 反对

使用道具 举报

31

主题

731

帖子

0

精华

版主

情怀、节操、内涵、下限

Rank: 9Rank: 9Rank: 9

积分
8787
威望
4777
贡献
1128
兑换币
3165
注册时间
2012-5-7
在线时间
1441 小时
毕业学校
长春大学
3#
发表于 2014-3-14 00:39:09 | 只看该作者
这种情况真没见过,debug一下看看死在哪个位置
回复 支持 反对

使用道具 举报

50

主题

198

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1393
威望
690
贡献
439
兑换币
386
注册时间
2013-3-6
在线时间
132 小时
毕业学校
北京师范大学珠海分校
4#
 楼主| 发表于 2014-3-14 10:26:05 | 只看该作者
majorfog 发表于 2014-3-14 00:39
这种情况真没见过,debug一下看看死在哪个位置

DEBUG过了,发现了个问题,可是依旧不知道怎么解决...
main中的其中一个if(flag)的flag异常了。而且异得很长...flag 我定义是u8 (unsigend char)无符号字符型。对他的操作只有赋值 0 、1或 2。可是调试的时候,死机时我观察该flag 的值,发现值竟然为256(8bit,最大值也就255啊!),窗口显示的类型始终显示的也是int型。不清楚是什么原因造成了,这个值的异常。能给点意见吗?
回复 支持 反对

使用道具 举报

31

主题

731

帖子

0

精华

版主

情怀、节操、内涵、下限

Rank: 9Rank: 9Rank: 9

积分
8787
威望
4777
贡献
1128
兑换币
3165
注册时间
2012-5-7
在线时间
1441 小时
毕业学校
长春大学
5#
发表于 2014-3-14 19:20:00 | 只看该作者

RE: he mother's !what the fuck problem.

尕玍紿 发表于 2014-3-14 10:26
DEBUG过了,发现了个问题,可是依旧不知道怎么解决...
main中的其中一个if(flag)的flag异常了。而且异 ...

你把这个变量声明成易变型的试试
回复 支持 反对

使用道具 举报

50

主题

198

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1393
威望
690
贡献
439
兑换币
386
注册时间
2013-3-6
在线时间
132 小时
毕业学校
北京师范大学珠海分校
6#
 楼主| 发表于 2014-3-16 19:53:48 | 只看该作者
我已经声明成 易变性的了!!
中断中会访问的变量 我都有这么做的。
回复 支持 反对

使用道具 举报

1

主题

16

帖子

0

精华

高级会员

Rank: 4

积分
833
威望
423
贡献
266
兑换币
279
注册时间
2013-11-1
在线时间
72 小时
7#
发表于 2014-3-18 17:42:28 | 只看该作者
表示不懂啊大婶们
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 23:15 , Processed in 0.045727 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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