目录
从互斥量的定义可以看出,FreeRTOS的互斥量其实也是走的信号量。而RT Thread中定义的信号量在FreeRTOS中定义为计数信号量,对应的宏定义配置是
configUSE_COUNTING_SEMAPHORES
信号量句柄定义:
#define rtosSem_t SemaphoreHandle_t
1. 创建
#define rtosSemCreate( \
handle, \
name, \
value, \
flag \
) \
{ \
handle = xSemaphoreCreateCounting( \
(UBaseType_t)-1, value); \
}
函数xSemaphoreCreateCounting的第一个参数是信号量的最大值,这里默认取MCU能支持的最大值,第二个参数是信号量的初始化值。
2. 获取
FreeRTOS获取信号量分2种,在中断中获取的API函数是xSemaphoreTakeFromISR,先不考虑中断的情况。
#define rtosSemTake( \
handle, \
time, \
ret \
) \
{ \
ret = xSemaphoreTake(handle, time); \
}
3. 释放
#define rtosSemRelease( \
handle, \
ret \
) \
{ \
xSemaphoreGive(handle); \
}
4. 测试
测试代码与RT Thread相同,打印结果也相同。