中级会员
- 积分
- 422
- 金钱
- 422
- 注册时间
- 2015-1-19
- 在线时间
- 99 小时
|
/è???ó??è??
#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();
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??è???μ÷?è
}
void start_task(void *pvParameters)
{
taskENTER_CRITICAL(); //??è?áù????
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);
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);
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?áù????
}
void led0_task(void *pvParameters)
{
while(1)
{
vTaskDelay(200);
}
}
void led2_task(void *pvParameters)
{
while(1)
{
vTaskDelay(20);
}
}
void led1_task(void *pvParameters)
{
while(1)
{
vTaskDelay(6);
}
}
最近使用FreertOS时候,遇到一个莫名其妙的问题,求教各位大侠了。就是以上简单的几个任务,当led0_task vTaskDelay(200);中的时间片大于300的时候,我调试发现任务切换不过去了,当小于或等于200,就完全OK.我试过300、400、500、1000都无法正常切换任务。使用的是F205系列单片机
堆栈设置的是#define configTOTAL_HEAP_SIZE ((size_t)(35*1024)) 应该完全够用
|
|