给大家代码,这里实现了两个进程间使用一个int数据类型的队列进行通信,当然这里应该也是支持结构体多类型的,想试试的可以去上一篇博文看看怎么弄的
QueueHandle_t queue; //单核多进程测试队列,这是队列的句柄
TaskHandle_t Task1; //任务0的句柄
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); //每1200ms向队列中发送一次数据
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, //指定任务函数,也就是上面那个task1函数
"TaskOne", //任务名称
10000, //任务堆栈大小
NULL, //作为任务输入传递的参数
1, //优先级
&Task1); //任务句柄,可以不用创建,直接用NULL
xTaskCreate(
task2,
"TaskTwo",
10000,
NULL,
3,
&Task2);
if(queue == NULL){
Serial.println("创建队列失败");
}
}
void loop() {
Serial.println("主程序仍然在运行");
delay(1000);
}
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!