OpenEdv-开源电子网

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

原子 请问为什么我这个程序下到板子里 会出现跑了一会儿就停止了或者距离远一些也停止了呢?

[复制链接]

3

主题

8

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2011-12-19
在线时间
0 小时
发表于 2011-12-23 16:23:38 | 显示全部楼层 |阅读模式
 为什么我这个程序下到板子里  会出现跑了一会儿就停止了或者距离远一些也停止了呢?
#include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h" 
#include "key.h"    
#include "24l01.h"
   
//收发都做在一个函数里面,通过按键来确定进入发送模式,还是接收模式                    
int main(void)
{
u8 key,mode;
u16 count1,count2;
u8 tmp_buf[33]={'1','2','3','4','5'};
    u8 flag=0;
u8 Sec_Cho_Fir=0,Sec_Cho_Sec=0;    //二次选择


   Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口1初始化        
KEY_Init();       //按键初始化
LED_Init();         //LED初始化
NRF24L01_Init();    //初始化NRF24L01    
 
while(NRF24L01_Check())//检测不到24L01 //检查无线模块是否存在,不影响时间
{
LED0=!LED0;//DS0闪烁
}
/////////////////////////////正式选择部分////////////////////////////////////////
while(1)    //在该部分确定进入哪个模式!
{  
key=KEY_Scan();
if(key==1)
{
mode=0;   
break;
}else if(key==2)
{
mode=1;
break;
}
}           
/////////////////////////////mode==0////////////////////////////////////////
if(mode==0)  
{   
while(1)
{
if(0==flag)
{  
RX_Mode(); //接收模式
    while(0==flag)
{       
if(NRF24L01_RxPacket(tmp_buf)==0)  //一旦接收到信息 点亮LED0
{
count1++;
printf("count1=%d\n",count1);  //打印串口发送次数计数标志
LED0=!LED0;
Sec_Cho_Fir++;
if(Sec_Cho_Fir>=10)
{
flag=1;
Sec_Cho_Fir=0;
}
}
   }
}
if(0!=flag)
{
  TX_Mode();    //发送模式
    while(0!=flag)
    {     
    if(NRF24L01_TxPacket(tmp_buf)==TX_OK)
   {
    count2++;
    printf("count2=%d\n",count2);  
    LED1=!LED1;
    // flag = 0;
Sec_Cho_Fir++;
if(Sec_Cho_Fir>=10)
{
flag=0;
Sec_Cho_Fir=0;
}
     }
      }
}             
   }
}  else     
  /////////////////////////////mode==1////////////////////////////////////////
{     
   while(1)
   {  
if(0==flag)
  {
TX_Mode();  //发送模式
while(0==flag)
{    
if(NRF24L01_TxPacket(tmp_buf)==TX_OK)
{
    count2++;
    printf("count2=%d\n",count2);  
    LED1=!LED1;
Sec_Cho_Sec++;
if(Sec_Cho_Sec >= 10)   //一次发送10个包
{
Sec_Cho_Sec = 0;
   flag=1;
}
}
}
 }  
 if(0!=flag)
 {
    RX_Mode();  //接收模式
     while(0!=flag)
{       
 if(NRF24L01_RxPacket(tmp_buf)==0)  //一旦接收到信息 点亮LED0
 {
count1++;
printf("count1=%d\n",count1);  //打印串口发送次数计数标志
LED0=!LED0;
// flag=0;
Sec_Cho_Sec++;
if(Sec_Cho_Sec >= 10) //一次发送10个包
{
Sec_Cho_Sec = 0;
   flag=0;
}
 } 
   }
 } 
  }
}   
}
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2011-12-23
在线时间
5 小时
发表于 2011-12-23 17:01:27 | 显示全部楼层
不知道你说的停止是什么意思,跑飞了还是死循环了。而且我觉得这个程序很危险,用了很多while(1)循环,但是退出的条件又不完整,就出现了很多死循环的机会。
回复 支持 反对

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2011-12-19
在线时间
0 小时
 楼主| 发表于 2011-12-23 18:34:44 | 显示全部楼层
回复【2楼】quqw:
---------------------------------
是滴!我参考修改一下!
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
发表于 2011-12-23 20:05:35 | 显示全部楼层
回复【2楼】quqw:
---------------------------------
同意,我写程序的过程中尽量避免用while(1)加break实现循环,还尽量避免用goto,因为这两种看似很简单的方法,很捷径的方法,如果处理过程有疏忽,经常会死在哪里都不知道。
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2011-12-23 22:53:58 | 显示全部楼层
回复【楼主位】first_mouse:
---------------------------------
自己用jtag跟踪一下.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2011-12-19
在线时间
0 小时
 楼主| 发表于 2011-12-24 17:19:16 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
这个无线模块也可以跟踪?、?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2011-12-24 18:59:58 | 显示全部楼层
回复【6楼】first_mouse:
---------------------------------
可以啊
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2011-12-19
在线时间
0 小时
 楼主| 发表于 2011-12-26 09:15:36 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
这个我来试一试再说。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 17:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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