色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言中volatile關鍵字的使用

電子工程師 ? 2018-03-17 11:55 ? 次閱讀

volatile的意思是易變的、可變的,作用是限制編譯器優化某些變量。首先看一段C51程序:

Keil在優化級別是為8時得到如下匯編代碼(部分未列出):

可以看到,變量d的值賦給x,y,z時,只有x中是直接讀取的d中數值,而y=d,z=d則直接將寄存器中的數值賦給y,z。若在此過程中,變量d的值被改變(比如d是一個硬件寄存器),則y,z變量中得到的數據將是錯誤的,因此在某些應用中程序存在隱患。

這類問題并不是編譯器的問題。由于訪問內部寄存器比訪問RAM速度塊,因此編譯器在編譯類似程序時,會對程序進行優化,除第一次編譯變量所在在連續讀取一個變量時,編譯器為了簡化程序,只要有可能就會把第一次讀取的值放在ACC或Rx中,在以后的讀取該變量的值時就直接使用第一次的讀取值。如果該變量的值在此過程中已經被外設(如讀取外部設備端口時經常將外設端口看作一外部RAM地址)或其他程序(如中斷服務程序)所改變,可能就會出錯。為了解決這類問題,常用的方法就是降低編譯器的優化級別或者使用volatile關鍵字。顯然降低優化級別不是所期望的,因此用volatile關鍵字修飾相關變量很有必要。

上文中的例子將d加上volatile關鍵字后,如下:

重新編譯得到的代碼(部分未列出)如下:

可以看這此y,z變量的值是從d的存儲區中讀取的。這主要是由編譯器的優化早成的,而不是編譯器的錯誤。用volatile變量對變量d修飾后,編譯器不對這個變量的操作進行優化,代碼的執行達到期望的目的。

一般說來,volatile關鍵字用在如下的幾個地方。

(1)中斷服務程序中修改的供其他程序檢測的變量需要加volatile。

(2)多任務環境下各任務間共享的標志應該加volatile。

(3)存儲器映射的硬件寄存器通常也要加volatile說明,因為每次對它的讀寫都可能有不同意義。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • volatile
    +關注

    關注

    0

    文章

    45

    瀏覽量

    13023
收藏 人收藏

    評論

    相關推薦

    教科書不會講的C語言關鍵字volatile用法

    許多程序員都無法正確理解C語言關鍵字 volatile,這并不奇怪。因為大多數C語言書籍通常都是
    發表于 02-02 10:14 ?490次閱讀

    C語言關鍵字volatile的用法

    許多程序員都無法正確理解C語言關鍵字volatile,這并不奇怪。因為大多數C語言書籍通常都是一
    發表于 04-11 09:35 ?2638次閱讀

    c語言中 volatile _Bool 關鍵字說明

    volatile 關鍵字呢?volatile總是與優化有關,編譯器有一種技術叫做數據流分析,分析程序中的變量在哪里賦值、在哪里使用、在哪里失效,分析結果可以用于常量合并,常量傳播等優化,進一步可以消除一些代碼
    發表于 01-06 10:46

    C語言volatile關鍵字詳解 精選資料分享

    1.volatile和什么有關百度翻譯是這樣子翻譯volatile的:圖1-1 百度翻譯volatile截圖volatile屬于C
    發表于 07-22 07:20

    C語言volatile關鍵字之間有什么關系?

    C語言volatile關鍵字之間有什么關系?
    發表于 11-11 07:01

    C語言中關鍵字static的作用是什么

    C語言中關鍵字static的作用是什么?用預處理指令#define 聲明一個函數,輸入天數得到有多少秒?
    發表于 12-24 06:53

    STM32CubeMX的相關資料分享

    鏈接5中的代碼)1.C語言中volatile關鍵字的學習2.【STM32】HAL庫 STM32CubeMX教程十一—DMA (串口DMA發送接收)3.
    發表于 01-14 07:10

    c語言中volatile關鍵字作用

    一個定義為volatile 的變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設這個變量的值了。精確地說就是,優化器在用到這個變量時必須每次都小心地重新讀
    發表于 06-22 17:04 ?46次下載

    C語言中volatile關鍵字

    volatile關鍵字是一種類型修飾符,用它聲明的類型變量表示可以被某些編譯器未知的因素更改。
    發表于 05-27 09:32 ?3270次閱讀

    單片機C語言中常用到的關鍵字及數據類型

    單片機C語言中常用到的關鍵字及數據類型。
    發表于 11-03 10:57 ?13次下載

    【嵌入式】C語言中volatile關鍵字

    volatile06. 附錄01. volatile概述volatileC語言中的一個關鍵字
    發表于 10-21 10:21 ?6次下載
    【嵌入式】<b class='flag-5'>C</b><b class='flag-5'>語言中</b><b class='flag-5'>volatile</b><b class='flag-5'>關鍵字</b>

    HAL庫STM32串口DMA不定長收發,空閑中斷

    參考了鏈接5中的代碼)1.C語言中volatile關鍵字的學習2.【STM32】HAL庫 STM32CubeMX教程十一—DMA (串口DMA發送接收)3.
    發表于 01-14 10:40 ?19次下載
    HAL庫STM32串口DMA不定長收發,空閑中斷

    C語言中volatile是什么

    C語言時有一個奇怪的關鍵字volatile,這到底有什么用呢?
    的頭像 發表于 02-17 14:29 ?1217次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>的<b class='flag-5'>volatile</b>是什么

    淺析C語言中的regiseter關鍵字

    C語言中重要的關鍵字有很多,static const extern我們之前都講過,還有一個在面試中出現的頻率也比較高:register。
    的頭像 發表于 08-25 17:10 ?1122次閱讀
    淺析<b class='flag-5'>C</b><b class='flag-5'>語言中</b>的regiseter<b class='flag-5'>關鍵字</b>

    快速掌握C語言關鍵字

    C語言中的32個關鍵字你知道多少個呢?根據關鍵字的作用分為四類:數據類型關鍵字、控制語句關鍵字
    的頭像 發表于 07-06 08:04 ?339次閱讀
    快速掌握<b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>關鍵字</b>
    主站蜘蛛池模板: 欧美同志高清vivoeso| 国产精品午夜福利在线观看| 亚洲中文字幕无码一去台湾| 天天操人人射| 色欲人妻无码AV专区| 秋霞鲁丝片Av无码| 内射爽无广熟女亚洲| 玛雅成人网| 毛片免费播放| 免费撕开胸罩吮胸视频| 无人区在线日本高清免费| 且试天下芒果免费观看| 女人十八毛片水真多啊| 牛牛在线国产精品| 捏揉舔水插按摩师| 青青青青草| 日韩视频在线观看| 双性人皇上被c到哭| 婷婷五月久久丁香国产综合| 色婷婷狠狠97成为人免费| 日韩AV成人无码久久精品老人| 日本午夜视频在线| 丝瓜影院观看免费高清国际观察| 兽交白浆喷水高潮| 亚洲不卡一卡2卡三卡4卡5卡| 无颜之月全集免费观看| 亚洲精品视频免费看| 一区一区三区产品| 970女主播电台歌曲| 9久高清在线不卡免费无吗视频| free性中国hd护士高清| 成人毛片免费在线观看| 国产成人在线视频免费观看| 国产在线精彩亚洲| 久久是热频国产在线| 免费国产网站| 日本xxxx69动漫| 亚洲AV久久无码精品九九软件| 一本道高清无码v| 99手机在线视频| 国产精品三级在线观看|