打印
[技术问答]

请教新唐单片机N76E003内存空间不足的问题

[复制链接]
812|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 | 只看该作者
感谢楼主的分享,确实不错的体验。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

970

主题

2980

帖子

7

粉丝