游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

嵌入式C语言位操作的一些常见用法归纳

  分享关于位操作、寄存器配置的一些笔记:
  一、位操作简单介绍
  首先,以下是按位运算符:
  在嵌入式编程中,常常需要对一些寄存器进行配置,有的情况下需要改变一个字节中的某一位或者几位,但是又不想改变其它位原有的值,这时就可以使用按位运算符进行操作。下面进行举例说明,假如有一个8位的TEST寄存器:
  当我们要设置第0位bit0的值为1时,可能会这样进行设置:TEST0x01;
  但是,这样设置是不够准确的,因为这时候已经同时操作到了高7位:bit1bit7,如果这高7位没有用到的话,这么设置没有什么影响;但是,如果这7位正在被使用,结果就不是我们想要的了。
  在这种情况下,我们就可以借用按位操作运算符进行配置。
  对于二进制位操作来说,不管该位原来的值是0还是1,它跟0进行运算,得到的结果都是0,而跟1进行运算,将保持原来的值不变;不管该位原来的值是0还是1,它跟1进行运算,得到的结果都是1,而跟0进行运算,将保持原来的值不变。
  所以,此时可以设置为:TESTTEST0x01;
  其意义为:TEST寄存器的高7位均不变,最低位变成1了。在实际编程中,常改写为:TEST0x01;
  这种写法可以一定程度上简化代码,是C语言常用的一种编程风格。设置寄存器的某一位还有另一种操作方法,以上的等价方法如:TEST(0x010);
  第几位要置1就左移几位。
  同样的,要给TEST的低4位清0,高4位保持不变,可以进行如下配置:TEST0xF0;
  二、嵌入式中位操作一些常见用法
  1、一个32bit数据的位、字节读取操作
  (1)获取单字节:defineGETLOWBYTE0(x)((x0)0x000000ff)获取第0个字节defineGETLOWBYTE1(x)((x8)0x000000ff)获取第1个字节defineGETLOWBYTE2(x)((x16)0x000000ff)获取第2个字节defineGETLOWBYTE3(x)((x24)0x000000ff)获取第3个字节
  示例:
  (2)获取某一位:defineGETBIT(x,bit)((x(1bit))bit)获取第bit位
  示例:
  2、一个32bit数据的位、字节清零操作
  (1)清零某个字节:defineCLEARLOWBYTE0(x)(x0xffffff00)清零第0个字节defineCLEARLOWBYTE1(x)(x0xffff00ff)清零第1个字节defineCLEARLOWBYTE2(x)(x0xff00ffff)清零第2个字节defineCLEARLOWBYTE3(x)(x0x00ffffff)清零第3个字节
  示例:
  (2)清零某一位:defineCLEARBIT(x,bit)(x(1bit))清零第bit位
  示例:
  3、一个32bit数据的位、字节置1操作
  (1)置某个字节为1:defineSETLOWBYTE0(x)(x0x000000ff)第0个字节置1defineSETLOWBYTE1(x)(x0x0000ff00)第1个字节置1defineSETLOWBYTE2(x)(x0x00ff0000)第2个字节置1defineSETLOWBYTE3(x)(x0xff000000)第3个字节置1
  示例:
  (2)置位某一位:defineSETBIT(x,bit)(x(1bit))置位第bit位
  4、判断某一位或某几位连续位的值
  (1)判断某一位的值
  举例说明:判断0x68第3位的值。
  也就是说,要判断第几位的值,if里就左移几位(当然别过头了)。在嵌入式编程中,可通过这样的方式来判断寄存器的状态位是否被置位。
  (2)判断某几位连续位的值获取第〔n:m〕位的值defineBITMTON(x,m,n)((unsignedint)(x(31(n)))((31(n))(m)))
  示例:
  这是一个查询连续状态位的例子,因为有些情况不止有0、1两种状态,可能会有多种状态,这种情况下就可以用这种方法来取出状态位,再去执行相应操作。
  以上是对32bit数据的一些操作进行总结,其它位数的数据类似,可根据需要进行修改。
  三、STM32寄存器配置
  STM32有几套固件库,这些固件库函数以函数的形式进行1层或者多层封装(软件开发中很重要的思想之一:分层思想),但是到了最里面的一层就是对寄存器的配置。我们平时都比较喜欢固件库来开发,大概是因为固件库用起来比较简单,用固件库写出来的代码比较容易阅读。最近一段时间一直在配置寄存器,越发地发现使用寄存器来进行一些外设的配置也是很容易懂的。使用寄存器的方式编程无非就是往寄存器的某些位置1、清零以及对寄存器一些状态位进行判断、读取寄存器的内容等。
  这些基本操作在上面的例子中已经有介绍,我们依旧以实例来巩固上面的知识点(以STM32F1xx为例):
  (1)寄存器配置
  看一下GPIO功能的端口输出数据寄存器(GPIOxODR)(xA。。E):
  假设我们要让PA10引脚输出高、输出低,可以这么做:
  方法一:GPIOAODR110;PA10输出高(置1操作)GPIOAODR(110);PA10输出低(清0操作)
  也可用我们上面的置位、清零的宏定义:SETBIT(GPIOAODR,10);PA10输出高(置1操作)CLEARBIT(GPIOAODR,10);PA10输出低(清0操作)
  方法二:GPIOAODR(uint16t)0x0400;PA10输出高(置1操作)GPIOAODR(uint16t)0x0400;PA10输出低(清0操作)
  貌似第二种方法更麻烦?还得去细心地去构造一个数据。
  但是,其实第二种方法其实是ST推荐我们用的方法,为什么这么说呢?因为ST官方已经把这些我们要用到的值给我们配好了,在stm32f10x。h中:
  这个头文件中存放的就是外设寄存器的一些位配置。
  所以我们的方法二等价于:GPIOAODRGPIOODRODR10;PA10输出高(置1操作)GPIOAODRGPIOODRODR10;PA10输出低(清0操作)
  两种方法都是很好的方法,但方法一似乎更好理解。
  配置连续几位的方法也是一样的,就不介绍了。简单介绍配置不连续位的方法,以TIM1的CR1寄存器为例:
  设置CEN位为1、设置CMS〔1:0〕位为01、设置CKD〔1:0〕位为10:TIM1CR1(0x11)(0x15)(0x28);
  这是组合的写法。当然,像上面一样拆开来写也是可以的。
  (2)判断标志位
  以状态寄存器(USARTSR)为例:
  判断RXNE是否被置位:数据寄存器非空,RXNE标志置位if(USART1SR(15)){其它代码USART1SR(15);清零RXNE标志}
  或者:数据寄存器非空,RXNE标志置位if(USART1SRUSARTSRRXNE){其它代码USART1SRUSARTSRRXNE;清零RXNE标志}
  四、总结
  以上就是本次关于位操作的一点总结笔记,有必要掌握。虽然说在用STM32的时候有库函数可以用,但是最接近芯片内部原理的还是寄存器。有可能之后有用到其它芯片没有像ST这样把寄存器相关配置封装得那么好,那就不得不直接操控寄存器了。
  此外,使用库函数的方式代码占用空间大,用寄存器的话,代码占用空间小。之前有个需求,我能用的Flash的空间大小只有4KB,遇到类似这样的情况就不能那么随性的用库函数了。
  最后,应用的时候当然是怎么简单就怎么用。学从难处学,用从易处用,与君共勉
  END:以上笔记中如有错误,欢迎指出!谢谢

赵震宇读心无偶像包袱塑造病患角色精湛演技获好评星关系10月18日讯如果你也是一个影视剧狂热爱好者,相信比起时常霸占热搜榜单的剧集,你会偏向于凭借自己的喜好在各大平台寻找感兴趣的题材。小编也正是如此,也正是因为有这样的习惯让……华硕发布ROGPhone5s系列,搭载高通骁龙888处理器如果大家还有印象的话,应该记得上周网上曾经有传闻,华硕将推出一款ROGPhone5s系列的两款机种,基本上是ROGPhone5系列的小改款,它的外观与规格与ROGPhone5系……MotoEdge轻奢版参数大全,0MotoEdge轻奢版(8GB256GB5G版)价格:2899元上市时间:2021年08月10日屏幕尺寸:6。7英寸分辨率:24001080屏幕像……张雅钦扶摇热播化身杨幂暖萌小尾巴张雅钦《扶摇》热播化身杨幂暖萌小尾巴由柠萌影业,柠萌悦心,企鹅影视联合出品,杨文军、谢泽、李才联合执导,杨幂、阮经天、张雅钦、蒋龙等联袂出演的电视剧《扶摇》已正式登陆浙江……网易有道,道在哪里?拿掉K12,未来靠什么?文丨何旭旗下两项准核心业务均因明确的国家监管政策调整而迎来转折性变化,这还不包括近日广为散播但又说不清道不明的对其核心业务在线游戏的潜在风险……扶摇蒋龙新剧化身专业扶摇吹鬼马精灵萌力MAX昨日,由杨幂、阮经天、蒋龙、张雅钦等领衔主演的热血古装励志大剧《扶摇》在浙江卫视盛大开播。首日播出的剧情中,蒋龙作为扶摇(杨幂饰)的小师弟惊喜亮相,凭借着鬼马逗趣的性格圈粉无数……电视剧替嫁公主甜辣开机米热演绎腹黑皇帝电视剧《替嫁公主》甜辣开机米热演绎腹黑皇帝6月18日,由米热、贡米等主演的古装励志甜辣爱情剧《替嫁公主》正式在象山举行开机仪式。该剧由新生代人气演员米热担纲男一号,饰演大……电子制造业MES应用痛点在哪?企业打法有何不同?作为我国制造业转型升级的重要支柱,电子信息产业保持着市场规模全球领先的地位,实现了蓬勃发展,但依然面临着内忧外患的困境。一方面,从内部压力来看,随着材料成本、人工成本、物……能让清洁口腔更彻底?体验素诺C3Pro可视冲牙器冲牙器是这几年非常流行的口腔清洁产品,可以实现更加深度的清洁,尤其是牙龈患者,通过冲牙器清洁牙周,可以实现更加见效的清洁用途。本文就给大家带来素诺刚刚发布的C3Pro冲牙器,来……网友推测ColorOS12发布时间!超级多屏和跨屏互联或成最作为安卓手机阵营中的主流系统之一,ColorOS一直深受很多消费者跟网友的认可。今年鲁大师又把2021年上半年最流畅手机系统颁给了ColorOS,口碑跟体验确实是越来越好了。现……遇见天坛开播苗苗首穿清装跳舞惊艳星关系9月2日讯由北京市委宣传部指导,北京电视台、北京天坛公园管理处和大业创智联合出品的大型文化体验节目《遇见天坛》首期正片已于8月30日在北京卫视播出。在首期正片中,冯绍锋苗……Windows最高权限真的是Administrator吗?在WindowsXP系统之前,administrator权限确实可以说是无敌权限了,简直可以媲美system这个至高无上的超级系统权限,连删个系统文件都不再话下,这时导致病毒肆……
制动能量回收的效率与制动时的速度有关吗?现在的电动汽车上都会有一个叫动能回收的功能,当车辆需要减速的时候,制动能量回收系统开始介入工作。此时驱动电机转化成发电机进行工作,在车辆减速的同时将汽车行驶的部分动能带动……事情闹大了广东17岁中学生在校门口被多名保安持钢叉围攻经常听到有不少人感叹:现在的孩子不省心啊,不好教育,太任性了!话没说完,媒体上就曝出了一起中学生持刀捅伤保安的消息,结果这名中学生被多名保安手持钢叉进行围攻,引发了不少人的热议……一梦江湖开学季让人欢呼不已,NPC更让人怦然心动近日,除了江湖开学季推出玩具痒痒挠、各类挂件以及精美时装万卷鸿博与对竹赋,让无数玩家为之欢呼外。江湖上,还有一件事儿,也让众多玩家感到非常兴奋,我们一起来看看吧那就是如果……宜家安好智能充电桩,充电方便收费合理相信大家在生活中经常会遇到这样的情景:下班后想给电动车充电,但小区没有专门的充电区域,根本无法就近充电;有些小区即使有公用充电桩,但充电速度很慢,充了一夜还没充满电,这种情况屡……从万御安防,看安防服务的未来趋势2019年11月,万科物业与海康威视通过战略合资成立万御安防;2020年10月,万科物业更名为万物云。2021年5月,万科云发布发布安防机电服务品牌万御安防。……出街降噪新法宝HakiiTime真无线主动降噪耳机前言生活中噪声无处不在。无论你在拥挤街头、喧嚣车站,亦或是在嘈杂空间里,噪音都会成为影响心情的众多因素之一。因此,近期我对降噪耳机别有一番研究,欲在此分享下我在百元降噪耳……mac窗口缩小工具WindowMizer快捷键分享windowmizer是一款非常值得推荐的Mac窗口管理工具,具有简洁的界面,强大的功能和简单的易学的操作,可以轻松的将大量的网页缩小成窗口,改变你的软件的窗口形式。今天要给大……卢伟冰兑现承诺!红米K40系列重回1999元时代!米粉爱了要问昨天发生了什么大事情,那无疑就是Redmi发布K40系列正式发布。不管你喜不喜欢,它终究是来了。红米K40系列1999元起的定价,也让接下来要发布手机的友商无路可走。说真的……朱耿洲善于运用私募股权融资推动企业发展中小企业要善于运用私募股权融资来推动企业发展。5月19、20日,中国资本策划研究院(CCP)院长、著名融资实战策划专家朱耿洲博士为北京大学实战型私募股权投资(PE)与资本运营董……比肩小米一加,AGM黑盾城市猎人最能装的双肩背包AGM户外手机序:觅包作为一个爱摄影爱骑行的数码极客,我一直在寻找一款合适的双肩包!寻寻觅觅,可算是找到了AGM与黑盾合作的双肩包城市猎人。看到这款背包是,给了我久违的惊……新品发布国产固态AN3。0NVMeSSD成为最值得入手的SS双十一期间最值得屯的硬件是什么?我个人认为现在显卡价格很高,手里有配件的人其实完全不用提前屯点啥,不过存储设备却是一个例外。固态硬盘的价格越来越亲民,花几百块钱,就能让旧电脑开……吃不了鸡?是你没有北通J1吃鸡神器大家好,今天给大家带来的是这款北通J1吃鸡神器的测评!近些年,吃鸡类FPS游戏在国内是越来越火了,同时很多玩家的技术也是参差不齐,那么除了练习有什么办法可以快速增长玩家实力呢?……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网