RT-Thread内核-__rt_ffs函数
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函数相关推荐
- 正点原子delay函数移植到rt thread操作系统(HAL库)
正点原子教程中涉及到的操作系统只涉及了UCOS的教程,其中例程的system文件夹中的delay.c函数只是适配了UCOS. 下面将delay.c函数移植到rt thread中,使用的bsp是rt t ...
- 关于RT thread系统节拍时钟的配置
关于RT thread系统节拍时钟的配置 -----本文基于rt-thread-3.1.3版本编写 首先,使用RTthread OS时,要配置(或者明白)它的系统节拍 ...
- 基于rt thread smart构建EtherCAT主站
我把源码开源到到了gitee,https://gitee.com/rathon/rt-thread-smart-soem 有兴趣的去可以下载下来跑一下 软件工程推荐用vscode 打开.rt thre ...
- rt thread studio使用QBOOT和片外flash实现OTA升级
我们这里要使用单片机外部flash作为OTA的下载分区,外部flash硬件连接关系 PB3-->SPI3_CLK PB4-->SPI3_MISO PB5-->SPI3_MOSI PE ...
- RT Thread Free Modbus移植问题整理
RT Thread Free Modbus移植问题整理 问题描述: 在读写寄存器中,写数据正常,只能读1个寄存器的值,多个值会异常. 在移植过程中发现串口(或RS485)数据接收长度异常. 一.环境描 ...
- Yeelink平台使用——远程控制 RT Thread + LwIP+ STM32
1.前言 [2014年4月重写该博文] 经过若干时间的努力终于搞定了STM32+LwIP和yeelink平台的数据互通,在学习的过程中大部分时间花在以太网协议栈学习上,但是在RT Th ...
- RT Thread根据开发板制作BSP方法
之前一直不懂怎么使用RT Thread的软件包,感谢网上的大神,看了你们的博客后大概了解一些,在此做下记录.用RT Thread软件包需要RT Thread的系统,但是RT Thread和RT Thr ...
- RT Thread之 Uart2 操作
官网连接:https://docs.rt-thread.org/#/rt-thread-version/rt-thread-standard/programming-manual/device/uar ...
- RT Thread利用STM32CUBEMX和RT Thread studio来创建模板工程
(1)RT Thread利用STM32CUBEMX来创建模板工程 1.参考文档: 基于 CubeMX 移植 RT-Thread Nano:RT-Thread 文档中心 注意:串口2必须使能异步模式(启 ...
最新文章
- 听说你用JavaScript写代码?本文是你的机器学习指南
- python链表的创建_《大话数据结构》配套源码:链表(Python版)
- 基于html5制作3D拳击游戏源码下载
- Dubbo中负载均衡的应用
- 分布式数据库的模式结构介绍​
- Spring Boot----整合SpringCloud
- async js 返回值_获取JavaScript异步函数的返回值
- Java | 用Java实现选择排序算法(记录写程序全过程的编程哲学)
- 一个小故事来形容几个常用网络技术
- 【BZOJ-1097】旅游景点atr SPFA + 状压DP
- outlook qr码在哪里_胡志明市第一次将QR码附加在街道名称板上,目的是什么?
- SEO–关于如何通过利用流量精灵刷百度排名及排名原理~
- Web漏洞挖掘(一)登录认证模块的暴力破解实例
- 【Javascript的基本知识——数据的流程和流程的切割】
- Type-C快充诱电方案
- html星空炫彩粒子,炫彩粒子模拟
- PHP和Python该如何抉择?现在PHP还有前景吗?
- Concepts:Stateful Stream Processing
- 会计计算机敲打大赛,2017上半年会计实操技能竞赛“荣耀对决”总决赛!
- 全面理解ES6模块化编程