打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
UCOSIII信号量,互斥信号量

UCOSIII信号量:资源共享角度阐述

信号量:

二值信号量(共享资源)

计数信号量(用于资源可以被几个任务所用,例如缓存池)

互斥信号量(用于解决优先级反转)

任务内带信号量(只能用于任务同步,一种计数信号量)

1:二值信号量,计数信号量

//定义信号量

OS_SEM MY_SEM;

//创建信号量

OSSemCreate ((OS_SEM*)&MY_SEM,
                 (CPU_CHAR* )"MY_SEM",
                 (OS_SEM_CTR)1,
                 (OS_ERR* )&err);

//OS_SEM_CTR:此处为1表示二值信号量,用于共享资源

                              计数型信号量,则为计数值

                                此处为0表示计数信号量,用于任务同步

//请求信号量

OS_SEM_CTR  OSSemPend (OS_SEM   *p_sem,
                       OS_TICK   timeout,
                       OS_OPT    opt,
                       CPU_TS   *p_ts,
                       OS_ERR   *p_err)

//发送(释放)信号量

OS_SEM_CTR  OSSemPost (OS_SEM  *p_sem,
                       OS_OPT   opt,
                       OS_ERR  *p_err)

 

 

//对于二值信号量:OSSemPend(),OS_SEM_CTR减一,OS_SEM_CTR变为0,表示该信号量被占有

                                OSSemPost (),OS_SEM_CTR加一,OS_SEM_CTR变为1,表示该信号量可用

//对于计数信号量:每执行OSSemPend(),OS_SEM_CTR减一,OS_SEM_CTR减到0,任务阻塞

                                每执行 OSSemPost (),OS_SEM_CTR加一

 

 

2:互斥信号量(二值信号量)

//定义一个互斥信号量

OS_MUTEX TEST_MUTEX;

//创建一个互斥信号量

void  OSMutexCreate (OS_MUTEX  *p_mutex,
                     CPU_CHAR  *p_name,
                     OS_ERR    *p_err)

void  OSMutexPend (OS_MUTEX  *p_mutex,
                   OS_TICK    timeout,
                   OS_OPT     opt,
                   CPU_TS    *p_ts,
                   OS_ERR    *p_err)

void  OSMutexPost (OS_MUTEX  *p_mutex,
                   OS_OPT     opt,
                   OS_ERR    *p_err)

互斥信号量用于结局二值信号量优先级反转的问题。

低优先级的进程占用共享资源,则高优先级的进程只能等待,

此时介于之间的优先级进程会打断低优先级的进程。这样会延长

高优先级任务的等待时间,

互斥信号量是在执行高优先级等待时,把低优先级的进程优先提高到

和自己一样,这样就结局了优先级反转的问题。


3:任务自带信号量

无需创建,只能用于任务同步,是一种计数信号量

OS_SEM_CTR  OSTaskSemPost (OS_TCB  *p_tcb,
                           OS_OPT   opt,
                           OS_ERR  *p_err)

OS_SEM_CTR  OSTaskSemPend (OS_TICK   timeout,
                           OS_OPT    opt,
                           CPU_TS   *p_ts,
                           OS_ERR   *p_err)








本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ucos II 任务间 通信之三:信号量2
uCOSIII uCGUI STM32 平台移植
uC/OS II 函数说明之与信号量操作相关的六个函数
ucos
嵌入式OS入门笔记-以RTX为案例
OS/2 移植到 Linux 上:线程、互斥锁、信号量 linux 应用 编程 等思考 l...
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服