1、原型

int __rt_ffs(int value)

2、作用

用于找到参数 value 用二进制表示时,第一个被置 1 的位的索引

3、示例程序

#include <stdio.h>const unsigned char __lowest_bit_bitmap[] =
{/* 00 */ 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,/* 10 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,/* 20 */ 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,/* 30 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,/* 40 */ 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,/* 50 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,/* 60 */ 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,/* 70 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,/* 80 */ 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,/* 90 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,/* A0 */ 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,/* B0 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,/* C0 */ 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,/* D0 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,/* E0 */ 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,/* F0 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0
};/*** This function finds the first bit set (beginning with the least significant bit)* in value and return the index of that bit.** Bits are numbered starting at 1 (the least significant bit).  A return value of* zero from any of these functions means that the argument was zero.** @return return the index of the first bit set. If value is 0, then this function* shall return 0.*/
int __rt_ffs(int value)
{if (value == 0) return 0;if (value & 0xff)return __lowest_bit_bitmap[value & 0xff] + 1;if (value & 0xff00)return __lowest_bit_bitmap[(value & 0xff00) >> 8] + 9;if (value & 0xff0000)return __lowest_bit_bitmap[(value & 0xff0000) >> 16] + 17;return __lowest_bit_bitmap[(value & 0xff000000) >> 24] + 25;
}int main(int argc, char *argv[])
{printf("hello tyustli\r\n");printf("%d, set bit is %d\r\n", __rt_ffs(0b10000), __rt_ffs(0b10000) - 1);printf("%d, set bit is %d\r\n", __rt_ffs(0b100000000), __rt_ffs(0b100000000) - 1);printf("%d, set bit is %d\r\n", __rt_ffs(0b10000000000000000), __rt_ffs(0b10000000000000000) - 1);printf("%d, set bit is %d\r\n", __rt_ffs(0b1000000000000000000000000),  __rt_ffs(0b1000000000000000000000000) - 1);while (1);
}/*
hello tyustli
5, set bit is 4
9, set bit is 8
17, set bit is 16
25, set bit is 24
*//********** end of file ****************/

RT-Thread内核-__rt_ffs函数相关推荐

  1. 正点原子delay函数移植到rt thread操作系统(HAL库)

    正点原子教程中涉及到的操作系统只涉及了UCOS的教程,其中例程的system文件夹中的delay.c函数只是适配了UCOS. 下面将delay.c函数移植到rt thread中,使用的bsp是rt t ...

  2. 关于RT thread系统节拍时钟的配置

    关于RT thread系统节拍时钟的配置                  -----本文基于rt-thread-3.1.3版本编写 首先,使用RTthread OS时,要配置(或者明白)它的系统节拍 ...

  3. 基于rt thread smart构建EtherCAT主站

    我把源码开源到到了gitee,https://gitee.com/rathon/rt-thread-smart-soem 有兴趣的去可以下载下来跑一下 软件工程推荐用vscode 打开.rt thre ...

  4. rt thread studio使用QBOOT和片外flash实现OTA升级

    我们这里要使用单片机外部flash作为OTA的下载分区,外部flash硬件连接关系 PB3-->SPI3_CLK PB4-->SPI3_MISO PB5-->SPI3_MOSI PE ...

  5. RT Thread Free Modbus移植问题整理

    RT Thread Free Modbus移植问题整理 问题描述: 在读写寄存器中,写数据正常,只能读1个寄存器的值,多个值会异常. 在移植过程中发现串口(或RS485)数据接收长度异常. 一.环境描 ...

  6. Yeelink平台使用——远程控制 RT Thread + LwIP+ STM32

    1.前言     [2014年4月重写该博文]     经过若干时间的努力终于搞定了STM32+LwIP和yeelink平台的数据互通,在学习的过程中大部分时间花在以太网协议栈学习上,但是在RT Th ...

  7. RT Thread根据开发板制作BSP方法

    之前一直不懂怎么使用RT Thread的软件包,感谢网上的大神,看了你们的博客后大概了解一些,在此做下记录.用RT Thread软件包需要RT Thread的系统,但是RT Thread和RT Thr ...

  8. RT Thread之 Uart2 操作

    官网连接:https://docs.rt-thread.org/#/rt-thread-version/rt-thread-standard/programming-manual/device/uar ...

  9. RT Thread利用STM32CUBEMX和RT Thread studio来创建模板工程

    (1)RT Thread利用STM32CUBEMX来创建模板工程 1.参考文档: 基于 CubeMX 移植 RT-Thread Nano:RT-Thread 文档中心 注意:串口2必须使能异步模式(启 ...

最新文章

  1. 听说你用JavaScript写代码?本文是你的机器学习指南
  2. python链表的创建_《大话数据结构》配套源码:链表(Python版)
  3. 基于html5制作3D拳击游戏源码下载
  4. Dubbo中负载均衡的应用
  5. 分布式数据库的模式结构介绍​
  6. Spring Boot----整合SpringCloud
  7. async js 返回值_获取JavaScript异步函数的返回值
  8. Java | 用Java实现选择排序算法(记录写程序全过程的编程哲学)
  9. 一个小故事来形容几个常用网络技术
  10. 【BZOJ-1097】旅游景点atr SPFA + 状压DP
  11. outlook qr码在哪里_胡志明市第一次将QR码附加在街道名称板上,目的是什么?
  12. SEO–关于如何通过利用流量精灵刷百度排名及排名原理~
  13. Web漏洞挖掘(一)登录认证模块的暴力破解实例
  14. 【Javascript的基本知识——数据的流程和流程的切割】
  15. Type-C快充诱电方案
  16. html星空炫彩粒子,炫彩粒子模拟
  17. PHP和Python该如何抉择?现在PHP还有前景吗?
  18. Concepts:Stateful Stream Processing
  19. 会计计算机敲打大赛,2017上半年会计实操技能竞赛“荣耀对决”总决赛!
  20. 全面理解ES6模块化编程

热门文章

  1. 文件路径名太长导致IAR编译报错:Fatal Error[Pe1696]: cannot open source file
  2. 不忘初心,勇攀高峰!低代码公司流辰信息紧抓机遇,努力超前冲!
  3. 图片批量OCR识别--支持各种图片
  4. Angular实现数据双向绑定
  5. 基于机器学习与深度学习的金融风控贷款违约预测
  6. ArchLinux安装AUR助手 yaourt
  7. 肖特基二极管、瞬态二极管、普通二极管等各种二极管的区别?
  8. 计算正五边形的面积和周长
  9. 链接脚本之SECTIONS
  10. 退出手机QQ依然显示在线