打印

keilc在调用函数的时候怎么会跑到别的地方去?

[复制链接]
1807|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jack.king|  楼主 | 2007-12-2 20:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
昨天发现一个问题。
while(1)
{
if((fs_flag16&fs_flag17)==1)
   { 
    auto_half1();      
   }
}
/***************************************************/
void auto_half1(void)
{
  while(1)
 {
  if(fs_flag4==1)
   auto_half();
  }
 }
程序若向上面这么写就会出先程序跳到别的地方去的错误
若改成下面这个情况又正常了.
while(1)
{
if((fs_flag16&fs_flag17)==1)
   { 
    auto_half1();
         if(fs_flag4==1)
         auto_half();      
   }
}
/********************************************/
void auto_half1(void)
{
  while(1)
  {
  if(fs_flag4==1)
   break;
  } 
 }

/********************************************/
auto_half()//函数是一个执行动作的函数.比较简单

相关帖子

沙发
原野之狼| | 2007-12-2 23:12 | 只看该作者

也许是优化捣鬼了

使用特权

评论回复
板凳
jack.king|  楼主 | 2007-12-3 07:50 | 只看该作者

我把优化调节是9节.

那一般把优化调节到几级为最佳呢?
    

使用特权

评论回复
地板
computer00| | 2007-12-3 09:59 | 只看该作者

跳到别的地方,是哪个地方?

使用特权

评论回复
5
jack.king|  楼主 | 2007-12-3 13:00 | 只看该作者

跑到报警程序去了

 
   我在程序里面有一个warning_open()//报警自程序.
当出错误是就跑到这个程序里面去了并且还自动选择了10号报警报警程序如下:
 /******************************************************************/
void warning_open(void)
{                   
  uchar gg; uchar kk;   
  da_conv(0);
  warn=1;
 all_time=0;
 t_all_time=0;   
  tr0=0;
                                switch(warning)
    {
case 0x01: {shi=0x0f;min=0x0f;sec=0x00;msec=0x01;} //低压
                  break;
case 0x02: {shi=0x0f;min=0x0f;sec=0x00;msec=0x02;} //关模
                break;  
case 0x03: {shi=0x0f;min=0x0f;sec=0x00;msec=0x03;} //开模
                  break;
case 0x05: {shi=0x0f;min=0x0f;sec=0x00;msec=0x05;} //加料
           break;
case 0x08: {shi=0x0f;min=0x0f;sec=0x08;msec=0x08;} //紧急回升
                  break;
case 0x09: {shi=0x0f;min=0x0f;sec=0x01;msec=0x00;}//电眼
                   break;
                 }
                 action00(0x70);
                 for(gg=0;gg<50;gg++)      
                 {
               led_display(0x01,0xfb);delay(30);    
               led_display(0x02,0x6f);delay(30);
                 cleardog();
                 diss(); 
                  }
                 up1=0x01;     
                 flag3_3=0;
                 check_addr_p();
                 da_conv(ya);
                    while(1)
                   {
               led_display(0x01,0xfb);delay(30);    
          led_display(0x01,0x5f);delay(30);
                    serive00();
                if(fs_flag13==1)      
                    { 
                 da_conv(0);
                for(kk=0;kk<60;kk++)
                   {
                    led_display(0x01,0xfb);delay(30);    
                    clear();
              led_display(0x01,0x5f);delay(30);
                        led_display(0x02,0x6f);delay(30);
                    clear();
                           cleardog();
                           diss(); 
                clear();
                   }
                 zero02();
                   }
                   }
 }

使用特权

评论回复
6
jack.king|  楼主 | 2007-12-3 13:01 | 只看该作者

说明上面程序的10好报警就是case=0x09时

使用特权

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

本版积分规则

488

主题

2158

帖子

1

粉丝