我上一篇博文更的是双核版的队列测试,基本在那里说的很清楚了,那里的代码注释也多的多,这里单核版本有一点不一样的地方,但实现起来比双核的要简单,所以直接给大家代码,如果不理解就去看我上一篇博文,里面说明和注释都非常清楚
给大家代码,这里实现了两个进程间使用一个int数据类型的队列进行通信,当然这里应该也是支持结构体多类型的,想试试的可以去上一篇博文看看怎么弄的
QueueHandle_t queue;
TaskHandle_t Task1;
TaskHandle_t Task2;
void task1( void * parameter )
{
int data_get = 520;
BaseType_t Status;
const TickType_t xTicksToWait = pdMS_TO_TICKS(100);
while(1)
{
vTaskDelay(800);
Status = xQueueReceive(queue, &data_get, xTicksToWait);
if(Status == pdPASS)
{
Serial.print("成功收到数据:");
Serial.println(data_get);
}
Serial.print("接收数据任务的优先级:");
Serial.println(uxTaskPriorityGet(Task1));
Serial.println("***********************************************************");
}
}
void task2( void * parameter)
{
int data_send = 625;
BaseType_t Status;
const TickType_t xTicksToWait = pdMS_TO_TICKS(200);
while(1)
{
vTaskDelay(1200);
Status = xQueueSend(queue, &data_send, xTicksToWait);
if(Status == pdPASS)
{
Serial.print("成功发送数据:");
}
Serial.print("发送数据任务的优先级:");
Serial.println(uxTaskPriorityGet(Task2));
Serial.println("***********************************************************");
}
}
void setup() {
Serial.begin(115200);
queue = xQueueCreate( 10, sizeof( int ) );
xTaskCreate(
task1,
"TaskOne",
10000,
NULL,
1,
&Task1);
xTaskCreate(
task2,
"TaskTwo",
10000,
NULL,
3,
&Task2);
if(queue == NULL){
Serial.println("创建队列失败");
}
}
void loop() {
Serial.println("主程序仍然在运行");
delay(1000);
}
看看结果