久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4085|回復: 6
打印 上一主題 下一主題
收起左側

51單片機定義的變量默認是存在哪個區域的?

[復制鏈接]
跳轉到指定樓層
樓主
ID:847776 發表于 2021-6-8 12:57 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
數據區包含data、idata、bdata、xdata等,定義變量時,加上這幾個存儲區域類型關鍵字,就能指定變量存儲的位置,那么如果不指定,其默認是放在哪里的呢?
如,定義一個全局變量 unsigned char x;  這里的x ,默認是放到哪個區域的?
如,定義一個局部變量unsigned char x; 這里的x,又默認是放到哪個區域的?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:275826 發表于 2021-6-8 15:23 | 只看該作者
這個是由儲存模式決定的

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:934874 發表于 2021-6-8 15:48 | 只看該作者
數據空間又分為內部數據空間(IRAM)和外部數據空間(XRAM),他們的大小和訪問速度有很大區別。用data、bdata、idata、pdata、xdata修飾變量時,會導致變量存在不同的數據空間中,從而導致訪問速度的差異。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:818024 發表于 2021-6-8 15:48 | 只看該作者
默認當然是存在內存里,反正不在flash里,全局變量存在編譯器定義的靜態存儲區,局部變量在棧里面

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

5#
ID:155507 發表于 2021-6-8 16:45 | 只看該作者
如,定義一個全局變量 unsigned char x;  這里的x ,默認是放到哪個區域的?
DATA
如,定義一個局部變量unsigned char x; 這里的x,又默認是放到哪個區域的?
寄存器

  1. #include "reg51.h"


  2. #define uchar unsigned char  
  3. #define uint  unsigned int  

  4. unsigned char Ex;  //定義一個全局變量

  5. void delay()
  6. {
  7.         unsigned char x;  //定義一個局部變量
  8.         for(x=0;x<150;x++)
  9.         {
  10.                 ;
  11.         }
  12. }

  13. void main()
  14. {
  15.         Ex =1;
  16.         delay();
  17.        
  18. }
復制代碼

  1. C51 COMPILER V9.52.0.0   TEST001                                                           06/08/2021 16:36:51 PAGE 1   


  2. C51 COMPILER V9.52.0.0, COMPILATION OF MODULE TEST001
  3. OBJECT MODULE PLACED IN Test001.OBJ
  4. COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Test001.c BROWSE DEBUG OBJECTEXTEND CODE SYMBOLS TABS(2)

  5. line level    source

  6.    1          #include "reg51.h"
  7.    2         
  8.    3         
  9.    4          #define uchar unsigned char  
  10.    5          #define uint  unsigned int  
  11.    6         
  12.    7          unsigned char Ex;  //定義一個全局變量
  13.    8         
  14.    9          void delay()
  15.   10          {
  16.   11   1        unsigned char x;  //定義一個局部變量
  17.   12   1        for(x=0;x<150;x++)
  18.   13   1        {
  19.   14   2          ;
  20.   15   2        }
  21.   16   1      }
  22.   17         
  23.   18          void main()
  24.   19          {
  25.   20   1        Ex =1;
  26.   21   1        delay();
  27.   22   1        
  28.   23   1      }
  29. C51 COMPILER V9.52.0.0   TEST001                                                           06/08/2021 16:36:51 PAGE 2   

  30. ASSEMBLY LISTING OF GENERATED OBJECT CODE


  31.              ; FUNCTION delay (BEGIN)
  32.                                            ; SOURCE LINE # 9
  33.                                            ; SOURCE LINE # 10
  34.                                            ; SOURCE LINE # 12
  35. ;---- Variable 'x' assigned to Register 'R7' ----
  36. 0000 E4                CLR     A
  37. 0001 FF                MOV     R7,A
  38. 0002         ?C0001:
  39.                                            ; SOURCE LINE # 13
  40.                                            ; SOURCE LINE # 15
  41. 0002 0F                INC     R7
  42. 0003 BF96FC            CJNE    R7,#096H,?C0001
  43.                                            ; SOURCE LINE # 16
  44. 0006         ?C0004:
  45. 0006 22                RET     
  46.              ; FUNCTION delay (END)

  47.              ; FUNCTION main (BEGIN)
  48.                                            ; SOURCE LINE # 18
  49.                                            ; SOURCE LINE # 19
  50.                                            ; SOURCE LINE # 20
  51. 0000 750001      R     MOV     Ex,#01H
  52.                                            ; SOURCE LINE # 21
  53. 0003 020000      R     LJMP    delay
  54.              ; FUNCTION main (END)

  55. C51 COMPILER V9.52.0.0   TEST001                                                           06/08/2021 16:36:51 PAGE 3   

  56. NAME                                    CLASS   MSPACE  TYPE    OFFSET  SIZE
  57. ====                                    =====   ======  ====    ======  ====


  58. delay. . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  59.   x. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
  60. main . . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  61. Ex . . . . . . . . . . . . . . . . . .  PUBLIC   DATA   U_CHAR   0000H  1


  62. MODULE INFORMATION:   STATIC OVERLAYABLE
  63.    CODE SIZE        =     13    ----
  64.    CONSTANT SIZE    =   ----    ----
  65.    XDATA SIZE       =   ----    ----
  66.    PDATA SIZE       =   ----    ----
  67.    DATA SIZE        =      1    ----
  68.    IDATA SIZE       =   ----    ----
  69.    BIT SIZE         =   ----    ----
  70. END OF MODULE INFORMATION.


  71. C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)
復制代碼

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

6#
ID:847776 發表于 2021-6-9 12:05 | 只看該作者
angmall 發表于 2021-6-8 16:45
如,定義一個全局變量 unsigned char x;  這里的x ,默認是放到哪個區域的?
DATA
如,定義一個局部變量u ...

謝謝,后面的匯編看不懂,但后面的存儲區域分配基本看明白了,相當于不管全局變量還是局部變量都是默認放在data區,因為data區包含了寄存器組和bdata區,其中局部變量特別放到了寄存器組里面。
回復

使用道具 舉報

7#
ID:81196 發表于 2021-6-17 11:26 | 只看該作者
全局變量和局部變量的存放有堆和棧的區分.即使局部變量,如果加上static也相當于一個全局變量
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 淫片一级国产 | 亚洲成人免费在线观看 | 国产精品99久久久久久宅男 | 亚洲在线一区 | 国产精品美女一区二区 | 日本精品久久久久久久 | av在线免费观看网站 | 中文字幕免费在线 | 精品国产欧美一区二区 | 性xxxxx| 精品国产乱码久久久久久丨区2区 | 亚洲精品在线免费观看视频 | 欧美一级久久 | 久久亚洲欧美日韩精品专区 | 久久综合久色欧美综合狠狠 | 亚洲一一在线 | 国产伦精品一区二区三区精品视频 | 一级欧美一级日韩片 | 久久久久久999 | 日韩视频三区 | 亚洲第一网站 | 中文字幕 视频一区 | 成人午夜视频在线观看 | 国产激情一区二区三区 | 日本免费一区二区三区 | 一区中文字幕 | 国产精品黄色 | 欧美最猛性xxxxx亚洲精品 | 日韩精品在线网站 | 1区2区视频 | 精品一区久久 | 91看片免费 | 自拍第一页 | 国内激情av片 | 久久国产激情视频 | 91久久伊人| 日韩成人影院在线观看 | 久久久久久亚洲精品 | 在线视频99| 欧美成人在线影院 | 欧美精品在线免费 |