日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

3天內不再提示

一文詳解volatile關鍵字

CHANBAEK ? 來源:CSDN-借過風景 ? 作者:CSDN-借過風景 ? 2023-02-15 11:54 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1、volatile關鍵字

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

2、演示

開發(fā)中,常見的需求,主循環(huán)中根據中斷中修改的標志位,運行不同的功能,

#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");
        }
    }
}
 
/* 外部中斷服務函數(shù)*/
__attribute__((interrupt("WCH-Interrupt-fast")))
void EXTI0_IRQHandler(void)
{
    if(EXTI_GetITStatus(EXTI_Line0)==SET)  //EXTI_GetITStatus用來獲取中斷標志位狀態(tài)
    {
        flag_interrupt = 1;
        printf("Run at EXTI\\r\\n");
        EXTI_ClearITPendingBit(EXTI_Line0);  //清除中斷標志位
    }
}

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

圖像

圖像

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

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

volatile uint8_t flag_interrupt = 0;

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

圖像

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

圖像

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

    關注

    5

    文章

    920

    瀏覽量

    43886
  • 代碼
    +關注

    關注

    30

    文章

    4977

    瀏覽量

    74420
  • 編譯器
    +關注

    關注

    1

    文章

    1673

    瀏覽量

    51961
  • 關鍵字
    +關注

    關注

    0

    文章

    37

    瀏覽量

    7245
  • volatile
    +關注

    關注

    0

    文章

    46

    瀏覽量

    13803
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    C語言關鍵字volatile的用法

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

    哪些場合會用到volatile關鍵字?

    當你理解 volatile關鍵字的含義之后,你就能明白,其實很多場合都能用到 volatile關鍵字。 1.全局變量單片機開發(fā),難免會用到全局變量。
    發(fā)表于 11-25 08:19

    關鍵字volatile的含意

    關鍵字volatile有什么含意? 個定義為volatile的變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設這個變量的值了。精確地說就是,優(yōu)化器在用到這個變量時必須
    發(fā)表于 12-23 06:33

    c語言中 volatile _Bool 關鍵字說明

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

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

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

    【原創(chuàng)分享】單片機編程關鍵字volatile

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

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

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

    volatile關鍵字應用場景及示例

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

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

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

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

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

    C語言中的volatile關鍵字

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

    關于volatile關鍵字對編譯器優(yōu)化的影響

    volatile關鍵字對編譯器優(yōu)化的影響
    的頭像 發(fā)表于 02-28 17:15 ?3919次閱讀

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

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

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

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

    單片機編程關鍵字volatile

    volatile 修飾的變量是說這變量可能會被意想不到地改變。通常對于程序員而言,單片機 中用的就算常見了volatile 是易變的,不穩(wěn)定的意思。其實對于很多人來說,根本沒見過這個關鍵字,不 知道
    發(fā)表于 04-02 13:47 ?2次下載
    虞城县| 界首市| 枣强县| 泰顺县| 河池市| 辽中县| 安康市| 六枝特区| 盖州市| 普兰县| 吉安县| 巴楚县| 宝山区| 白沙| 新干县| 哈巴河县| 江山市| 新蔡县| 平凉市| 淅川县| 枣强县| 安新县| 台安县| 绥化市| 西畴县| 榕江县| 防城港市| 江口县| 肥城市| 桃园县| 九龙坡区| 安国市| 富源县| 长寿区| 金山区| 宜昌市| 桐梓县| 蒙山县| 涪陵区| 宜昌市| 四平市|