[技术问答] 请教新唐单片机N76E003内存空间不足的问题

[复制链接]
1080|3
 楼主| elephant00 发表于 2021-3-3 14:43 | 显示全部楼层 |阅读模式
今天编译程序发现一个奇怪的问题,怎么使用中内存单元只有不到130个字节?



具体如下:

程序定义如下:#define        RECEIVE_BUFFER_SIZE 13
UINT8  Uart_Receive_Buffer[RECEIVE_BUFFER_SIZE];

编译OK的如下:
Program Size: data=129.0 xdata=0 code=1776
creating hex file from ".\Output\ALLL_LCD"...
".\Output\ALLL_LCD" - 0 Error(s), 0 Warning(s).


但数组仅增加一个字节就报溢出了,是什么问题?不是有256个内存单元吗?
#define        RECEIVE_BUFFER_SIZE 13
UINT8  Uart_Receive_Buffer[RECEIVE_BUFFER_SIZE];

编译错误的如下:
*** ERROR L107: ADDRESS SPACE OVERFLOW
    SPACE:   DATA   
    SEGMENT: ?DT?_TIMER3_DELAY10US?DELAY
    LENGTH:  0004H
Program Size: data=130.0 xdata=0 code=1776
Target not created
jcky001 发表于 2021-3-3 14:44 | 显示全部楼层
如果RAM多呢,还有768吧记得扩展内存空间呢。通过idata  给变量定义到内部扩展寄存器,指令有部分限制,速度基本上差不多。
通过给变量定义xdata  可以直接把内存设置到芯片内部的外接内存,因为是通过间接地址访问,所以效率上面稍稍有点影响,但那些不常用的变量,设置到这里,是完全不影响机器运行效率的。
xdata关键词,不支持bit类型变量,避开这个就可以了。  
gx_huang 发表于 2021-3-3 14:53 | 显示全部楼层
data idata xdata,这个了解一下,默认是data,在128字节内,idata可以到256内,xdata是外部ram,可以到768字节。
当然了,256字节包含data,idata,包含堆栈,必须留出足够空间,否则堆栈溢出会死机。
单片小菜 发表于 2021-3-3 14:59 | 显示全部楼层
感谢楼主的分享,确实不错的体验。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1031

主题

3905

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部