使用场景:适用于资源数目只有一个,且需要保证独占性访问的情况,如全局变量、共享设备等。 2. 代码演示: 以下是一个简单的FreeRTOS代码演示,展示了信号量和互斥量的使用: #include"FreeRTOS.h"#include"task.h"#include"semphr.h"// 信号量SemaphoreHandle_t xSemaphore;// 互斥量SemaphoreHandle_t xMutex;void...
在FreeRTOS中,互斥量(mutex)和信号量(semaphore)都是用于同步和互斥的重要机制,但它们在使用场景和特性上存在一些明显的差异。 首先,信号量主要用于表示可用资源的大小,实现对多个资源的访问,实现有序访问。它的计数值可以从0到max,允许任务或中断同步访问共享资源,而不关心具体是哪个任务或中断在访问。信号量没有优...
信号量可以分为二进制信号量(Binary Semaphore)、计数信号量(Counting Semaphore)和互斥信号量(Mutex)。下面详细介绍信号量的创建、使用和释放。 1. 创建信号量 二进制信号量: SemaphoreHandle_t xBinarySemaphore; void createBinarySemaphore() { xBinarySemaphore = xSemaphoreCreateBinary(); if (xBinarySemaphore ...
void vSemaphoreDelete( SemaphoreHandle_t xSemaphore ); **参数**: - `xSemaphore`:要删除的互斥量或信号量的句柄。这个句柄应该是一个之前通过`xSemaphoreCreateMutex()`(对于互斥量)或其他信号量创建函数返回的有效句柄。 **返回值**: 该函数没有返回值。 **使用注意事项**: - 在调用`vSemaphoreDelete(...
二值信号量(Binary Semaphore):是一种只有两个值(0和1)的特殊信号量。它通常被用作任务之间或者任务与中断服务例程之间的同步机制。当信号量的值为1时,任务可以获取信号量并继续执行。当信号量的值为0时,任务尝试获取信号量会被阻塞,直到信号量的值变为1。二值信号量也可以被用作互斥量(Mutex),用于保护共享资...
SemaphoreHandle_txSemaphoreCreateMutex(void); /** * @brief 静态分配内存创建互斥信号量函数 * @param pxMutexBuffer:指向StaticSemaphore_t类型的变量,该变量将用于保存互斥锁型信号量的状态 * @retval 返回成功创建后的互斥锁的句柄,如果返回NULL则表示内存不足创建失败 ...
信号量(Semaphore):用于任务间的同步,一个任务以阻塞方式等待另一个任务等待另一个任务释放信号量。 互斥量(Mutex):用于任务间共享资源的互斥访问,使用前获取锁,使用后释放锁。 事件标志组(EventGroup):也是用于任务间的同步,相比信号量,事件标志组可以等待多个事件发生。
SemaphoreHandle_t xMutex; int main( void ) { prvSetupHardware(); /* 创建互斥量 */ xMutex = xSemaphoreCreateMutex( ); if( xMutex != NULL ) { /* 创建2个任务: 都是打印 * 优先级相同 */ xTaskCreate( vSenderTask, "Sender1", 1000, (void *)1, 1, NULL ); ...
* 此函数无需动态分配内存,所以需要先有一个StaticSemaphore_t结构体,并传入它的指针 * 返回值: 返回句柄,非NULL表示成功 */SemaphoreHandle_txSemaphoreCreateMutexStatic(StaticSemaphore_t*pxMutexBuffer); 要想使用互斥量,需要在配置文件FreeRTOSConfig.h中定义: ...
1、RT-Thread提供完整的任务间通信机制,semaphore,mutex,mailbox,message queue,event(类似ucos中的...