FreeRTOS使用模板

FreeRTOS 互斥锁使用示例
在 FreeRTOS 中,互斥锁用于保护临界区,确保在同一时刻只有一个任务可以访问共享资源。以下是一个简单的示例,展示如何使用互斥锁。

代码示例

#include "FreeRTOS.h"
#include "semphr.h"

// 定义互斥锁句柄
SemaphoreHandle_t xMutex;

// 宏定义
#define LOCK()    xSemaphoreTake(xMutex, portMAX_DELAY)  // 请求互斥锁
#define UNLOCK()  xSemaphoreGive(xMutex)                  // 释放互斥锁
#define CREATE_MUTEX()  xMutex = xSemaphoreCreateMutex() // 创建互斥锁

// 任务函数
void task_function(void *pvParameters) {
    for (;;) {
        // 请求互斥锁
        LOCK();  // 直接调用 LOCK
        // 在临界区执行操作,例如访问共享资源
        
        // 释放互斥锁
        UNLOCK(); // 直接调用 UNLOCK
    }
}

// 创建互斥锁和任务
void create_mutex_and_task() {
    // 创建互斥锁
    if (CREATE_MUTEX() != NULL) {
        // 创建任务
        xTaskCreate(task_function, "TaskName", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
    }
}

说明
互斥锁句柄:

SemaphoreHandle_t xMutex;:定义一个互斥锁句柄,用于后续的锁管理。
宏定义:

LOCK(): 使用 xSemaphoreTake() 请求互斥锁,任务在获取不到锁时将阻塞。
UNLOCK(): 使用 xSemaphoreGive() 释放互斥锁。
CREATE_MUTEX(): 调用 xSemaphoreCreateMutex() 创建互斥锁,并将其赋值给 xMutex。
任务函数:

task_function(): 任务的主体,负责请求和释放互斥锁,在临界区内执行对共享资源的操作。
创建互斥锁和任务:

create_mutex_and_task(): 封装了互斥锁的创建和任务的创建逻辑,确保互斥锁成功创建后才创建任务。
注意事项
确保在使用互斥锁时,适当地管理锁的获取和释放,以避免死锁和其他并发问题。
在设计任务时,要考虑临界区的大小,以减少持锁时间,提高系统效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值