OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3378|回复: 6

同样的函数,放在while(1)循环外面时,函数中的语句不执行,而放在while(1)循环内就执行?

[复制链接]

1

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2017-4-4
在线时间
5 小时
发表于 2017-4-4 11:12:40 | 显示全部楼层 |阅读模式
1金钱
主程序如下,当poweron_Init()放在while(1)里面时,函数语句正常执行,而把poweron_Init()放在while(1)里面时,函数的语句就不执行了,请问各位大神这是什么原因?int main()
{                  
        usart3_init();//′®¿ú33õê¼»ˉ
        usart1_init();
        
        while(1)
        {        
                poweron_Init();
         
        }        


调用的函数为:
void poweron_Init(void)                                                  


{
    u8 counter=0;
    Delay(10000);
    /*response RDY*/
    if(rx_counter==7)
    {
             //rx_counter=0;
       for(counter=0; counter<7; counter++)
       {
          if(receive_command[counter] != hardware_init_value1[counter])
          {
             break;
          }
       }

       if(counter>=7)
       {
          hwinitial_ok_f=1;
                            //rx_counter=0;
       }     
       else
       {
          hwinitial_ok_f=0;
                            //rx_counter=0;
       }
    }
}


void Delay(u32 nCount)
{
for(; nCount != 0 ; nCount--);
}
//·¢&#203;íò&#187;&#184;&#246;×&#214;·&#251;′&#174;
/*******************************************************************************
* Name  : Uart3_PutString
* Deion : print a string to the uart3
* Input : buf&#206;a·¢&#203;íêy&#190;Yμ&#196;μ&#216;&#214;· , len&#206;a·¢&#203;í×&#214;·&#251;μ&#196;&#184;&#246;êy
*******************************************************************************/
void Uart3_PutString(u8 *buf , u8 len)
{   u8 i;
    for(i=0;i<len;i++)
    {
        Uart3_PutChar(*buf++);
    }
}


//·¢&#203;íò&#187;&#184;&#246;×&#214;·&#251;
/*******************************************************************************
* Name  : Uart3_PutChar
* Deion : printf a char to the uart.
*******************************************************************************/
u8 Uart3_PutChar(u8 ch)
{
    /* Write a character to the USART */
    USART_SendData(USART3, (u8) ch);
    while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET)
   {

   }
   return ch;
}

最佳答案

查看完整内容[请看2#楼]

是不是程序走完了,外部初始化信号还没有过来。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

211

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2600
金钱
2600
注册时间
2016-7-6
在线时间
546 小时
发表于 2017-4-4 11:12:41 | 显示全部楼层
是不是程序走完了,外部初始化信号还没有过来。
把复杂的事,做简单!
回复

使用道具 举报

14

主题

1592

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2622
金钱
2622
注册时间
2014-7-17
在线时间
350 小时
发表于 2017-4-4 11:28:14 | 显示全部楼层
你这函数有什么作用的??
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2017-4-4
在线时间
5 小时
 楼主| 发表于 2017-4-4 15:31:28 | 显示全部楼层
这个函数是用来接收和校验初始化信号的
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2017-4-4
在线时间
5 小时
 楼主| 发表于 2017-4-4 15:33:58 | 显示全部楼层
因为只需要接收一次初始化信号,应该是放在while(1)循环的外面;可以放在外面函数内部的语句就不执行,只有放在while(1)循环里面函数的语句才被执行
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2017-4-4
在线时间
5 小时
 楼主| 发表于 2017-4-4 22:55:59 | 显示全部楼层
应该在程序走完之前收到初始化信号的,因为我调试的时候观察了接收数组的数值和数组长度,程序执行完是有变化的
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2017-4-4
在线时间
5 小时
 楼主| 发表于 2017-4-4 23:08:57 | 显示全部楼层
月无缺,你说得很有道理,函数放在while(1)里面是反复执行的,这次走完没有收到初始化信号,下次继续执行,总有一次会收到初始化信号;而放在while(1)外面就很可能能出现程序走完,而初始化信号还没收到的情况;看来我要增加个延时程序才行了,多谢啊!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-22 09:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表