作者:jk.li (jk.li@foxmail.com)

一个例子

  前提:有三个任务,优先级为4、5、6,并且优先级最低的最先运行,同时三个任务都会使用同一个信号量,信号量初始值为1.

  第1步:信号量被创建,cnt=1,这时候任务就绪列表为空,信号量等待列表为空

  第2步:任务6开始执行,试图获得信号量由于cnt为1,所以会得到信号量得到后cnt减一变为0,这时候任务就绪列表为6,信号量等待列表为空

  第3步:任务5中断6开始执行,任务5也试图获得信号量由于cnt=0任务5必须等待,信号量等待列表加入5,这时候任务就绪列表为6,信号量等待列表为5

  第4步:更高优先级的任务4中断6开始执行也在等待同一信号量,信号量等待列表加入4,这时候任务就绪列表为6,信号量等待列表为4、5

  第5步:任务6释放信号量,由于存在等待任务,所以让等待列表中优先级最高的任务进入就绪列表,重新调度,任务4运行,这时候任务就绪列表为4,信号量等待列表为5

  第6步:任务4得到了信号量开始执行,执行过程中会释放信号量,这样任务5也进入了就绪列表,重新调度仍然优先级高的任务4运行,这时候任务就绪列表为4、5,信号量等待列表为空

  第7步:任务4运行后任务5有机会运行,任务5释放信号量,由于已经没有任务在等待该信号量所以直接让cnt加一,cnt=1,信号量回到了初始状态,这时候任务就绪列表为空,信号量等待列表为空

uC/OS信号量Pend和Post都会做些什么相关推荐

  1. 拿4k的前端开发都会做些什么?

    对于刚刚入门的小白来说,你起码得是一个合格的初级前端工程师,不然有哪家公司愿意给你offer,初级的前端工程师拿4K的工资不稀奇,如果你是中高级前端工程师还拿着4K的薪资这就有点说不过去了.那么,什么 ...

  2. java 实习生刚入职都会做些什么工作呢?

    不知道大家还是学生的时候有没有这个问题:公司做的项目和自己在学校练手的项目有多大的区别.我以前在学校跟着视频做一些项目练手, 总感觉公司做的东西会要难很多,不知道跟公司的真实项目区别在哪.总的来说,我 ...

  3. uC/OS II--与ECB操作相关的四个函数

    对ECB的操作一般包括:     * 初始化一个事件控制块               (void  OS_EventWaitListInit (OS_EVENT *pevent))     * 使一 ...

  4. uC/OS 的进程调度(上)

    操作系统最重要的任务之一就是进程调度,它涉及三个主要方面: 何时进行调度 如何选择下一个活动进程 如何实现进程切换 每种操作系统差别很大,本文对uC/OS的进程调度机制进行一些细致分析. 何时进行调度 ...

  5. UART0串口编程(六):串口(UART0)之UC/OS(二)UC/OS下的串口接收任务编程

    串口(UART0)之UC/OS(二) 一.串口接收数据在UC/OS设计中应注意的问题 1.    串口通信的数据接收过程: 1>  UART 接收FIFO接收到预定字节后触发中断 2>   ...

  6. -uc/OS系统移植(基于STM32F103C8T6,超详细讲解)

    完成STM32F103C8基于HAL库的-uc/OS系统移植 一.创建HAL库 二.下载uc/OSIII源码及移植准备 1.下载uc/OSIII源码 2.将uc/OS源码文件复制到工程 三.将uc/O ...

  7. 嵌入式系统开发16——嵌入式实时操作系统uC/OS的简介及简单应用

    本文主要介绍嵌入式实时操作系统(RTOS),并且以uc/OS为例,将其移植到stm32F103C8T6上,构建3个任务:其中两个task分别以1s和3s周期对LED灯进行点亮-熄灭的控制:另外一个ta ...

  8. uc/os程序设计点滴记录

    任务有切换,但切换到某个任务,总是出现hardfault错误? [现象:给出错的任务换一个大小一样但名字不一样的堆栈就可以,使用原来名字的堆栈就是出错] 解决: 查看hardfault寄存器,找到出错 ...

  9. UART0串口编程(五):串口编程(UART0)之UC/OS(一)UC/OS下的串口发送任务编程

    UART0串口编程(五) 串口编程(UART0)之UC/OS(一) 一.在UC/OS中设计串口程序所要考虑的问题 1.     串口通信数据以帧为单位进行处理,如果需要接收大量数据,则帧缓冲区规模必然 ...

  10. UART0串口编程(四):UART0串口编程之在UC/OS—II中遭遇的危机

    UART0串口编程之在UC/OS-II中遭遇的危机 一.潜在的危机 1.在uc/os操作系统中设计串口编程时,由于ISR和多个任务并发执行,情况比较复杂.尤其是接收状态为被动状态时,只能靠串行口中断来 ...

最新文章

  1. Σ-delta ADC是否可以测量热噪声?
  2. Linux实战教学笔记16:磁盘原理
  3. NHibernate使用时,不能返回自己的异常的解决办法
  4. Visual Studio 2010生成SQL Server测试数据
  5. MySQL 事务隔离
  6. java最小子串覆盖_Java 算法-最小子串覆盖
  7. ASP.NET学生信息管理系统-权限管理-用户资料
  8. 一个较完整的关键字过滤解决方案(上)
  9. LInux:有关I/O重定向的详细教程
  10. 搭建DNS域名解析服务器
  11. @PathVariable、@RequestHeader与@CookieValue注解的使用案例
  12. 服务器修改字体,云服务器怎么修改字体
  13. C-CCSK云计算安全知识认证
  14. DevOps-SRE岗位到底是什么?
  15. matlab模电仿真 微盘,模拟电子仿真实验(Multisim模电篇)
  16. 联想笔记本桌面计算机不见了,联想电脑任务栏不见了怎么还原
  17. fastadmin保持用户登陆状态
  18. 修正米勒编码matlab,修正米勒编码信源解码电路及其解码方法和节能控制方法
  19. 专题:固体力学中应力与应变分析详解(7.应变分析 7.5应变张量 7.6主应变与主方向 7.7应变莫尔圆)...
  20. 【用三大件写出的开门烟花特效】

热门文章

  1. POJ 1436.Horizontally Visible Segments-线段树(区间更新、端点放大2倍)
  2. h5唤醒软键盘(数字键盘)
  3. 力扣刷题 DAY_88 贪心
  4. 保利威视后台编辑FLASH播放器
  5. 在线弹钢琴HTML源码,在线弹钢琴 1.0
  6. kali无法获取ip地址的解决方法
  7. Android7.0调用系统相机拍照、读取系统相册照片+CropImageView剪裁照片
  8. 【Java进阶】Java内存模型中的happen-before是什么?
  9. 《SteamVR2.2.0开发指南》(Yanlz+Unity+XR+SteamVR+OpenXR+OpenVR+Valve+VIVE+Oculus+Interaction+VR+立钻哥哥++ok++)
  10. LoRa远程监控系统