介绍:前导零计数(CLZ) 是处理器的硬件指令,不是软件算法,它能快速统计二进制数最高位开始的连续 0 的个数。这个指令是汇编指令,使用举例:CLZ r0, r1。表示将r1寄存器中的数据进行前导零计数,然后将结果放到r0中。
应用:FreeRTOS 利用前导零计数可以实现快速找到当前最高优先级的就绪任务。freertos是将内存中某个特定地址指向的32位数据放入到某个32位寄存器中,然后利用再使用前导零计数指令算出当前最高优先级的就绪任务的优先级。具体来说,freertos将那个32位数据的每一位对应一个优先级(比如 bit31 对应优先级31即最高优先级,bit0对应最低优先级,不可以反过来对应,这样优先级和位数对应关系为31-位数),然后某优先级有任务就绪就将对应位设为 1,无就绪任务将对应位设为 0,这样经过clz指令运算得到最高优先级的位数,然后再用31减去它就得到了就绪任务中的最高优先级。