您尚未登录。

#1 Re: 感芯科技 » 【代码分享】hal库现在提供互斥锁 » 2022-08-24 17:12:40

在楼主的互斥锁的基础上稍作修改实现了计数型信号量。
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)

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn