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

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

3天內不再提示

淺析C語言中的變量修飾符

朱老師物聯網大講堂 ? 2024-04-15 08:10 ? 次閱讀

一、修飾符類型


51單片機采用哈佛結構。內存空間編址有重疊??梢栽诓煌偩€上定義不同的變量。在KEIL C51中定義了data、idata、xdata、code幾種域修飾符。這些修飾符決定了變量訪問方式。

data:固定指前面0x00-0x7F的128個RAM,可以用acc直接讀寫,速度最快,生成的代碼也最小。

idata:固定指前面0x00-0xFF的256個RAM,其中前128和data的128完全相同,只是訪問的方式不同。

xdata:外部擴展RAM。

code:ROM。

920b97e6-fabc-11ee-9118-92fbcf53809c.png

92020730-fabc-11ee-9118-92fbcf53809c.png

二、變量定義


對變量進行聲明時可以指定變量的存儲類型如:uchar data x和data uchar x相等,都是在片內RAM區分配一個字節的空間。

同樣對于指針變量的聲明,因涉及到指針變量本身的存儲位置和指針所指向的存儲位置不同而進行相應的存儲區類型關鍵字的聲明。

如下一句代碼,表示的是:指在RAM區分配一個指針變量(“*”號后的關鍵字的作用),而且這個指針本身指向xdata區(“*”前xdata關鍵字的作用)

921610b8-fabc-11ee-9118-92fbcf53809c.png

92020730-fabc-11ee-9118-92fbcf53809c.png

三、指針變量與存儲區域關系


定義如下變量:

9225e24a-fabc-11ee-9118-92fbcf53809c.png

第一種情況:是指在片內RAM分配一個指針變量(“*”號后的data關鍵字的作用),而且這個指針本身指向xdata區(“*”前xdata關鍵字的作用)。這種定義方式訪問效率最高。

922d1e70-fabc-11ee-9118-92fbcf53809c.png

第二種情況:是指在idata區域分配一個指針變量,指針變量指向xdata區域。這種訪問效率不如第一種。

9233a22c-fabc-11ee-9118-92fbcf53809c.png

第三種情況:是指在xdata區域分配一個指針變量,指針變量指向xdata區域。這種訪問效率不如第二種。

923a94a6-fabc-11ee-9118-92fbcf53809c.png

第四種情況:這種定義方式是錯誤,該指針變量只能訪問data區域,無法訪問xdata區域。

9248eb1e-fabc-11ee-9118-92fbcf53809c.png

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

    關注

    180

    文章

    7542

    瀏覽量

    131042
  • 變量
    +關注

    關注

    0

    文章

    598

    瀏覽量

    28139
收藏 人收藏

    評論

    相關推薦

    C語言中static的作用(轉載)

    就是在各自文件中,在相同的全局變量申明前加上static修飾符。這樣系統就會為他們分配不同的內存,互不影響了。在C語言中static的作用如下:第一、在
    發表于 01-23 16:49

    “無注冊”修飾符如何防止變量被保存到CPU寄存器中?

    好的,我的意思是,我希望真正的內存位置(無論是全局的還是本地的,不是基于堆棧的,變量)都要更新,所以當中斷發生時,它會找到一個更新的值。我知道“寄存器”修飾符,但它正好相反。F我想做什么,我在文檔中
    發表于 10-09 11:09

    請問C++代碼的修飾符該怎么理解?

    有如下的代碼段,寫出下面除了宏定義外的其他代碼的真實代碼(即預處理后的代碼)。然后寫出對const的修飾符的理解(當前的代碼用于單片機中):#define DECL_PC_CMD_FUN(name
    發表于 11-11 04:35

    請問什么是正則表達式修飾符?

    什么是正則表達式的修飾符?
    發表于 11-04 06:10

    【每日一知識點】C語言中const詳解

    馬上就想到了常量。事實上在C語言中const功能很強大,它可以修飾變量、數組、指針、函數參數等。1、 修飾
    發表于 03-29 10:53

    c語言中整數的取值范圍是多少

    c語言中整數的取值范圍,文章目錄1、整數的取值范圍2、版權聲明整數是我們生活中常用的數據類型,也是編程中常用的一種數據,C語言使用int關鍵字來定義整數
    發表于 07-20 07:50

    C51語言變量定義方式

    C51 語言變量定義定義方式:普通變量:(修飾符)數據類型 [存儲類型] 變量名 [= 值]指
    發表于 12-01 06:18

    HAL庫中__weak修飾符是什么?

    單片機系統時鐘是什么?HAL庫中__weak修飾符是什么?
    發表于 02-23 07:32

    探討一下C語言中的作用域局部變量

    作用域局部變量--local variable全局變量--global variable修飾符--storage description局部變量–local variable一般在{}
    發表于 02-28 06:00

    C語言類型修飾符Const的教程使用說明

    Const也是應該廣泛的關鍵字,表示后面定義有可能是一個不變的常量,但是跟各種數據類型定義組合,能演變出復雜含義。常類型是指使用類型修飾符const說明的類型,常類型的變量或對象的值是不能被更新
    的頭像 發表于 09-20 09:37 ?2866次閱讀

    C語言類型修飾符Volatile的使用說明

    C語言是我們經常需要用到的語言,C語言中的類型修飾符Volatile大家知道怎么使用嗎? volatile是一個類型修飾符(type spe
    的頭像 發表于 09-19 10:54 ?3336次閱讀

    一種修飾符能使變量在處理器復位而不被初始化

    有一種修飾符能使變量在處理器復位而不被初始化
    的頭像 發表于 03-14 15:01 ?3617次閱讀
    一種<b class='flag-5'>修飾符</b>能使<b class='flag-5'>變量</b>在處理器復位而不被初始化

    C51 單片機的 C 語言中變量定義與硬件之間的關系

    C51 語言變量定義定義方式:普通變量:(修飾符)數據類型 [存儲類型] 變量名 [= 值]指針變量
    發表于 11-23 16:51 ?3次下載
    C51 單片機的 C <b class='flag-5'>語言中</b>的<b class='flag-5'>變量</b>定義與硬件之間的關系

    C語言中變量的作用域

    作用域局部變量--local variable全局變量--global variable修飾符--storage description局部變量–local variable一般在{}
    發表于 01-13 14:58 ?0次下載
    C<b class='flag-5'>語言中</b><b class='flag-5'>變量</b>的作用域

    Java四種訪問修飾符及訪問范圍

    public修飾的類、類屬變量及方法,包內及包外的任何類均可以訪問;任何情況下都可以訪問;如果一個類、類屬變量及方法沒有用任何修飾符,則其訪問權限為默認權限,只認包。同包下可以訪問,同
    的頭像 發表于 02-28 14:35 ?5848次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>