临汾山东漯河饰品美体美文
投稿投诉
美文创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品
漯河衢州
兴义眉山
桂林阳泉
玉溪简阳
山东遂宁
永城新余
梧州洛阳
泸州温州
临汾清远
营口常熟
浙江大连
桐乡宜昌

教科书没有讲的C语言volatile用法

10月14日 辞凤阙投稿
  许多程序员都无法正确理解C语言关键字volatile,这并不奇怪。因为大多数C语言书籍通常都是一两句一带而过,本文将告诉你如何正确使用它。
  在CC嵌入式代码中,你是否经历过以下情况:代码执行正常直到你打开了编译器优化代码执行正常直到打开了中断古怪的硬件驱动RTOS的任务独立运行正常直到生成了其他任务
  如果你的回答是yes,很有可能你没有使用C语言关键字volatile。你并不是唯一的,很多程序员都不能正确使用volatile。不幸的是,大多数c语言书籍对volatile的藐视,只是简单地一带而过。
  volatile用于声明变量时的使用的限定符。它告诉编译器该变量值可能随时发生变化,且这种变化并不是代码引起的。给编译器这个暗示是很重要的。在开始前,我们向来看一看volatile的语法。
  C语言关键字volatile语法
  声明一个变量为volatile,可以在数据类型之前或之后加上关键字volatile。下面的语句,把foo声明一个volatile的整型。
  把指针指向的变量声明为volatile很常见,尤其是IO寄存器的地址映射。下面的语句,把pReg声明为一个指向8bit无符号指针,指针指向的内容为volatile。volatileuint8tpRuint8tvolatilepR
  volatile的指针指向非volatile的变量很少见(我只使用过一次),但我还是给出相应的语法。
  顺便提一下,关于为什么要在数据类型前使用volatile关键字,请自行百度搜素。
  最后,如果你再struct或者union前使用volatile关键字,表明struct或者union的所有内容都是volatile。如果这不是你的本意,可以在struct或者union成员上使用volatile关键字。
  嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!
  无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。
  点击这里找小助理0元领取:嵌入式物联网学习资料(头条)
  正确使用C语言关键字volatile
  只要变量可能被意外的修改,就需要把该变量声明为volatile。在实际应用中,只有三种类型数据可能被修改:外设寄存器地址映射在中断服务程序中修改全局变量在多线程、多任务应用中,全局变量被多个任务读写
  接下来,我们将分别讨论上述三种情况。
  外设寄存器
  嵌入式系统包含真正的硬件,通常会有复杂的外设。这些外设寄存器的值可能被异步的修改。举个简单的例子,我们要把一个8bit状态寄存器的地址映射到0x1234。在程序中循环查看该状态寄存器的值是否变为非0。C语言操作寄存器的手法,可以参考这篇文章:C语言操作寄存器的常见手法。
  下面是最容易想到,但错误的实现方法:
  当你打开编译器优化时,程序总是执行失败。因为编译器会生成下面的汇编代码:
  程序被优化的原因很简单,既然已经把变量的值读入累加器,就没有必要重新一遍,编译器认为值是不会变化的。就这样,在第三行,程序进入了无限死循环。为了告诉编译器我们的真正意图,我们需要修改函数的声明:
  编译器生成的汇编代码:
  像这样,我们得到了正确的动作。
  中断服务程序
  在中断服务程序中,经常会修改一些全局变量值,来作为主程序中的判断条件。例如,在串口中断服务程序中,可能会检测是否接收到了ETX(假如是消息的结束标识符)字符。如果接收到了ETX,ISR设置一个全局标志位。
  错误的做法:
  在关闭编译器优化的情况下,程序可能执行正常。然而,任何像样点而优化都会break这段程序。问题是编译器并不知道etxrcvd可能被ISR中被修改。编译器只知道,表达式!extrcvd始终为真,你讲用于无法退出循环。结果,循环后面的代码可能被编译器优化掉。
  幸运的话,你的编译器可能会发出警告;不幸的话,(或者你不认真的查看编译器警告),你的程序无法正常执行。当然,你可以责怪编译器执行了糟糕的优化。
  解决方式是,将变量etxrcvd声明为volatile,所有问题(当然,也可能是部分问题)就消失了。
  多线程应用
  在实时系统中,尽管有想queues,pipes等这些同步机制,使用全局变量实现两个任务共享信息的做法依然很常见。即使在你的程序中加入了抢占式调度器,你的编译器依然无法知道什么是上下文切换,或何时发生上下文切换。因此从概念上讲,多任务修改全局变量的的做法与中断服务程序中修改全局变量的做法是相同的。
  因此,所有这类全局变量都应该声明为volatile。
  例如下面的程序:
  当打开编译器优化时,这段程序可能执行失败。解决方法是将cntr声明为volatile。
  总结
  一些编译器允许你把所有的变量隐式的声明为volatile。请抵制这种诱惑,因为它会令你不再思考,当然也会导致生成低效的代码。
  另外,也不要责怪优化器或直接把它关掉。现代的优化器已经足够优秀,我已经记不清上次遇到优化bug是什么时候了。相反,我常常看到程序员们错误的使用volatile。
  如果你被要求去修改一个很古怪的代码,请在程序中查找一下volatile关键字;如果你什么也没有找到,上面讨论的例子可以向你提供一些解决问题的思路。
  原文链接:https:mp。weixin。qq。coms524Vb6r8Ayt21JAH164jsw
  转载自:STM32嵌入式开发
  原文链接:教科书没有讲的C语言volatile用法
  本文来源网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除。

难怪中国放弃,亚洲杯接办条件出炉,亚足联暗示一国最有可能承办对于中国球迷们来说,在又一次失意世界杯预选赛后,心中最期待的事情自然是2023年亚洲杯了,毕竟这是在自己的主场进行的亚洲杯。但计划没有变化快,前段时间,中国正式宣布放弃举办20……专家解读中央经济工作会议精神推动地产新模式释放多项信号凤凰网风财讯报道中央经济工作会议12月15日至16日在北京举行。会议提出,有效防范化解重大经济金融风险,要确保房地产市场平稳发展,扎实做好保交楼、保民生、保稳定各项工作,满足行……杨紫初恋男友火了!从温晁到赵甲第,贺鹏终于要被发现了《我叫赵甲第》这部网剧大家看了吗?超级爽文系列!而该剧中男主赵甲第扮演者是演员贺鹏。他的身上有三个热议点,第一就是绯闻:杨紫初恋男友!第二点是:富二代家世;第三点是角色:从温晁……奔四奔五的女人穿衣简单点才优雅,瞧这位妈妈搭配省心又时髦到了一定年纪之后,女人会发现生活的压力也在逐渐增大。日常琐碎的小事和各种突发的挑战都会分散女人的注意力,所以在穿衣打扮的问题上,中年女人常常会面临心有余而力不足的问题。很……欧盟又下手了!苹果被迫开放第三方应用商店这下优势全无11月2日消息,欧盟向苹果公司提出开放更多权限的请求,包括第三方应用商店、iMessage信息和FaceTime通话等权限,允许更多开发者利用这些权限开发自己的应用程序。据悉,……孩子的名字别乱取,千年来古人重视取名并不是单纯迷信导语:最近,河南的一位宝妈在网上发布了自己小孩的出生证明,名字叫做陈皮话梅糖引起了广大网友的热议。那么今天东叔就根据这个新闻来引出一个话题,为什么我们的名字很少取这些比较……苹果被罚26亿元!法国开出巨额罚单,难怪iPhone14在欧据外媒报道,法国再次对苹果公司开出26亿元巨额罚单,相比此前判决已经下降50多亿,原因是苹果涉嫌反垄断竞争,库克会乖乖认怂吗?报道显示,法国反垄断监管机构在2020年认定……惠州工业总产值破万亿,擘画一流城市图景十年,是奋进的时间坐标。2021年,惠州GDP4977。36亿元,比十年前翻了一番多;工业总产值突破1万亿元,成为广深佛莞后广东又一万亿工业大市;人均GDP82113元,……国足又爆丑闻!前国足主帅李铁被带走调查,球迷这下坐不住了距离2022年卡塔尔世界杯开幕只剩下十几天的时间,而中国男足则是早早已经确定无缘这次的世界杯。在去年的世预赛上,球迷对于国足小组出线还是充满着希望,毕竟我们拥有多名归化球员。但……队报梅西在更衣室保持谨慎态度,内姆争点球后调节二人关系直播吧9月14日讯队报今日发文谈到了梅西在姆巴佩、内马尔此前点球门事件中的作用。姆巴佩、内马尔此前在比赛中发生点球之争,而梅西一直处在这件事情的幕后。从七座金球得主高度和……奥运选拔赛,伊藤美诚被打110遭40零封,球迷巴黎奥运没戏了伊藤美诚又迎来了一场惨败,被4:0零封,单局还被打了一个11:0!有球迷会疑惑,2022年全锦赛还在进行中,没有什么国际乒坛赛事,伊藤美诚被谁教训的这么惨?答曰:队友!最……夜雨丨黎强乡下的老镰乡下的老镰黎强布满烟尘黑黢黢的老土墙上,挂着几把亮铮铮的老镰,在老家的堂屋里,一眼就看得见。老镰把上粘着新鲜的泥土,偶尔还有不知名的草茎或草叶黏在锋利的刀刃上面,仿……
三星为自家广告道歉,外国女权更厉害!凌晨2点为什么不能跑步说真的,刚开始看到这个资讯的时候,我以为他是在开玩笑。没想到点进去一看,他说的都是真的。3月31日,三星在视频网站YouTube上,发布了一则时长1分钟的广告片,用以宣传……婴幼无人照料是阻碍生育首要因素国家发改委最新数据显示,国内调查显示,婴幼儿缺乏关爱是阻碍生育的首要因素,且城市中有超过13的家庭有育儿需求,但供给明显不足,尤其是对包容性性服务的需求更是供不应求。同时指出了……哪些潜伏在你嘴边的食物,其实会增加患癌风险?提醒家人俗话说:病从口入,这句话一点也不夸张。大多数疾病发生都跟饮食相关,比如高脂肪和高热量饮食可诱发肥胖症和三高、脂肪肝,没有注意饮食卫生可诱发胃肠道疾病等。你知道吗,癌症发生也跟食……腾讯ROG6游戏手机强悍的游戏性能加多种黑科技它来了众所周知ROG电脑作为最贵的一类,一直被称为败家之眼,你要问我为什么叫败家之眼,别人不敢堆的料我敢,别人不敢卖的价格我敢,这就是ROG败家之眼。那这款ROG6游戏手机它怎……10个DPOY组一队战斗力如何,网友攻防兼备,可以完成十连冠从1983年开始,NBA增设年度最佳防守球员奖项,英文简称DPOY。这一奖项是用来表彰那些在比赛中防守端做出突出贡献的球员,这些球员当中有专职外线防守尖兵,比如迈克尔库珀、埃尔……调查潮水退去后的华强北挖矿生意经显卡价格暴跌仍有人豪赌被视为中国山寨电子交易中心的华强北,过去疯狂的矿机生意,已寥寥无几,伴随一同沉寂的还有机器设备GPU显卡通过显卡算力挖掘比特币、以太坊等虚拟代币的行为也早已难觅踪迹。作为……新研究称现代动物起源于我国云南澄江,此地远古时有个浅水三角洲在生物进化史上,既有不少生物灭绝事件,却也有不少生物爆发事件。最著名的就是寒武纪生物大爆发了,从大约5。42亿年前开始到5。2亿年前的一两千万年时间内(一说只有几百万年),世界……三句话,伴你走向自在人生人,最难的就是认清现实,洞悉他人,认识自己;认清现实,可以让你不迷茫,不躁动;洞悉他人,才能对症下药,以互利共赢;认识自己,才能知己知彼,发挥所长。那么,我们怎么才能看清……推动量子技术革命的20位最具影响力的人物光子盒研究院出品量子科技媒体QuantumZeitgeist评选了推动量子技术革命的20位最具影响力的人物,他们正在创造未来的科学和技术,并在量子计算方面发挥了重要作用。……未来5年,要趁早买房还是尽快卖房?楼市4大趋势给出答案今年以来,全国房屋新开工面积出现了断崖式下跌,并且这个数据还在扩大。不信我们先来看一组数据:2022年14月,全国房屋新开工面积3。9亿平方米,同比下降26。3……Steam夏季特卖10款奶茶价游戏,方舟生存进化29元再现恐由于现在游戏厂商打造游戏的工艺越来越厉害,很多的游戏都开始具备打造一个虚拟世界的游戏了。下面我就来为大家推荐Steam夏季特卖的10款奶茶价游戏,虽然便宜,但是它们给玩家们创造……伊能静离开庾澄庆嫁给秦昊,这个选择到底有多值?2020年初,综艺节目的录制现场。伊能静眼中闪烁着泪光单膝跪地,向站在她身旁的秦昊开口说道:老公,求你娶我。秦昊握着戒指单膝跪地,满脸带笑地帮她戴上了戒指。幸……
友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找