文档首页 > > 开发指南> 内核开发指南> 信号量> 开发指导

开发指导

分享
更新时间:2020/06/24 GMT+08:00

使用场景

信号量是一种非常灵活的同步方式,可以运用在多种场合中,实现锁、同步、资源计数等功能,也能方便的用于任务与任务,中断与任务的同步中。

功能

Huawei LiteOS 系统中的信号量模块为用户提供下面几种功能。

功能分类

接口名

描述

信号量的创建和删除

LOS_SemCreate

创建信号量

LOS_BinarySemCreate

创建二进制信号量

LOS_SemDelete

删除指定的信号量

信号量的申请和释放

LOS_SemPend

申请指定的信号量

LOS_SemPost

释放指定的信号量

开发流程

信号量的开发典型流程:

  1. 创建信号量LOS_SemCreate。
  2. 申请信号量LOS_SemPend。

    信号量有三种申请模式:无阻塞模式、永久阻塞模式、定时阻塞模式

    • 无阻塞模式:任务需要申请信号量,若当前信号量的任务数没有到信号量设定的上限,则申请成功。否则,立即返回申请失败
    • 永久阻塞模式:任务需要申请信号量,若当前信号量的任务数没有到信号量设定的上限,则申请成功。否则,该任务进入阻塞态,系统切换到就绪任务中优先级最高者继续执行。任务进入阻塞态后,直到有其他任务释放该信号量,阻塞任务才会重新得以执行
    • 定时阻塞模式:任务需要申请信号量,若当前信号量的任务数没有到信号量设定的上限,则申请成功。否则,该任务进入阻塞态,系统切换到就绪任务中优先级最高者继续执行。任务进入阻塞态后,指定时间超时前有其他任务释放该信号量,或者用户指定时间超时后,阻塞任务才会重新得以执行
  3. 释放信号量LOS_SemPost。
    • 如果有任务阻塞于指定信号量,则唤醒该信号量阻塞队列上的第一个任务。该任务进入就绪态,并进行调度
    • 如果没有任务阻塞于指定信号量,释放信号量成功
  4. 删除信号量LOS_SemDelete。

信号量错误码

对可能导致信号量操作失败的情况,包括创建信号量、申请信号量、释放信号量、删除信号量等,均需要返回对应的错误码,以便快速定位错误原因。

序号

定义

实际数值

描述

参考解决方案

1

LOS_ERRNO_SEM_NO_MEMORY

0x02000700

内存空间不足

分配更大的内存分区

2

LOS_ERRNO_SEM_INVALID

0x02000701

非法传参

改变传数为合法值

3

LOS_ERRNO_SEM_PTR_NULL

0x02000702

传入空指针

传入合法指针

4

LOS_ERRNO_SEM_ALL_BUSY

0x02000703

信号量控制块不可用

释放资源信号量资源

5

LOS_ERRNO_SEM_UNAVAILABLE

0x02000704

定时时间非法

传入正确的定时时间

6

LOS_ERRNO_SEM_PEND_INTERR

0x02000705

中断期间非法调用LOS_SemPend

中断期间禁止调用LOS_SemPend

7

LOS_ERRNO_SEM_PEND_IN_LOCK

0x02000706

任务被锁,无法获得信号量

在任务被锁时,不能调用LOS_SemPend

8

LOS_ERRNO_SEM_TIMEOUT

0x02000707

获取信号量时间超时

将时间设置在合理范围内

9

LOS_ERRNO_SEM_OVERFLOW

0x02000708

信号量允许pend次数超过最大值

传入合法的值

10

LOS_ERRNO_SEM_PENDED

0x02000709

等待信号量的任务队列不为空

唤醒所有等待该型号量的任务后删除该信号量

错误码定义:错误码是一个32位的存储单元,31~24位表示错误等级,23~16位表示错误码标志,15~8位代表错误码所属模块,7~0位表示错误码序号,如下所示:

#define LOS_ERRNO_OS_NORMAL(MID,ERRNO)  \
(LOS_ERRTYPE_NORMAL | LOS_ERRNO_OS_ID | ((UINT32)(MID) << 8) | (ERRNO))
LOS_ERRTYPE_NORMAL :Define the error level as critical
LOS_ERRNO_OS_ID :OS error code flag.
MID:OS_MOUDLE_ID
ERRNO:error ID number

例如:

LOS_ERRNO_SEM_NO_MEMORY        LOS_ERRNO_OS_ERROR(LOS_MOD_SEM, 0x00))

平台差异性

无。

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问