一个飘渺的面试题...
我经历的某世界顶级硬件厂商的面试题:
一个程序, 它经常crash, 然后你为了调试,加上了printf, 它就不会crash了...
请问这是什么原因?
我觉得太飘渺了...
[解决办法]
这的确需要很多实践经验,估计是该公司实际遇到的问题
目前本人也觉得飘渺中……
忘高人指点
[解决办法]
去飘渺峰找天山童老
[解决办法]
是啊,这个我也不清楚!
[解决办法]
我倒是经历过printf出错,没有就没事的
[解决办法]
可能是跟什么输出缓冲有关吧,
没遇到同样问题的的确不好想象
[解决办法]
我想是和缓冲有关吧.具体的就不是很清楚了.你的面试题目也真是很难.
[解决办法]
可能的原因很多
[解决办法]
不知道哦……
收藏了,等待高手来详细解答
[解决办法]
up
[解决办法]
我觉得太飘渺了
==
同样的感觉,想不出来是什么原因,占楼,等答案。
[解决办法]
题目没说清楚吧,crash是调试执行吗?加了printf也是调试执行吗?是不是调试状态对结果也有影响。
[解决办法]
跟缓冲区有关吧,具体我也不是很清楚,关注中
[解决办法]
我想是和缓冲有关吧
[解决办法]
可能和时序有关系,增加了trace相当于增加延时,底层开发比较常见的问题。
[解决办法]
果然飘渺,期待高人解答,先收藏此页
[解决办法]
printf 调用21中断
使得程序无法crash
[解决办法]
应该是和时序有些关系
[解决办法]
upup
[解决办法]
up
[解决办法]
时序引起的,printf语句延时非常大,基本上来讲,在ti的dsp里面都是用dsp/bios里面的那个输出语句来完成这个,一个printf实现要有上百行的代码,嵌入式系统用这个语句很少,基本都是windows下用这玩意,至少我从来不用这个语句
[解决办法]
在这里借机问问大家
我的电脑好象不对了
电脑里的数据,无法传到外存储器里,移动硬盘啊,PSP啊
直接复制文件后粘贴到移动硬盘里会出现,文件无法找到OR文件路径不正确OR无法找到改文件
我估计是中毒了,但是杀不掉啊,进程里好象有问题,但不知道哪儿出问题了
大家帮帮忙啊,这可很糟糕的...
[解决办法]
缥缈啊~
[解决办法]
同意 programinc()
延迟问题, 时序
[解决办法]
漂~~~~~~~~
[解决办法]
mark
[解决办法]
时序,延迟的问题.
我遇到过.
[解决办法]
延迟,printf 内部可能有同步措施,等等。
[解决办法]
同意 yangliu817(杨柳)
[解决办法]
时延?还是没有说出本质吧
[解决办法]
同意时延的说法。
[解决办法]
mark 学习。
[解决办法]
这个问题在多线程通信处理的时候经常碰到的,可以肯定是资源互占了,用printf或者Trace延时一下可以缓解这个问题,用Sleep一定时间也能缓解,但是这样不是办法的,要找到真正冲突的地方才行。
[解决办法]
学习
[解决办法]
mark
[解决办法]
有时候cout好,有时候printf好
[解决办法]
学习~~
[解决办法]
_interupt int OperAt(int a)
{
int b = 2;
a *= b;
printf( "%d ",a);
return a;
}
我面试的一家单位笔试题,让我评价一下这个程序,我当时也感觉很缥缈!
[解决办法]
我也碰到过的,不过我用的是sleep
[解决办法]
samwzhang(分全给我) ( ) 信誉:100 2007-9-10 8:40:02 得分: 0
这个问题在多线程通信处理的时候经常碰到的,可以肯定是资源互占了,用printf或者Trace延时一下可以缓解这个问题,用Sleep一定时间也能缓解,但是这样不是办法的,要找到真正冲突的地方才行。
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
正解:-)
dch4890164(巴拉克) ( ) 信誉:100 2007-09-10 10:00:47 得分: 0
_interupt int OperAt(int a)
{
int b = 2;
a *= b;
printf( "%d ",a);
return a;
}
我面试的一家单位笔试题,让我评价一下这个程序,我当时也感觉很缥缈!
、、、、、、、、、、、、、、、、、、、、、、、、
是个中断函数,入口参数应该设置为volatile
[解决办法]
dch4890164(巴拉克) ( ) 信誉:100 2007-09-10 10:00:47 得分: 0
_interupt int OperAt(int a)
{
int b = 2;
a *= b;
printf( "%d ",a);
return a;
}
我面试的一家单位笔试题,让我评价一下这个程序,我当时也感觉很缥缈!
、、、、、、、、、、、、、、、、、、、、、、、、
是个中断函数,入口参数应该设置为volatile
另外:*2的效率肯定不如直接左移1位的效率高,而且不用生成临时变量。
[解决办法]
这个问题跟缓冲区有关吧.
[解决办法]
"是个中断函数,入口参数应该设置为volatile "
...?为什么
[解决办法]
volatile 嵌入式编程的...
一个定义为volatile的变量是说这变量可能会被意想不到的改变,这样编译器就不会去假设这个变量的值了.精确的说就是,优化器在用到这个变量时必须都小心地重读这个变量的值,而不是使用保存在寄存器里的备份.
中断函数的参数如一个中断服务子程序中会访问到的非字自动变量(Non-automatic variables)
[解决办法]
也有可能是内存溢出.
我遇见过系统经常崩溃,加上printf调试遇见后它就不死的情况.
[解决办法]
mark
[解决办法]
关注中
顶
[解决办法]
说明这个程序跟输出流有关,可能是IO操作时发生了内存泄漏,Printf可以把输出缓冲清空,所以问题不会重现了~~
以上只是猜测:)
[解决办法]
up
------解决方案--------------------
这种问题我遇到过几回,一般是指针跑飞了,因为加了语句,导致刚好跑到不会crash的语句了
[解决办法]
这只是程序时序上有区别,debug跑的肯定要慢些,release要快些...
在具体工程上的差别,也让我头通过n久...
[解决办法]
sorry
[解决办法]
我在TC时代就遇到过,现在想起来也许和系统优化有关(简单说有时永远用不上的程序段可能会不参与编译),还有*2操作一般也会被优化成移位操作(除非你用了关键字不优化)
[解决办法]
之前我们的linux系统也遇到过类似问题,在debug版本中不crash,但在release版本中crash,所以我们就怀疑是加了printf就不crash了,加了类似的sleep后也可以缓解此问题。lz的问题可能为:
1.时序问题(可以加mutex保护)
2.cpu资源抢占问题,可以加入sleep缓解
3.hardware处理能力问题,hardware或某芯片的处理能力没有你想象的那么快,如camera sensor,需要加入一些等待
4.其它(个人认为跟缓冲无关,又不是所以的hareware都跟它有关)
[解决办法]
这个是基本调试经验,但为什么不知道,困惑好久,等待高手。。。
[解决办法]
dch4890164(巴拉克) ( ) 信誉:100 2007-09-10 10:00:47 得分: 0
_interupt int OperAt(int a)
{
int b = 2;
a *= b;
printf( "%d ",a);
return a;
}
我面试的一家单位笔试题,让我评价一下这个程序,我当时也感觉很缥缈!
-------------------------------
1.中断函数不能有参数传递与返回值
2.printf()经常有重入和性能上的问题,在中断函数中避免使用
3.a *= b;中断函数中的语句尽量短,避免做大的运算
[解决办法]
好帖
留名
[解决办法]
mark
[解决办法]
tyj_3() ( ) 信誉:100 2007-9-10 19:09:19 得分: 0
dch4890164(巴拉克) ( ) 信誉:100 2007-09-10 10:00:47 得分: 0
_interupt int OperAt(int a)
{
int b = 2;
a *= b;
printf( "%d ",a);
return a;
}
我面试的一家单位笔试题,让我评价一下这个程序,我当时也感觉很缥缈!
-------------------------------
1.中断函数不能有参数传递与返回值
2.printf()经常有重入和性能上的问题,在中断函数中避免使用
3.a *= b;中断函数中的语句尽量短,避免做大的运算
-------------------------------
tyj_3()说的很准确,另外在中断中不能引入浮点数的变量,因为也有重入的问题(有的时候硬件也不支持)
这个帖子到目前为止应该可以结了吧,建议把后面的问题放入单片机开发去!