打印

求助: void main() 函数循环执行,感觉跳出了While(1)循环

[复制链接]
2769|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
reins|  楼主 | 2013-10-11 15:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这两天调试STC15F204EA,遇到奇怪的问题,请各位大侠指导,谢谢!
void main()
{
        P3 = 0xff;       
        P1 = 0xff;
        P37 = 0x0;  
                 Delay1S();
        while(1)
        {
                         if(P32 == 0x0)
                         {
                      Forward();               
                         }
                if(P30 == 0x0)
                {
                      TurnBack();         
                }
                if(P16 == 0x1)
                {
                      ZBPrint();
                }
                if(P15 == 0x1)
                {
                       return;          
                }               
                if(P12 == 0x0)
                {
                      PrintOver();                        
                }          
                if(P14 == 0x0)
                {
                      return;         
                }            
        }         
}
正常情况按下P32后,执行Forward(),按下P30执行BackUP(),实际上,执行完Forward后,按P30没有反应了,感觉是跳出了循环。
另外,Forward函数调用别的函数了,别的函数中存在return语句。
我用的编译器是Keil V4.02
沙发
wangch_sh| | 2013-10-11 15:40 | 只看该作者
在Forward();后面加一条语句,点亮一个LED灯。如果等点不亮,就证明Forward();        没执行完。        

使用特权

评论回复
板凳
craaazyfor| | 2013-10-11 15:41 | 只看该作者
用串口或者LED输出信息来调试

使用特权

评论回复
地板
huzi2099| | 2013-10-11 15:54 | 只看该作者
return了可不就退出了

使用特权

评论回复
5
香水城| | 2013-10-11 17:52 | 只看该作者
哈哈,宏晶的MCU跑到STM32的版面上来求助,还是这里人气旺嘛。

关于这个问题,LS正解~

使用特权

评论回复
6
戈卫东| | 2013-10-11 17:57 | 只看该作者
通常来说,main()里面是不可以有return的.

使用特权

评论回复
7
戈卫东| | 2013-10-11 17:59 | 只看该作者
我觉得你的那些return的地方可能作者原意是什么都不做,那可以让它空着,或者把那个判断整个去了.

使用特权

评论回复
8
hkcj| | 2013-10-11 20:28 | 只看该作者
应该是循环出了问题  可能是哪里出现了死循环  楼主  

使用特权

评论回复
9
拿起书本| | 2013-10-11 21:51 | 只看该作者
return是退出函数并返回, 如果函数有返回值,可以将返回值返回

使用特权

评论回复
10
奔马093| | 2013-10-11 23:43 | 只看该作者
先按二楼说的试试

使用特权

评论回复
11
香如故| | 2013-10-12 08:00 | 只看该作者
香水城 发表于 2013-10-11 17:52
哈哈,宏晶的MCU跑到STM32的版面上来求助,还是这里人气旺嘛。

关于这个问题,LS正解~ ...

估计是把STC也当成了ST MCU了。:P

使用特权

评论回复
12
w522930954| | 2013-10-12 08:50 | 只看该作者
while(1)的return。。。在while(1)里面不能写return、、

使用特权

评论回复
13
micropower| | 2013-10-12 11:22 | 只看该作者
main的声明是void,那么main()函数内出现return的话编译器就有可能会编译出逻辑错误。
建议把return换成continue、或者break

使用特权

评论回复
14
chenbb8| | 2013-10-12 14:36 | 只看该作者
mian的定义本来就是int返回值的,何谈不能用return呢。LZ根本就定义错误了。
这里用了return和用break的效果一样,都是离开了while循环-->跑飞,所以LZ的设计也是错误的。
另外如果P15 == 0x1
P14 == 0x0
不成立的话 程序是不会跑飞的。

所以LZ首先要做的是,看下在按下P3.2后,观察P1.5和P1.4的键值。
没有仿真功能的话就在相关分支控制不同的LED灯,最好还是通过串口发送类似这样的字符串“P15 == 0x1”

假设没有问题的话,那么就是你的Forward()带有促使程序跑飞的错误语句,或者是出现了死循环。
从你的三言两语里只能得出这几个建议了。

使用特权

评论回复
15
-|continue;|-| | 2013-10-13 08:54 | 只看该作者
return要推敲

使用特权

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

本版积分规则

1

主题

1

帖子

1

粉丝