task0和task1两个任务内容一样,为什么执行之间差别如此之大?
请各位帮瞧瞧
完整代码如下:
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "freertos.h"
#include "task.h"
#include "queue.h"
#include "usart.h"
QueueHandle_t myQueueHandler;
TaskHandle_t myTaskHandle0;
TaskHandle_t myTaskHandle1;
TaskHandle_t myTaskHandle2;
int tasksign0=0,tasksign1=0,tasksign2=0;
static void MyTask0(void* arg);
static void MyTask2(void* arg);
static void MyTask1(void* arg);
volatile int count0=0,count1=0;
int main(void)
{
USART_Config();
myQueueHandler=xQueueCreate(2,20);
xTaskCreate(MyTask0,"myTask0",128,NULL,2,&myTaskHandle0);
xTaskCreate(MyTask1,"myTask1",128,NULL,2,&myTaskHandle1);
xTaskCreate(MyTask2,"myTask2",128,NULL,2,&myTaskHandle2);
vTaskStartScheduler();
while (1)
{
}
}
static void MyTask0(void* arg)
{
const char data0[20]="myTask0 running";
while(1){
tasksign0=1;tasksign1=0;tasksign2=0;
xQueueSend(myQueueHandler,data0,0);
vTaskDelay(20);
}
}
static void MyTask1(void* arg)
{
const char data1[20]="myTask1 running";
while(1){
tasksign0=0;tasksign1=1;tasksign2=0;
xQueueSend(myQueueHandler,data1,0);
vTaskDelay(20);
}
}
static void MyTask2(void* arg){
char data_show[20]={0};
BaseType_t xStatus;
while(1){
tasksign0=0;tasksign1=0;tasksign2=1;
xStatus=xQueueReceive(myQueueHandler,data_show,portMAX_DELAY);
if(xStatus==pdTRUE){
//taskENTER_CRITICAL();
printf("%s,count0=%d,count1=%d\n",data_show,count0,count1);
}
//taskEXIT_CRITICAL();
else{
printf("queue error");
}
}
}