20_信号量
1.01_数据结构2.02_实战项目Zlog日志框架3.03_google测试框架4.04_串口打印print函数5.05_定时器6.06_GPIO输出控制7.07_IO外部中断8.08_了解STM32串口通讯9.09_学会单片机STM32的IIC通信10.10_学会单片机STM32看门狗11.11_学会单片机仿真调试Debug12.12_OTA功能设计13.13_实战 USB鼠标14.14_RTOS介绍15.15_搭建freertos工程16.16_freeRTOS 任务控制函数17.17_freeRTOS 任务状态切换18.18_系统时钟管理19.19_系统内存管理
20.20_信号量
21.21_消息队列22.22_Linux常用指令23.23_Linux工程搭建24.24_linux c多线程25.25_linux c 多进程26.26_linux 文件编程27.27_linux 网络编程信号量
信号量&互斥量: 创建、获取、释放、删除
信号量用于同步,任务间或者任务和中断间同步;
互斥量用于互锁,用于保护同时只能有一个任务访问的资源,为资源上一把锁。
二值信号量:同步
计数信号量:资源使用统计
互斥量:互斥信号量其实就是一个拥有优先级继承的二值信号量递归互
斥:互斥中嵌套互斥
优先级反转,由于高优先级任务在等低优先级任务释放信号量的过程中,低优先级被中优先级任务抢夺CPU,最终导致中优先级任务比高优先级任务先运行,也就是优先级翻转而互斥信号量就可以将这个影响降到最低,当高优先级任务发现需要信号量被低级信号量占用需要等待时,就将低优先级任务变成和自己同级优先级,就不至于在等待的过程中被中优先级抢夺CPU。
osSemaphore 信息量
add后默认添加
if(osSemaphoreWait(myBinarySem01Handle, osWaitForever) == osOK)
{
printf("get Binary\n");
}
osSemaphoreRelease(myBinarySem01Handle);
osMutex 互斥量
if(osSemaphoreRelease(myCountingSem01Handle) == osOK)
{
int count = osSemaphoreGetCount(myCountingSem01Handle);
printf("release Counting %d\n", count);
}
if(osSemaphoreWait(myCountingSem01Handle, osWaitForever) == osOK)
{
}
osMutex 递归
if(osMutexWait(myMutex01Handle, osWaitForever) == osOK)
{
printf("get Mutex\n");
osMutexRelease(myMutex01Handle);
}
osMutexRelease(myMutex01Handle);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了