页次: 1
在楼主的互斥锁的基础上稍作修改实现了计数型信号量。
1.在结构“typedef struct MuxCB_S;”中增加一项uint16_t limit;用于限制信号量计数值。
2.增加了一项宏定义“#define HAL_ERRNO_SEM_EXCEED 7”用于信号量计数超过限制时的返回值。
3.增加5个函数,源文件见附件mc31xx_hal_sem.zip
uint32_t HAL_SEM_Create(uint32_t* puwMuxHandle, uint16_t limit, uint16_t init);
uint32_t HAL_SEM_Delete(uint32_t uwMuxHandle);
uint32_t HAL_SEM_Pend(u32 uwMuxHandle, u32 uwTimeout);
uint32_t HAL_SEM_Post(uint32_t uwMuxHandle);
uint32_t HAL_SEM_Query(uint32_t uwMuxHandle, uint16_t*count);
信号量可以通过一个简单的生产者-消费者模型进行测试。
1.首先初始化两个信号量Full和Empty,假设缓冲区大小为8,Full的初值设为0,Empty的初值设为8
HAL_SEM_Create(&g_uwFullSemHandle, 8, 0);
HAL_SEM_Create(&g_uwEmptySemHandle, 8, 8);
2.生产者线程:
Pend(Empty);
写入数据;
Post(Full)
3.消费者线程:
Pend(Full)
读取数据;
Post(Empty)
页次: 1