[STM32F3] 使用互斥锁保护共享资源

[复制链接]
 楼主| 突然下起雨 发表于 2024-7-30 20:18 | 显示全部楼层 |阅读模式
se, ID, ap, ma, TE, 使用
共享资源的互斥
在多个任务中访问共享资源(如SD卡或LCD显示)时,必须使用互斥锁(Mutex)来避免资源竞争。

使用互斥锁保护共享资源
c
SemaphoreHandle_t xMutex;

void sdTask(void *pvParameters) {
    for (;;) {
        if (xSemaphoreTake(xMutex, portMAX_DELAY) == pdTRUE) {
            // Perform SD card write operations
            xSemaphoreGive(xMutex);
        }
        vTaskDelay(100);
    }
}

void lcdTask(void *pvParameters) {
    for (;;) {
        if (xSemaphoreTake(xMutex, portMAX_DELAY) == pdTRUE) {
            // Perform LCD display operations
            xSemaphoreGive(xMutex);
        }
        vTaskDelay(100);
    }
}

在系统初始化时创建互斥锁:

c
void vApplicationIdleHook(void) {
    xMutex = xSemaphoreCreateMutex();
}





我爱台妹mmd 发表于 2024-7-31 23:16 | 显示全部楼层
在系统初始化阶段,你在 vApplicationIdleHook 中创建了互斥锁。这是一个合适的位置,因为 vApplicationIdleHook 是一个空闲任务的钩子函数,会在系统空闲时运行。
tpgf 发表于 2024-8-1 11:49 | 显示全部楼层
为什么for语句里边没有判定条件呢
pmp 发表于 2024-8-5 10:26 | 显示全部楼层
在单片机或多任务环境中,互斥锁(Mutex)是一种常用的同步机制,用于保护共享资源免受并发访问带来的冲突。
bartonalfred 发表于 2024-8-5 11:58 | 显示全部楼层
在单片机中使用互斥锁(Mutex)保护共享资源,主要是为了确保在多任务环境中,同时只有一个任务能够访问共享资源,避免资源竞争和数据冲突的问题。
pentruman 发表于 2024-8-5 12:58 | 显示全部楼层
互斥锁的使用需要考虑到系统的实时性和性能要求,因为互斥锁可能会导致任务阻塞,从而影响系统的响应时间和吞吐量。
geraldbetty 发表于 2024-8-5 17:10 | 显示全部楼层
在持有互斥锁的情况下,任务可以安全地读取、写入或修改共享资源。
gygp 发表于 2024-8-5 19:02 | 显示全部楼层
在程序开始时,需要初始化互斥锁。这通常涉及将互斥锁的状态设置为“可用”或“解锁”。
primojones 发表于 2024-8-5 22:37 | 显示全部楼层
任务或线程完成对共享资源的访问后,必须释放互斥锁。
eefas 发表于 2024-8-6 12:01 | 显示全部楼层
互斥锁的获取和释放操作成对出现,避免死锁
earlmax 发表于 2024-8-6 15:21 | 显示全部楼层
在使用互斥锁之前,需要对其进行初始化。在FreeRTOS中,可以通过xSemaphoreCreateMutex()函数来创建一个互斥锁。
xiaoyaodz 发表于 2024-8-6 21:56 | 显示全部楼层
在代码中定义互斥锁的数据结构。这通常是一个具有锁定和解锁状态的变量。在一些实时操作系统(RTOS)中,如FreeRTOS,互斥锁是通过特定的API来实现的。
chenqianqian 发表于 2024-8-7 08:02 来自手机 | 显示全部楼层
在跑OS系统时候,需要注意上下文切换的保护。
jtracy3 发表于 2024-8-8 09:09 | 显示全部楼层
在使用互斥锁之前,需要对其进行初始化。这通常是通过调用特定的库函数或API来完成的
gygp 发表于 2024-8-8 16:44 | 显示全部楼层
互斥锁确保在任何给定时间内,只有一个任务可以访问受保护的资源。
jtracy3 发表于 2024-8-8 23:49 | 显示全部楼层
当一个任务需要访问共享资源时,它必须先请求互斥锁。如果互斥锁已被另一个任务持有,请求的任务将被阻塞,直到互斥锁可用。在FreeRTOS中,使用xSemaphoreTake()函数来请求互斥锁。
beacherblack 发表于 2024-8-9 03:02 | 显示全部楼层
单片机中使用互斥锁保护共享资源是确保系统稳定性和数据一致性的重要手段。
fengm 发表于 2024-8-9 06:07 | 显示全部楼层
对于简单的单片机系统,可能需要通过软件方式来模拟互斥锁的功能,例如使用标志位和循环等待。
jtracy3 发表于 2024-8-10 10:19 | 显示全部楼层
通过合理创建、初始化和操作互斥锁,可以有效避免多任务之间的资源竞争和冲突。
磨砂 发表于 2024-8-10 11:00 | 显示全部楼层
这个好像是专门建立了一个函数来判断的是吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

45

主题

530

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部