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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SQL数据库查询语句

    SQL数据库查询语句一、Select语句:select语句除了可以查看数据库中的表格和视图的信息外,还可以查看SQLServer的系统信息、复制、创建数据表。其查询功能强大,是SQL语言的灵魂语句,也是SQL中使用频率最高的语句。基本select语句:一个基本的select语句可以分解成三个部分:查找什么数据(select)、从哪里查找(from)、查找的条件是什么(where)。selec

    2022年5月16日
    62
  • Delphi XE 5,Rad Studio XE 5 官方下载(附激活成功教程),更新 Update 1,Help Update 1

    Delphi XE 5,Rad Studio XE 5 官方下载(附激活成功教程),更新 Update 1,Help Update 1DelphiXE5激活成功教程,有图有真相EmbarcaderoRADStudioXE5Update2v19.0.14356.6604(等待激活成功教程中…):http://altd.embarcadero.com/download/radstudio/xe5/delphicbuilder_xe5_upd2_win.isohotfix_1_2_3_…

    2022年7月18日
    28
  • python Pycharm 更换pip源为国内站点,加速访问

    python Pycharm 更换pip源为国内站点,加速访问Python里的pip是官方自带的源,国内使用pip安装的时候十分缓慢,所以最好是更换成中国国内的源地址。国内pip镜像源清华:https://pypi.tuna.tsinghua.edu.cn/simple豆瓣:http://pypi.douban.com/simple/阿里:http://mirrors.aliyun.com/pypi/simple/1、

    2022年8月28日
    4
  • 好用的在线 java 编译网站,编辑器(亲测)

    好用的在线 java 编译网站,编辑器(亲测)在网上搜了不少在线编译网站,国内外都有。对于java来说,我感觉好用的是这个: 1. https://www.jdoodle.com/online-java-compiler这个支持Java10,并且能够保存代码,还支持导入外部库。但有时候国内登不上,真不明白这个学习网站也封。 2. https://www.tutorialspoint.com/compile_java…

    2022年7月8日
    20
  • BAT机器学习面试1000题系列(第1~305题)

    BAT机器学习面试1000题系列整理:July、元超、立娜、德伟、贾茹、王剑、AntZ、孟莹等众人。本系列大部分题目来源于公开网络,取之分享,用之分享,且在撰写答案过程中若引用他人解析则必注明原作者及来源链接。另,不少答案得到寒小阳、管博士、张雨石、王赟、褚博士等七月在线名师审校。说明:本系列作为国内首个AI题库,首发于七月在线实验室公众号上:julyedulab,并部分更新…

    2022年4月6日
    32
  • flask框架2_flask框架介绍

    flask框架2_flask框架介绍flask框架2文章目录flask框架2一.状态保持1.Session细节二.高级处理1.上下文2.请求勾子3.路由变量3.1绑定动态URL(重点)3.2正则转换器4.werkzerg库结构(了解)三.参数和配置1.Flask()参数2.Flask应用配置四.脚本启动五.模板1.模板变量的基本使用(重点)2.过滤器一.状态保持1.Session细节…

    2022年8月30日
    4

发表回复

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

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