打印
[STM32F3]

使用互斥锁保护共享资源

[复制链接]
1439|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
突然下起雨|  楼主 | 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)是一种常用的同步机制,用于保护共享资源免受并发访问带来的冲突。

使用特权

评论回复
5
bartonalfred| | 2024-8-5 11:58 | 只看该作者
在单片机中使用互斥锁(Mutex)保护共享资源,主要是为了确保在多任务环境中,同时只有一个任务能够访问共享资源,避免资源竞争和数据冲突的问题。

使用特权

评论回复
6
pentruman| | 2024-8-5 12:58 | 只看该作者
互斥锁的使用需要考虑到系统的实时性和性能要求,因为互斥锁可能会导致任务阻塞,从而影响系统的响应时间和吞吐量。

使用特权

评论回复
7
geraldbetty| | 2024-8-5 17:10 | 只看该作者
在持有互斥锁的情况下,任务可以安全地读取、写入或修改共享资源。

使用特权

评论回复
8
gygp| | 2024-8-5 19:02 | 只看该作者
在程序开始时,需要初始化互斥锁。这通常涉及将互斥锁的状态设置为“可用”或“解锁”。

使用特权

评论回复
9
primojones| | 2024-8-5 22:37 | 只看该作者
任务或线程完成对共享资源的访问后,必须释放互斥锁。

使用特权

评论回复
10
eefas| | 2024-8-6 12:01 | 只看该作者
互斥锁的获取和释放操作成对出现,避免死锁

使用特权

评论回复
11
earlmax| | 2024-8-6 15:21 | 只看该作者
在使用互斥锁之前,需要对其进行初始化。在FreeRTOS中,可以通过xSemaphoreCreateMutex()函数来创建一个互斥锁。

使用特权

评论回复
12
xiaoyaodz| | 2024-8-6 21:56 | 只看该作者
在代码中定义互斥锁的数据结构。这通常是一个具有锁定和解锁状态的变量。在一些实时操作系统(RTOS)中,如FreeRTOS,互斥锁是通过特定的API来实现的。

使用特权

评论回复
13
chenqianqian| | 2024-8-7 08:02 | 只看该作者
在跑OS系统时候,需要注意上下文切换的保护。

使用特权

评论回复
14
jtracy3| | 2024-8-8 09:09 | 只看该作者
在使用互斥锁之前,需要对其进行初始化。这通常是通过调用特定的库函数或API来完成的

使用特权

评论回复
15
gygp| | 2024-8-8 16:44 | 只看该作者
互斥锁确保在任何给定时间内,只有一个任务可以访问受保护的资源。

使用特权

评论回复
16
jtracy3| | 2024-8-8 23:49 | 只看该作者
当一个任务需要访问共享资源时,它必须先请求互斥锁。如果互斥锁已被另一个任务持有,请求的任务将被阻塞,直到互斥锁可用。在FreeRTOS中,使用xSemaphoreTake()函数来请求互斥锁。

使用特权

评论回复
17
beacherblack| | 2024-8-9 03:02 | 只看该作者
单片机中使用互斥锁保护共享资源是确保系统稳定性和数据一致性的重要手段。

使用特权

评论回复
18
fengm| | 2024-8-9 06:07 | 只看该作者
对于简单的单片机系统,可能需要通过软件方式来模拟互斥锁的功能,例如使用标志位和循环等待。

使用特权

评论回复
19
jtracy3| | 2024-8-10 10:19 | 只看该作者
通过合理创建、初始化和操作互斥锁,可以有效避免多任务之间的资源竞争和冲突。

使用特权

评论回复
20
磨砂| | 2024-8-10 11:00 | 只看该作者
这个好像是专门建立了一个函数来判断的是吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

284

帖子

1

粉丝