信号量本来就是操作系统的事情,用于共享资源的管理,就像路还是一条路,他是人走还是车走,要信号灯,同样,系统运行也要信号量.先看看HSEM_ProcessSync例子.
编译下载这个例子,NUCLEO板上的绿色灯就会闪,但是这个时候按蓝色按键,蓝色灯不会亮,因为,他没有权(信号量)去亮灯,但是等绿色灯什么闪烁完了,蓝色灯就会亮,就会执行.
分析下这个程序.一开始用HAL_HSEM_Take(HSEM_ID, HSEM_PROCESS_1)执行了信号量的申请,那么信号量HSEM_ID就被HSEM_PROCESS_1占用了,这时候闪灯.其他需要获取这个信号量的任务不能得到执行.如下图红框期间,所有yo那个HESM_ID的任务无法执行.
对,这个任务就是我们按键.在这个时候按下,明显Take不到.
只能够执行下面的,等信号可用了通知我.
终于有那么一天,等到了信号可用.
注意,后面用的FastTake方法,前面用的Take方法,他们差别是什么.一个是一步Take,一个是两步Take,一步Take只要写信号ID,两步Take第一步是写,第二部是校验读.
当然,细细一看,还获取了CPUID,难道以后ST要多MPCORE了?很可能呢.这样信号量的用途就更大了.
比较不解的是,从调试中看,所有都被LOCK了.