单片机/MCU论坛
直播中

吴湛

9年用户 869经验值
擅长:可编程逻辑
私信 关注
[问答]

N76E003内存空间不足怎么解决?

怎么使用中内存单元只有不到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 ".OutputALLL_LCD"...
".OutputALLL_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

回帖(2)

张林锋

2024-1-17 14:15:59
在target里面 选用large模式 ,启用xdata即可
举报

郑成枝

2024-1-17 15:35:24
根据您提供的信息,N76E003芯片有256个字节的内存单元。根据您的程序定义,定义了一个大小为13的UINT8型数组Uart_Receive_Buffer。您在编译过程中指定了数组的大小为1,并且编译通过了。但是当您尝试增加数组的大小时,程序出现了溢出报错。

溢出报错是因为N76E003芯片的内存空间不足以容纳您定义的数组。根据程序编译的结果,您可以看到data区已经使用了129个字节,而xdata区没有使用任何字节。

解决方法可以有以下几种:
1. 减小数组的大小:您可以修改宏定义RECEIVE_BUFFER_SIZE的值为一个可以被芯片内存容纳的较小的值。
2. 优化代码:查看代码中是否存在无用的变量或数组,删除不需要的部分,从而释放更多的内存空间。
3. 使用外部存储器:如果芯片本身内存空间不足,可以考虑使用外部存储器,将一部分数据存储在外部存储器中。

请注意,在修改代码之前,确保了解代码的功能和需求,以免影响到代码的正常运行。
举报

更多回帖

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