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

[复制链接]
3315|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了可不就退出了
香水城 发表于 2013-10-11 17:52 | 显示全部楼层
哈哈,宏晶的MCU跑到STM32的版面上来求助,还是这里人气旺嘛。

关于这个问题,LS正解~
戈卫东 发表于 2013-10-11 17:57 | 显示全部楼层
通常来说,main()里面是不可以有return的.
戈卫东 发表于 2013-10-11 17:59 | 显示全部楼层
我觉得你的那些return的地方可能作者原意是什么都不做,那可以让它空着,或者把那个判断整个去了.
hkcj 发表于 2013-10-11 20:28 | 显示全部楼层
应该是循环出了问题  可能是哪里出现了死循环  楼主  
拿起书本 发表于 2013-10-11 21:51 | 显示全部楼层
return是退出函数并返回, 如果函数有返回值,可以将返回值返回
奔马093 发表于 2013-10-11 23:43 | 显示全部楼层
先按二楼说的试试
香如故 发表于 2013-10-12 08:00 | 显示全部楼层
香水城 发表于 2013-10-11 17:52
哈哈,宏晶的MCU跑到STM32的版面上来求助,还是这里人气旺嘛。

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

估计是把STC也当成了ST MCU了。:P
w522930954 发表于 2013-10-12 08:50 | 显示全部楼层
while(1)的return。。。在while(1)里面不能写return、、
micropower 发表于 2013-10-12 11:22 | 显示全部楼层
main的声明是void,那么main()函数内出现return的话编译器就有可能会编译出逻辑错误。
建议把return换成continue、或者break
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()带有促使程序跑飞的错误语句,或者是出现了死循环。
从你的三言两语里只能得出这几个建议了。
-|continue;|- 发表于 2013-10-13 08:54 | 显示全部楼层
return要推敲
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部