信号量释放OSSemPost()
...1.满足信号量释放条件调用OS_SemPost()进行释放
......1.1从信号量等待列表中判断是否有任务等待信号量
.........1.1.1无,信号量是否溢出(根据计数的的数据类型判断)。
............1.1.1.1溢出,返回报错
............1.1.1.2可用信号量计数++
.........1.1.2有,根据是释放给所有任务还是最高优先级任务调用OS_Post()将信号发布给任务。
......1.2根据参数是否进行调度
信号量获取函数 OSSemPend()
信号量为0则会将任务堵塞或返回报错重新获取。多个任务获取同一个信号量,释放给所有任务则所有的任务都会获取,否则优先级最高的任务获得
....满足信号量释获取件调用OSSemPend()进行获取
......1.有可用信号量,将可用信号量计数--
......2.无可用信号量
.........2.1不堵塞任务,返回报错
.........2.2 堵塞调用 OS_Pend()函数将当前任务脱离就绪列表,并根据用户指定的阻塞时间插入到节拍列表和队列等待列表
......3.调度,用野火的代码,按按键会会释放信号量,等待信号量的任务由等待堵塞状态转到运行,4设个断点可知。然后由于没有可用信号量进入等待堵塞,3切换任务。
......4.根据任务状态判断是否等待到信号量,获取到消息则将消息传递给任务,否则返回未获取成功的原因。