请教坛友,51的内存分配问题。

2020-01-13 18:23发布

很久没用51了,一直用32,最近有个项目要用到51,是ADI的(非常规51),内存默认为SMALL DATA,后来写着发现不够了,转成PDATA或XDATA都有问题,默认的SMALL DATA就正常,后来用了IDATA就可以了,还是默认的SMALL DATA,但KEIL上说默认的最多256个字节,如果想多一些怎么办?用PDATA或XDATA好像都是外挂,ADI的内存有2K多,怎么合理的用上这2K多?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
35条回答
t3486784401
1楼-- · 2020-01-17 22:56
ZHAOBAO511 发表于 2019-5-10 08:59
BL51 BANKED LINKER/LOCATER V6.22                                                      05/10/2019   ...

这不编译通过了吗,你是说运行失败?
那个 XDATA 的地址我随便填的,你需要根据你的硬件系统计算出可用的地址范围。

无非就是外接 RAM 的 CE 使能范围
ZHAOBAO511
2楼-- · 2020-01-18 00:30
1826772880 发表于 2019-5-10 10:55
STARTUP.A51里进行初始化没有?

谢谢!你猜对了,那个XDATA没开!
ZHAOBAO511
3楼-- · 2020-01-18 01:14
 精彩回答 2  元偷偷看……
t3486784401
4楼-- · 2020-01-18 06:45
ZHAOBAO511 发表于 2019-5-10 11:20
谢谢!是初始化的问题,XDATA没开,不清楚为什么KEIL要这样玩。另外ADuC84x具有片内XDATA RAM,地址从000 ...

同样的地址,如果具有不同的访问方式,则认为相互不影响。

在低 128B 空间(00H-7FH)有两个物理存储器,片上RAM、片外RAM:
1. 片上使用直接(MOV)/间接(MOV @)访问;
2. 片外使用间接(MOVX @)访问

在高 128B 空间(80H-FFH)有三个物理存储器,片上RAM、片上SFR、片外RAM
1. 片上RAM使用间接(MOV @)访问;
2. 片上SFR使用直接(MOV)访问;
3. 片外RAM使用间接(MOVX @)访问

高于 256B 的空间都属于片外RAM。默认51都是访问片外(P0/P2/ALE/WR/RD 送出信号),
某些扩展的51集成了此部分内存,但是需要开关某些寄存器,避免直接 MOVX 就输出信号了。
ZHAOBAO511
5楼-- · 2020-01-18 11:34
t3486784401 发表于 2019-5-10 13:35
同样的地址,如果具有不同的访问方式,则认为相互不影响。

在低 128B 空间(00H-7FH)有两个物理存储器 ...

谢谢,看来可以使用。

一周热门 更多>