目录
一、原理和任务的简单介绍
1.程序(Tasks之间数据传递)
有多任务同时写入,或者数据大小超过cpu内存通道时,或者对共享资源的访问时候,需要有防范机制。资源共享时,多个任务对同一资源进行访问,写入和读出操作可能会发送冲突。
使用MUTEX对数据对Cirtical Section的内容进行保护,可以想象成MUTEX就是一把锁,在对数据进行写入和读出操作时先进行上锁,再进行解锁,这样各个任务之间可以避免冲突(当然,也可以利用中断进行,后期介绍)
2.语法
SemaphoreHandle_t xHandler; 创建Handler
xHandler = xSemaphoreCreateMutex(); 创建一个MUTEX 返回NULL,或者handler
xSemaphoreGive(xHandler); 释放
xSemaphoreTake(xHanlder, timeout); 指定时间内获取信号量 返回pdPASS, 或者pdFAIL
3.理解方法
MUTEX的工作原理可以想象成,共享的资源被锁在了一个箱子里,只有一把钥匙,有钥匙的任务才能对改资源进行访问。
二、程序运行
实验平台:ESP32 on Wokwi - Online ESP32, STM32, Arduino Simulator
这里模拟售货机的操作,销售渠道分为线上和线下,这样在同一时刻会有多个任务对共享资源(存货量)进行访问和修改,这样互斥锁的作用就可见一斑。
直接上代码:
// 养成良好习惯,被多进程和中断调用的变量使用 volatile 修饰符
volatile uint32_t inventory = 100; //总库存