找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3911|回复: 3
收起左侧

STM32程序运行运行着就卡死了

[复制链接]
ID:79697 发表于 2018-12-28 17:50 | 显示全部楼层 |阅读模式
哪位大神帮忙看一下程序运行一段时间,就跑死了,非常感谢!
#include "sys.h"
#include "led.h"
#include "delay.h"
#include "iwdg.h"
#include "wwdg.h"
#include "usart.h"
#include "myfun.h"
#include "timer.h"
#include "weizhi.h"

#include "adc.h"
#include "key.h"


extern int h1,h2,h3,h4;
extern float kp1,kp2,kp3,kp4;
extern int arr[6];
int biaozhi_hansheng=0;
int reset=0;
int d1=0,d2=0,d3=0,d4=0;


int main(void)
{
        int biaozhi_hansheng=0;
        int key=0;
        
/*************鼾声变量******************/
        int snore_tine=0,snore_tine_max=0;
        int snore_interval=0,snore_interval_max=0;
  int x=0,y=0;
        int m, n;
        unsigned char snore_s4=0;
        unsigned char snore_s5=0;    //判断 第五步是否符合条件,如果符合则置一
/*************鼾声变量******************/
        delay_init();
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        uart2_init(115200);
        uart_init(115200);
        LED_Init();
        TIM3_Int_Init(999,7199);
        ADCx_Init();
        KEY_Init();
        

        while(1)
        {
                 key=KEY_Scan(1);
                 if(reset==0)
                 {
                    weizhi();
                          reset=1;
                          kp1=kp2=kp3=kp4=0;
                    GPIO_Write(GPIOC,0x0000);
                 }                        
               
                if(biaozhi_hansheng==0)
                {
/**********************************鼾声检测**********************************/

                if (snoue_count==1)
                {
        /******  s4   判断   ************************/                        
                        for(x=1;x<SNOUE_MAX; x++)
                        {
                                snore_tine = A[x]-A[x-1];
                                
                                if ( snore_tine < 0)      //如果这个值是负的, 那模就把他变为正值
                                {
                                    snore_tine = -snore_tine;                                
                                }
                                else
                                {
                                    snore_tine = snore_tine;                                       
                                }
                                
                                if (snore_tine_max >=snore_tine)
                                {
                                        snore_tine_max=snore_tine_max;
                                }
                                else
                                {
                                        snore_tine_max=snore_tine;
                                }
                        }
                        printf("鼾声长度最大为=%d\r\n",snore_tine_max);
                        
        /******  s4       ************************/
                        if (snore_tine_max <= (1.5 * A[0]))
                        {
                                printf("鼾声长度符合条件\r\n");
                                snore_s4=1;                        
                        }
                        else
            {
                                snore_s4=0;
                                snoue_count=0;        
                                printf("鼾声长度不符合条件!!!!\r\n");
                                       
                        }

                        
                        
                        

            /******  s5       ************************/                        
                        
                        
                        if ( snore_s4 == 1 )   //如果S4符合条件
                        {
                                for ( y=1; y< ( SNOUE_MAX - 1 ); y++)
                                {
                                        snore_interval = B[y] - B[y-1];
                                        if ( snore_interval < 0)      //如果这个值是负的, 那模就把他变为正值
                                        {
                                                snore_interval = -snore_interval;                                
                                        }  
                                        else
                                        {
                                                snore_interval = snore_interval;                                       
                                        }                                
                                       
                                        if ( snore_interval_max >= snore_interval )                                       
                                                snore_interval_max = snore_interval_max;
                                        else
                                                snore_interval_max = snore_interval;        
                                }
                                
                                        printf("鼾声间隔时间最大为:=%d\r\n",snore_interval_max);

                                if (snore_interval_max <= (1.5 * B[0]))
                                {
                                        printf("鼾声  间隔长度符合条件\r\n");
                                        snore_s5=1;                        
                                }
                                else
                                {
                                        snore_s5=0;
                                        snoue_count=0;        
                                        printf("鼾声   间隔 长度不符合条件!!!!\r\n");
                    snoue_count=0;                                                
                                }
                        
                   }  //对用着判断(S4 ==1)

           }
                                if ( snore_s5 == 1)
                                {
                                  printf("鼾声 检测符合,需要调整相应的位置\r\n");
                                  biaozhi_hansheng=1;                               //打鼾声了
                                        for (m=0; m<=SNOUE_MAX; m++)
                                        A[m]=0;
                                        for (n=0; n<=SNOUE_MAX; n++)
                                        B[n]=0;                                       
                                        snore_s5 =0;                                       
          snoue_count=0;                                                
                                }
/*************************************鼾声监测*****************************/        
                        }
     if(key==KEY_UP||biaozhi_hansheng==1)        
                 {
                     weizhi();
                 }
     if(kp1>=1.7||kp2>=1.8||kp3>=1.8||kp4>=1.9)
                {
                                                 if(kp1>=kp2&&kp1>=kp3&&kp1>=kp4)
                                                 {
                                                         d1=1;biaozhi_hansheng=0;
                                                 }
                                                 if(kp2>=kp1&&kp2>=kp3&&kp2>=kp4)
                                                 {
                                                         d2=1;biaozhi_hansheng=0;
                                                 }
                                                 if(kp3>=kp1&&kp3>=kp2&&kp3>=kp4)
                                                 {
                                                         d3=1;biaozhi_hansheng=0;
                                                 }
                                                 if(kp4>=kp1&&kp4>=kp2&&kp4>=kp3)
                                                 {
                                                         d4=1;biaozhi_hansheng=0;
                                                 }
                                                
                }
              if(h1==1)
                                        {
                                                GPIO_Write(GPIOC,0x0002);
                                        }
                                        if(h2==1)
                                        {
            GPIO_Write(GPIOC,0x0004);
                                        }
                                        if(h3==1)
                                        {
                                                GPIO_Write(GPIOC,0x0008);
                                        }
                                        if(h4==1)
                                        {
                                                GPIO_Write(GPIOC,0x0010);
                                        }               
        }

        
        
}



枕头 2018.10.26 14:32.7z

195.12 KB, 下载次数: 10

回复

使用道具 举报

ID:911452 发表于 2021-4-24 17:08 | 显示全部楼层
请问你解决了吗?遇到了同样的问题
回复

使用道具 举报

ID:911452 发表于 2021-4-24 17:08 | 显示全部楼层
静等大佬回复
回复

使用道具 举报

ID:913577 发表于 2021-4-28 15:46 | 显示全部楼层
首先要定位跑飞的原因:
1、是debug时就跑飞吗?
2、在认为可能跑飞的地方打上输出log
3、利用示波器检查每个函数的运行时长是否正常;

当然你也先可以试一下以下操作是否可行
1、非全局变量前面加static固定类型;
2、把定时器用起来,不要用什么delay_ms(1000);
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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