单片机学习小组
直播中

李茜

7年用户 167经验值
私信 关注

请问在51中使用大型数组需要注意什么?

使用芯片STC89C52RC,
KEIL C51     MEMORY MODE   LARGE:VARIABLES IN XDATA.
//定义一个数组,并将数组内容发送至串口。
unsigned char temp[]="7528623759DA901A901A00320030003100330031003200300037003800337528753591CF4E3A";
//之前是这样定义的,没有指定数组长度,程序烧进去能正常跑。
unsigned char temp[100]="7528623759DA901A901A00320030003100330031003200300037003800337528753591CF4E3A";
//后来这样定义了,程序烧进去,初始化都完成不了。初始化过程主要是串口 LCD1602 GSM通信握手。
是不同的定义导致数组存放在了不同的区域吗?小弟汇编看不懂,一脸懵逼。
求指教。

回帖(10)

李戈

2019-9-26 07:07:48
多谢了,我试了下,解决问题了,原因应该是我的memory model设置了large,导致xdata超出,我在其他地方看到:512字节内部ram,  dataidata可以访问256字节,用xdata可以访问另外的256字节。
Program Size: data=15.1 xdata=255 code=3658//使用xdata,这样会超出256吧;
Program Size: data=145.1 xdata=100 code=3304//同时使用data,xdata.
举报

刘甜甜

2019-9-26 07:13:19
看看堆栈 设置了多大
举报

李勇进

2019-9-26 07:23:07
定义的不同导致了数组占用空间的大小不同,未定义长度的,会根据内容分配存储空间的大小,同样的数据,第一串字符只占用了七十多个字节,而你定义了100的长度,那这个数组就是100长,占用100个字节,没有数据的被0x00填充了,溢出了。
举报

王博

2019-9-26 07:34:20
  TYPE    BASE      LENGTH    RELOCATION   SEGMENT NAME
            -----------------------------------------------------
            * * * * * * *   D A T A   M E M O R Y   * * * * * * *
            REG     0000H     0008H     ABSOLUTE     "REG BANK 0"
            DATA    0008H     0005H     UNIT         _DATA_GROUP_
                    000DH     0013H                  *** GAP ***
            BIT     0020H.0   0001H.1   UNIT         _BIT_GROUP_
                    0021H.1   0000H.7                *** GAP ***
            IDATA   0022H     0001H     UNIT         ?STACK
            * * * * * * *  X D A T A   M E M O R Y  * * * * * * *
            XDATA   0000H     00CBH     UNIT         ?XD?MAIN
            XDATA   00CBH     0034H     UNIT         _XDATA_GROUP_
            * * * * * * *   C O D E   M E M O R Y   * * * * * * *
            CODE    0000H     0003H     ABSOLUTE     
            CODE    0003H     001EH     UNIT         ?PR?LCDINIT?LCD
                    0021H     0002H                  *** GAP ***
            CODE    0023H     0003H     ABSOLUTE     
            CODE    0026H     0365H     UNIT         ?PR?PRINTF?PRINTF
            CODE    038BH     01A4H     UNIT         ?PR?MAIN?MAIN
            CODE    052FH     0141H     UNIT         ?C?LIB_CODE
            CODE    0670H     013CH     UNIT         ?CO?MAIN
            CODE    07ACH     00BFH     UNIT         ?PR?_STRSTR?STRSTR
举报

更多回帖

发帖
×
20
完善资料,
赚取积分