在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

一文詳解volatile關鍵字

CHANBAEK ? 來源:CSDN-借過風景 ? 作者:CSDN-借過風景 ? 2023-02-15 11:54 ? 次閱讀

1、volatile關鍵字

volatile 是易變的、不穩定的意思。 和const一樣是一種類型修飾符,volatile關鍵字修飾的變量,編譯器對訪問該變量的代碼不再進行優化,從而可以提供對特殊地址的穩定訪問。
以前只是聽過這個關鍵詞,知道它的存在,但從來沒用過。 用此文記錄下在開發RISC-V MCU過程中,未用volatile修飾標志位變量,編譯器進行優化,導致程序運行異常。

2、演示

開發中,常見的需求,主循環中根據中斷中修改的標志位,運行不同的功能,

#include "debug.h"
 
uint8_t flag_interrupt = 0;
 
int main(void)
{
    USART_Printf_Init(115200);
    printf("SystemClk:%d\\r\\n",SystemCoreClock);
 
    EXTI0_INT_INIT();
 
    while(1)
    {
        if(flag_interrupt == 1)
        {
            flag_interrupt = 0;
            printf("do something\\r\\n");
        }
    }
}
 
/* 外部中斷服務函數*/
__attribute__((interrupt("WCH-Interrupt-fast")))
void EXTI0_IRQHandler(void)
{
    if(EXTI_GetITStatus(EXTI_Line0)==SET)  //EXTI_GetITStatus用來獲取中斷標志位狀態
    {
        flag_interrupt = 1;
        printf("Run at EXTI\\r\\n");
        EXTI_ClearITPendingBit(EXTI_Line0);  //清除中斷標志位
    }
}

進入中斷服務函數,改變了flag_interrupt的值,但是主函數仍然沒有運行相應的程序,很是奇怪,檢查反匯編代碼,才發現是編譯器對flag_interrupt變量的訪問進行了優化,如圖,將程序下載至MCU后,給P1.0引腳下降沿觸發信號,運行現象如下

圖像

圖像

278:    01271063 bne    a4,s2,278 0x34> # 不相等就跳轉至0x278的位置,即還是本條語句的位置,

可以看到,編譯器對flag_interrupt變量的訪問進行了優化,沒有重新去0x20000080的位置進行取值,而是每次都用a4寄存器的值與s2寄存器(值為1)比較,不相等還是跳回本條語句的位置,重復運行,導致即使在中斷中改變了其值,主循環中也不能運行對應的功能。 這時候就需要使用volatile關鍵字對flag_interrupt進行修飾。

volatile uint8_t flag_interrupt = 0;

加了volatile關鍵字修飾flag_interrupt后,程序按照設定的預期運行,如下圖所示:

圖像

查看反匯編代碼,編譯器未對flag_interrupt變量進行優化,老老實實的每次去源地址0x20000080處取值訪問。

圖像

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

    關注

    5

    文章

    900

    瀏覽量

    41753
  • 代碼
    +關注

    關注

    30

    文章

    4827

    瀏覽量

    69054
  • 編譯器
    +關注

    關注

    1

    文章

    1642

    瀏覽量

    49286
  • 關鍵字
    +關注

    關注

    0

    文章

    37

    瀏覽量

    6926
  • volatile
    +關注

    關注

    0

    文章

    45

    瀏覽量

    13062
收藏 人收藏

    評論

    相關推薦

    C語言關鍵字volatile的用法

    許多程序員都無法正確理解C語言關鍵字volatile,這并不奇怪。因為大多數C語言書籍通常都是一兩句帶而過,本文將告訴你如何正確使用它。
    發表于 04-11 09:35 ?2714次閱讀

    c語言中 volatile _Bool 關鍵字說明

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

    請問關鍵字volatile該什么時候用?

    這東西的概念我懂,但是實際編程時,關鍵字volatile該什么時候用啊,求大神來點經驗之談!
    發表于 04-28 09:06

    【原創分享】單片機編程關鍵字volatile

    volatile其實和const樣是種類型修飾符,用它修飾的變量表示可以被某些編譯器未知的因素而改變,比如操作系統、硬件或者其他線程等等。遇到這個關鍵字聲明的變量,編譯器對訪問該
    發表于 06-29 11:17

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

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

    volatile關鍵字應用場景及示例

    volatile關鍵字1.應用場景2.示例1.應用場景volatile關鍵字分析,往往應用在三種場合1)多線程編程共享全局變量的時候,該全局變量要加上
    發表于 08-24 07:21

    Volatile關鍵字對于嵌入式開發有什么作用呢

    前言在進行嵌入式開發中,我們往往會看到個名為volatile或者__IO的關鍵字,那么,它們對于嵌入式開發有什么作用呢?淺析volatile數據類型實際上,__IO和
    發表于 11-05 09:20

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

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

    嵌入式程序員常見的const、static、volatile關鍵字

    開發中,const、static、volatile都是很常見的,我們嵌入式程序員需要熟知這三個關鍵字的恰當用法。下面是我參照網路上的大咖,大牛的博,然后做些代碼測試,撰寫
    發表于 12-21 06:08

    C語言中的volatile關鍵字

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

    關于volatile關鍵字對編譯器優化的影響

    volatile關鍵字對編譯器優化的影響
    的頭像 發表于 02-28 17:15 ?3002次閱讀

    般什么時候需要使用volatile關鍵字

    想必大家平時都見過volatile關鍵字,可是大家知道什么時候需要使用volatile關鍵字嗎?
    的頭像 發表于 12-24 17:29 ?1087次閱讀

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

    volatile06. 附錄01. volatile概述volatile是C語言中的關鍵字。將變量定義為
    發表于 10-21 10:21 ?6次下載
    【嵌入式】C語言中<b class='flag-5'>volatile</b><b class='flag-5'>關鍵字</b>

    Volatile關鍵字在嵌入式開發中的應用

    前言在進行嵌入式開發中,我們往往會看到個名為volatile或者__IO的關鍵字,那么,它們對于嵌入式開發有什么作用呢?淺析volatile數據類型實際上,__IO和
    發表于 11-02 18:21 ?6次下載
    <b class='flag-5'>Volatile</b><b class='flag-5'>關鍵字</b>在嵌入式開發中的應用

    C環境中的VOLATILE關鍵字

    volatile 提醒編譯器它后面所定義的變量隨時都有可能改變,因此編譯后的程序每次需要存儲或讀取這 個變量的時候,都會直接從變量地址中讀取數據。如果沒有 volatile 關鍵字,則編譯器可能
    發表于 06-14 15:03 ?2次下載
    C環境中的<b class='flag-5'>VOLATILE</b><b class='flag-5'>關鍵字</b>
    主站蜘蛛池模板: 午夜精品久久久久久 | 日本特黄特色 | 国产精品29页 | 国产精品午夜国产小视频 | 美女视频一区二区三区 | 色综合欧美 | 亚洲 成人 欧美 自拍 | 禁网站在线观看免费视频 | 四虎网站 | 日本不卡视频免费 | 99免费视频观看 | 在线观看免费国产 | 国产精品久久久久久一级毛片 | 狠狠操夜夜爱 | 久久久久久午夜精品 | 男人操女人免费视频 | 国模福利| 欧美另类自拍 | 日韩亚 | 四虎国产精品永久在线 | 九月丁香婷婷亚洲综合色 | 国产精品自在线天天看片 | 中文字幕第一 | 91最新网站免费 | 国产精品高清久久久久久久 | 日日干夜夜骑 | 亚洲综合激情六月婷婷在线观看 | 国产99久9在线视频 国产99久久九九精品免费 | 有码视频在线观看 | 国产精品资源在线观看 | 日干夜操| 亚洲成人免费在线 | 99热久久精品免费精品 | av大片| 欧美亚洲第一区 | 老师喂我吃她的奶水脱她胸罩 | 黄色网址你懂的 | 一色桃子juy774在线播放 | 国产精品爱啪在线线免费观看 | 亚洲免费成人在线 | 特黄特色视频 |