stm32F4的ucosii中做AD采样会跑死

2019-07-20 18:45发布

我在原子哥移植好的ucosii历程中修改了一下,加入了ADC采样,用串口来显示,但是下载到单片机上程序会跑死,把才样的函数注释掉又正常了,一下是代码。

#define START_TASK_PRIO                              10

#define START_STK_SIZE                                  64

OS_STK START_TASK_STK[START_STK_SIZE];

void start_task(void *pdata);       
                          


#define LED0_TASK_PRIO                               7

#define LED0_STK_SIZE                                      64

OS_STK LED0_TASK_STK[LED0_STK_SIZE];

void led0_task(void *pdata);


//LED1èÎÎñ

#define LED1_TASK_PRIO                               6

#define LED1_STK_SIZE                                          64

OS_STK LED1_TASK_STK[LED1_STK_SIZE];

void led1_task(void *pdata);



#define SAMP_TASK_PRIO                 16

#define SAMP_STK_SIZE                128               

OS_STK SAMP_TASK_STK[SAMP_STK_SIZE];

void samp_task(void *pdata);


int main(void)
{

        delay_init(168);                 
        LED_Init();                     
        uart_init(115200);       
        OSInit();   
        OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );
        OSStart();       
}

//¿aê¼èÎÎñ
void start_task(void *pdata)
{
   OS_CPU_SR cpu_sr=0;
        pdata = pdata;
  OS_ENTER_CRITICAL();       
        OSTaskCreate(led0_task,(void *)0,(OS_STK*)&LED0_TASK_STK[LED0_STK_SIZE-1],LED0_TASK_PRIO);                                                  
        OSTaskCreate(led1_task,(void *)0,(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO);
        OSTaskCreate(samp_task,(void*)0,(OS_STK*)&SAMP_TASK_STK[SAMP_STK_SIZE-1],SAMP_TASK_PRIO);       
        OSTaskSuspend(START_TASK_PRIO);       
        OS_EXIT_CRITICAL();                               
}

//LED0èÎÎñ
void led0_task(void *pdata)
{                
        while(1)
        {
                LED0=0;
                delay_ms(80);
                LED0=1;
                delay_ms(920);
        };
}

//LED1èÎÎñ
void led1_task(void *pdata)
{          
        while(1)
        {
                LED1=0;
                delay_ms(300);
                LED1=1;
                delay_ms(300);
        }
}

//2éÑùèÎÎñ
void samp_task(void *pdata)
{
        u8 adc[2]={0};
        OS_CPU_SR cpu_sr=0;
        while(1)
        {
                OS_ENTER_CRITICAL();
                //Get_Adc_Average(ADC_Channel_5,(u16*)(adc),10);//这一行注释掉就可以正常运行,不注释就跑死,初始化时正确的,因为都是历程的源码
                USART1_Send(adc,2);
                OS_EXIT_CRITICAL();       
                OSTimeDlyHMSM(0,0,0,400);  
        }
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。