找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4556|回復(fù): 3
收起左側(cè)

STM32程序運(yùn)行運(yùn)行著就卡死了

[復(fù)制鏈接]
ID:79697 發(fā)表于 2018-12-28 17:50 | 顯示全部樓層 |閱讀模式
哪位大神幫忙看一下程序運(yùn)行一段時(shí)間,就跑死了,非常感謝!
#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)
                {
/**********************************鼾聲檢測(cè)**********************************/

                if (snoue_count==1)
                {
        /******  s4   判斷   ************************/                        
                        for(x=1;x<SNOUE_MAX; x++)
                        {
                                snore_tine = A[x]-A[x-1];
                                
                                if ( snore_tine < 0)      //如果這個(gè)值是負(fù)的, 那模就把他變?yōu)檎?br />                                 {
                                    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("鼾聲長(zhǎng)度最大為=%d\r\n",snore_tine_max);
                        
        /******  s4       ************************/
                        if (snore_tine_max <= (1.5 * A[0]))
                        {
                                printf("鼾聲長(zhǎng)度符合條件\r\n");
                                snore_s4=1;                        
                        }
                        else
            {
                                snore_s4=0;
                                snoue_count=0;        
                                printf("鼾聲長(zhǎng)度不符合條件!!!!\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)      //如果這個(gè)值是負(fù)的, 那模就把他變?yōu)檎?br />                                         {
                                                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("鼾聲間隔時(shí)間最大為:=%d\r\n",snore_interval_max);

                                if (snore_interval_max <= (1.5 * B[0]))
                                {
                                        printf("鼾聲  間隔長(zhǎng)度符合條件\r\n");
                                        snore_s5=1;                        
                                }
                                else
                                {
                                        snore_s5=0;
                                        snoue_count=0;        
                                        printf("鼾聲   間隔 長(zhǎng)度不符合條件!!!!\r\n");
                    snoue_count=0;                                                
                                }
                        
                   }  //對(duì)用著判斷(S4 ==1)

           }
                                if ( snore_s5 == 1)
                                {
                                  printf("鼾聲 檢測(cè)符合,需要調(diào)整相應(yīng)的位置\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;                                                
                                }
/*************************************鼾聲監(jiān)測(cè)*****************************/        
                        }
     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, 下載次數(shù): 10

回復(fù)

使用道具 舉報(bào)

ID:911452 發(fā)表于 2021-4-24 17:08 | 顯示全部樓層
請(qǐng)問你解決了嗎?遇到了同樣的問題
回復(fù)

使用道具 舉報(bào)

ID:911452 發(fā)表于 2021-4-24 17:08 | 顯示全部樓層
靜等大佬回復(fù)
回復(fù)

使用道具 舉報(bào)

ID:913577 發(fā)表于 2021-4-28 15:46 | 顯示全部樓層
首先要定位跑飛的原因:
1、是debug時(shí)就跑飛嗎?
2、在認(rèn)為可能跑飛的地方打上輸出log
3、利用示波器檢查每個(gè)函數(shù)的運(yùn)行時(shí)長(zhǎng)是否正常;

當(dāng)然你也先可以試一下以下操作是否可行
1、非全局變量前面加static固定類型;
2、把定時(shí)器用起來,不要用什么delay_ms(1000);
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表