stm32 st_基于STM32

stm32 st_基于STM32用了不少芯片,就只有51有位操作,这个特性很喜欢,赋值简单、效率又高且节省内存,不必为了一个bool去分配一个uint8.发现stm32有Bit-Banding,就试了一下,用MDK-ARM环境下的汇编代码做了一些比较。操作,清零USART1的SR寄存器的TC位:方法一://利用USART_TypeDef这个结构寻到SR的地址,再赋值USART1->SR&amp…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

用了不少芯片,就只有51有位操作,这个特性很喜欢,赋值简单、效率又高且节省内存,不必为了一个bool去分配一个uint8.

发现stm32有Bit-Banding,就试了一下,用MDK-ARM环境下的汇编代码做了一些比较。

操作,清零USART1的SR寄存器的TC位:

stm32 st_基于STM32

方法一:

//利用USART_TypeDef这个结构寻到SR的地址,再赋值
USART1->SR &= ~(1<<6);

其汇编代码(-level 0)如下:

stm32 st_基于STM32

用了7条指令。

方法二:

直接用SR的地址操作:

*(__IO uint32_t *) 0x40013800 &= ~(1<<6);

汇编如下:

stm32 st_基于STM32

可以看到代码跟方法一是一样的,所以以后没有必要用这个方法了,一点效率提升都没有,代码还难读。

方法三:

位域

//下面两个宏的汇编代码是一样的
#define  USART1_TC_ResetBit_BB()    \
          (*(__IO uint32_t *) (PERIPH_BB_BASE | ((USART1_BASE + 0x00 - PERIPH_BASE) << 5) | ((6) << 2)) = 0)
#define  USART1_TC_ResetBit_BB2() (*(__IO uint32_t *) 0x42270018 = 0)

stm32 st_基于STM32

这个位域的代码只需要3个指令,而且可定义看到,这个位域不像51那样是位寻址,有专业的位操作指令。上面这3条还是通用的指令,也是在4G空间线性寻址。

执行完之后的效果,可以看到TC被清除了:

stm32 st_基于STM32

 

综上所述,Bit-Banding确实可以提高代码效率,但是说到写程序的方便程度,如果用C语言的话,还是一样的,因为那些代码都可以用宏定义或者函数来封装。

转载于:https://www.cnblogs.com/TrueElement/archive/2012/09/16/2687212.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182457.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java向文件中写入内容,字节流,字符流,缓冲,复制文件,设置字符编码 实例

    java向文件中写入内容,字节流,字符流,缓冲,复制文件,设置字符编码 实例

    2021年7月18日
    56
  • mirna预测靶基因结果怎么看_基因预测

    mirna预测靶基因结果怎么看_基因预测上一篇《动物miRNA靶基因预测方法(一)——软件安装》介绍了4种靶基因预测软件的下载与安装,本篇则介绍每个软件的使用说明。事实上,软件的使用是很简单的,只要准备好miRNA和mRNA的序列数据,运行一两条命令就可获得预测结果,难就难在数据的准备,往往你的数据并符合软件运行的格式,所以这里会更多的介绍如何获得各软件的数据格式。1、miRanda的使用阅读说明文档README这里提取一…

    2025年7月16日
    5
  • git显示当前分支改动的文件「建议收藏」

    git显示当前分支改动的文件「建议收藏」一个命令显示当前分支与父分支的差异文件。gitcheckoutbranch1gitdiff–name-statusparent_branch1

    2022年8月22日
    29
  • LEA指令和OFFSET指令

    LEA指令和OFFSET指令lea 是机器指令 offset 是伪指令 LEABX BUFFER 在实际执行时才会将变量 buffer 的地址放入 bxMOVBX OFFSETBUFFER 在编译时就已经计算出 buffer 的地址为 4300 假设 然后将上句替换为 movbx 4300lea 可以进行比较复杂的计算 比如 leaeax esi ebx 4 把 ebx 的值 4 加上 esi 的值 存

    2025年10月2日
    4
  • 数据库的增删改查和使用流程

    数据库的增删改查和使用流程

    2021年12月8日
    52
  • kafka主要用来做什么_kafka概念

    kafka主要用来做什么_kafka概念Kafka最初由LinkedIn公司开发的,并于2010年贡献给了Apache基金会,之后成为Apache顶级项目。目前Kafka已经定位为一个分布式流式处理平台,它以高吞吐、可持久化、可水平扩展、支持流数据处理等多种特性而被广泛使用。目前越来越多的开源分布式处理系统如Cloudera、Storm、Spark、Flink等都支持与Kafka集成。Kafka之所以受到越来越多的青睐,与它所“扮演”的三大角色是分不开的:消息系统:Kafka和传统的消息系统(也称作消息中

    2022年9月25日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号