打印

大侠们,求指教,跪求!!!!折磨了二天了

[复制链接]
1778|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tianli1980|  楼主 | 2012-6-9 19:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 tianli1980 于 2012-6-9 21:15 编辑

大侠们,求指教啊,跪求
pause是一个标志位,赋值为1,每当串口收到数据时都会在中断服务程序中使pause=0
问题是,如果我在while(pause);前什么都不加的话就可以正常执行,否则就不执行!
while(1)
{
/*这里加一句话都不行,不管什么,哪怕是给main()里的局部变量i随便赋个值都不可以*/
while(paus
go_step(1);
     pause=1;
}


大侠们,求指教啊,跪求
pause是一个标志位,赋值为1,每当串口收到数据时都会在中断服务程序中使pause=0
问题是,如果我在while(pause);前什么都不加的话就可以正常执行,否则就不执行!
while(1)
{
/*这里加一句话都不行,不管什么,哪怕是给main()里的局部变量i随便赋个值都不可以*/while(pause);
go_step(1);
     pause=1;
}
沙发
yfy871216| | 2012-6-9 21:24 | 只看该作者
你的问题问的也挺折磨人的……

使用特权

评论回复
板凳
kseeker| | 2012-6-10 00:47 | 只看该作者
粗略估计你的pause不是volatile的,被优化了。

使用特权

评论回复
地板
t24101| | 2012-6-10 22:15 | 只看该作者
還是搞不懂你的問題是什麼耶

使用特权

评论回复
5
拿起书本| | 2012-6-11 10:22 | 只看该作者
while(!pause)
{ go_step(1);
     pause=1;
}
你是不是应该这样写?

使用特权

评论回复
6
xxlin1984| | 2012-6-11 12:06 | 只看该作者
问题描述不够清楚,LZ先试试3L的办法。

使用特权

评论回复
7
lai832| | 2012-6-11 12:39 | 只看该作者
是不是定义问题??在别的文件定义了,调用没有定义extern

使用特权

评论回复
8
juanhao| | 2012-6-11 15:24 | 只看该作者
看看编译选项,优化级别别设太高

使用特权

评论回复
9
香水城| | 2012-6-11 15:41 | 只看该作者
一个会被中断程序改变的变量,要习惯去设置为volatile

编译器的智能化水平越高,越需要精确的描述

使用特权

评论回复
10
jxmzzr| | 2012-6-12 22:35 | 只看该作者
收到中断后,执行go_step,按你的写法,是一直在执行go_step。

使用特权

评论回复
11
sixgett| | 2012-6-13 11:19 | 只看该作者
香主说的太深奥了,没看懂。。。还是BD一下好了!

使用特权

评论回复
12
jgphu| | 2012-6-13 15:19 | 只看该作者
你将pause设置成 unsigned char型。

你这个问题,我都还没有明白你的意思。唉

你要在while(pause); 加其它的语句是不会影响你后面语句的执行的。实在不行,你这么简单的程序,用JLINK仿真一下罢。

使用特权

评论回复
13
拿起书本| | 2012-6-14 22:28 | 只看该作者
一般说来,volatile用在如下的几个地方:   1、中断服务程序中修改的供其它程序检测的变量需要加volatile;   2、多任务环境下各任务间共享的标志应该加volatile;   3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;   另外,以上这几种情况经常还要同时考虑数据的完整性(相互关联的几个标志读了一半被打断了重写),在1中可以通过关中断来实   现,2中可以禁止任务调度,3中则只能依靠硬件的良好设计了。

使用特权

评论回复
14
tianli1980|  楼主 | 2012-6-16 17:51 | 只看该作者
困扰我好久了,终于搞定
volatile u8 pause;
已经解决了,没加volatile
谢各位。结贴了

使用特权

评论回复
15
jason13| | 2012-6-17 14:55 | 只看该作者
晕死,这表达能力。。。

使用特权

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

本版积分规则

482

主题

2214

帖子

11

粉丝