打印

最近使用Freertos时候遇到奇怪问题,求教

[复制链接]
797|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hclwj181|  楼主 | 2018-6-23 09:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//è???ó??è??
#define START_TASK_PRIO                2
//è???????′óD?       
#define START_STK_SIZE                 128
//è?????±ú
TaskHandle_t StartTask_Handler;
//è???oˉêy
void start_task(void *pvParameters);

//è???ó??è??
#define LED0_TASK_PRIO                11
//è???????′óD?       
#define LED0_STK_SIZE                 1024
//è?????±ú
TaskHandle_t LED0Task_Handler;
//è???oˉêy
void led0_task(void *pvParameters);

//è???ó??è??
#define LED1_TASK_PRIO                20
//è???????′óD?       
#define LED1_STK_SIZE                 1024
//è?????±ú
TaskHandle_t LED1Task_Handler;
//è???oˉêy
void led1_task(void *pvParameters);

//è???ó??è??
#define LED2_TASK_PRIO                11
//è???????′óD?       
#define LED2_STK_SIZE                 1024  
//è?????±ú
TaskHandle_t LED2Task_Handler;
//è???oˉêy
void led2_task(void *pvParameters);


int main(void)
{
                System_Init();
//        MainTask();
       
//′′?¨?aê?è???
    xTaskCreate((TaskFunction_t )start_task,            //è???oˉêy
                (const char*    )"start_task",          //è?????3?
                (uint16_t       )START_STK_SIZE,        //è???????′óD?
                (void*          )NULL,                  //′?μY??è???oˉêyμ?2?êy
                (UBaseType_t    )START_TASK_PRIO,       //è???ó??è??
                (TaskHandle_t*  )&StartTask_Handler);   //è?????±ú              
    vTaskStartScheduler();          //?a??è???μ÷?è
}


//?aê?è???è???oˉêy
void start_task(void *pvParameters)
{
       
    taskENTER_CRITICAL();           //??è?áù????
    //′′?¨LED0è???
    xTaskCreate((TaskFunction_t )led0_task,            
                (const char*    )"led0_task",          
                (uint16_t       )LED0_STK_SIZE,
                (void*          )NULL,                               
                (UBaseType_t    )LED0_TASK_PRIO,       
                (TaskHandle_t*  )&LED0Task_Handler);   
    //′′?¨LED1è???
    xTaskCreate((TaskFunction_t )led1_task,     
                (const char*    )"led1_task",   
                (uint16_t       )LED1_STK_SIZE,
                (void*          )NULL,
                (UBaseType_t    )LED1_TASK_PRIO,
                (TaskHandle_t*  )&LED1Task_Handler);   

                 //′′?¨LED2è???
    xTaskCreate((TaskFunction_t )led2_task,     
                (const char*    )"led2_task",   
                (uint16_t       )LED2_STK_SIZE,
                (void*          )NULL,
                (UBaseType_t    )LED2_TASK_PRIO,
                (TaskHandle_t*  )&LED2Task_Handler);  
                                                               
    vTaskDelete(StartTask_Handler); //é?3y?aê?è???
    taskEXIT_CRITICAL();            //í?3?áù????
       
}

//LED0è???oˉêy
void led0_task(void *pvParameters)
{
          
    while(1)
    {
        vTaskDelay(200);
    }
}   

void led2_task(void *pvParameters)
{
    while(1)
    {

        vTaskDelay(20);
    }
}   

//LED1è???oˉêy
void led1_task(void *pvParameters)
{
    while(1)
    {
         Reflash_RGB();
        vTaskDelay(6);
    }
}


最近使用FreertOS时候,遇到一个莫名其妙的问题,求教各位大侠了。就是以上简单的几个任务,当led0_task vTaskDelay(200);中的时间片大于300的时候,我调试发现任务切换不过去了,当小于或等于200,就完全OK.我试过300、400、500、1000都无法正常切换任务。
堆栈设置的是#define configTOTAL_HEAP_SIZE                                        ((size_t)(35*1024))     //?μí3?ùóD×üμ???′óD?
应该完全够用


相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://www.tudou.com/programs/view/h5G_H9Kpk04/?bid=03&pid=1&resourceId=375113802_03_05_01

72

主题

720

帖子

9

粉丝