首页 > 其他分享 >stm32库函数_小知识

stm32库函数_小知识

时间:2024-03-18 17:22:19浏览次数:15  
标签:__ VAL 知识 value RBIT stm32 CLZ POSITION 库函数

stm32库函数值计算

#define POSITION_VAL(VAL) (__CLZ(__RBIT(VAL))) 在 STM32 中的作用是计算指定值 VAL 在二进制表示中最高位的位置。这里使用了一些内置的 CMSIS 函数,包括 __RBIT(反转位顺序)和 __CLZ(计算前导零位数)。

解释:

  • __RBIT(VAL):反转 VAL 的位顺序。例如,如果 VAL 的二进制表示为 1010,经过 __RBIT 操作后,变成 0101
  • __CLZ(VAL):计算 VAL 的二进制表示中从左边开始的前导零位数。例如,如果 VAL 的二进制表示为 00001000,那么 __CLZ 将返回 4,因为前面有 4 个 0。

因此,POSITION_VAL(VAL) 表达式通过先反转 VAL 的位顺序,然后计算前导零位数,最终得到了 VAL 在二进制表示中最高位的位置(从右到左数)。这在某些应用中可以用于确定一个值的位宽度或者最高有效位的位置。

合理使用示例:

#include <stdio.h>
#include "stm32f4xx.h" // 包含 STM32 相关头文件

#define POSITION_VAL(VAL) (__CLZ(__RBIT(VAL)))

int main() {
    uint32_t value = 0b1011000; // 假设要计算这个值的最高位位置
    uint32_t position = POSITION_VAL(value); // 调用宏计算最高位位置
    
    printf("Position of the highest bit in value %u is: %u\n", value, position);

    return 0;
}

在这个示例中,我们假设要计算二进制值 0b1011000 的最高位位置。我们通过调用 POSITION_VAL(value) 宏来计算最高位的位置,并将结果打印出来。这个示例展示了如何合理使用 POSITION_VAL 宏来计算指定值的最高位位置。

标签:__,VAL,知识,value,RBIT,stm32,CLZ,POSITION,库函数
From: https://www.cnblogs.com/shangshang-blocks/p/18080988

相关文章

  • CSPJ知识点整理
    指针:https://blog.csdn.net/qq_35429198/article/details/109331937排序:https://www.cnblogs.com/myeln/articles/17576193.html递归作业:https://www.luogu.com.cn/training/370327#problems哈夫曼编码:https://zhuanlan.zhihu.com/p/415467000图:https://www.luogu.com.cn/trai......
  • STM32工具使用--J-Flash烧录程序
            最近客户那边需要给他们烧程序,他们需要把板子给寄给我,我烧写好之后又发回去,这样一来一回就浪费不少时间,而且也比较麻烦,所以最近给它们出了一个如何烧写.hex程序文件的步骤,这样以后就不用再麻烦自己给他们烧写了,他们根据教程就能完成。    我使用的是P......
  • Ubuntu 18.04.06 PCL C++学习记录(四)知识点补充
    @[TOC]PCL中K-Dtree模块的学习学习背景参考书籍:《点云库PCL从入门到精通》以及官方代码PCL官方代码链接学习内容PCL库中的智能指针和回调函数智能指针pcl::PointCloud<pcl::PointXYZRGBA>::PtrCloudOut(newpcl::PointCloud<pcl::PointXYZRGBA>());//存储输出点云......
  • 后端程序员学JavaWeb必备小知识
    小知识1.判断前端或后端的关键在于内容由哪个解析对象来解析。如果是由浏览器解析,那就是前端;如果是由后台的JDK/Tomcat/Nginx等来解析和执行,那就是后端。2.后端成员掌握前端程度:(1)基本使用,能看懂,能维护即:具备基本的前端知识,包括HTML、CSS和JavaScript的基础概念、语法......
  • 动态规划基础知识点(包含文档)
    动态规划知识点我也不知道为啥要收fei,我普通上传,但是平台好像不能直接看,大家可以试看,因为该文档就两页,还没完善1.动态规划与贪心的区别(1)求解问题区别:贪心:顾名思义,就是尽量的贪心使得结果利益最大化,从局部最优推出全局最优,比如:桌子上有三张钞票,面额各不相同,你只能取两次,每......
  • C语言最重要的知识点(6)
    第六章指针变量的本质是用来放地址,而一般的变量是放数值的。1、int *p中  *p和p的差别:简单说*p是数值,p是地址!*p可以当做变量来用;*的作用是取后面地址p里面的数值 p是当作地址来使用。可以用在scanf函数中:scanf(“%d”,p);2、*p++和(*p)++的之间的差别:改错题目中很重要......
  • STM32 TIM3 定时器应用之数码管显示定时时间
     实现目标1、STM32基于HAL库定时器的使用;2、加强数码管的学习。一、定时器概述?1、生活中哪些场景会用到定时器?2、STM32F1定时器二、原理图设计三、STM32CubeMX配置1.定时器时钟配置2.定时器3、数码管、蜂鸣器的配置  3.开启定时器3中断四、程序......
  • 架构知识-编程语言的演进
    架构学习-编程语言的演进前言什么是冯·诺伊曼结构中央处理器存储器输入输出设备汇编语言编程范式的进化1、过程式2、函数式3、面向对象参考架构学习-编程语言的演进前言这里开始来尝试了解下架构层面的知识。什么是冯·诺伊曼结构冯·诺伊曼结构(英语:V......
  • 注入js编程应该知道的一些基础知识,以防混淆造成的错误
    假设我现在用的是chrome extension的方式注入javascript来控制网页,例如有一个元素,原始的网页制作者已经给他注册了各种事件,但是我想得到当这个元素发生改变时,会触发一个我自己能控制的事件,有没有什么办法?要在不干扰原有网页事件的前提下,为元素添加自定义事件处理程序,你可以使用M......
  • Java基础知识总结(3)
    冒泡排序冒泡排序是比较基础的排序算法之一,其思想是相邻的元素两两比较,较大的数下沉,较小的数冒起来,这样一趟比较下来,最大(小)值就会排列在一端。整个过程如同气泡冒起,因此被称作冒泡排序。importjava.util.Scanner;/* 外层循环控制轮数,内层循环控制每一轮交换的次数......