打印
[文档下载]

Nuvoton开发流程 初级篇 4 -- C51 RAM分布和使用

[复制链接]
1186|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Nuvoton开发流程 初级篇 4 -- C51 RAM分布和使用

使用特权

评论回复
沙发
goodluck09876|  楼主 | 2021-10-14 09:19 | 只看该作者
针对大多数初学者来说,刚入手新唐8051产品时,经常碰到RAM在芯片内部是如何分布的,同时是如何使用的,否则很容易导致编译发现RAM存储超过规格。

        1、RAM分布
        8051的RAM有片内和片外之分,片内又分为直接寻址和间接寻址。片外称之为xdata,片内直接寻址称之为data,片内间接寻址称之为idata。
        data: 指片内0x00-0x7F的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。
        idata: 指片内0x00-0xFF的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。
        xdata: 指片外0x0000-0xFFFF空间。

使用特权

评论回复
板凳
goodluck09876|  楼主 | 2021-10-14 09:28 | 只看该作者

使用特权

评论回复
地板
goodluck09876|  楼主 | 2021-10-14 09:29 | 只看该作者
2、代码里面指定变量存放的位置
        下图以IAR和keil为例,就是在正常申明变量时加上红色部分关键字就可以指定变量在RAM中存放的位置。注意:IAR的关键字前是两个下划线。

不加关键字变量是存放在哪里呢?那就取决于你的工程配置了。
        下图是keil的配置在Memory Model那项选择。
        Small:          变量默认存放在data区

        Compact:    变量默认存放在pdata区,pdata是什么呢?其实就是xdata的0x00-0xFF区域
        Large:       变量默认存放在xdata区


使用特权

评论回复
5
goodluck09876|  楼主 | 2021-10-14 09:53 | 只看该作者
下图是IAR的配置在Data Model那项选择
        Tiny:          变量默认存放在data区
        Small:        变量默认存放在idata区
        Large:        变量默认存放在xdata区
        Generic:  变量默认存放在xdata区
        至于Far选项是地址超过0xFFFF才会用到,感兴趣的可以自行查阅IAR C/C++ Compiler User Guide for the 8051。



       最后再说下Keil使用时,变量要用到idata的高128字节不要忘记将STARTUP.A51中IDATALEN的改成100H。

使用特权

评论回复
6
foxsbig| | 2021-10-14 14:46 | 只看该作者
这个对比ARM的话,有没有类比性,
各种地址,一直含含糊糊~

使用特权

评论回复
7
asmine| | 2021-10-15 10:37 | 只看该作者
恩,学习了!不错

使用特权

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

本版积分规则

220

主题

5843

帖子

21

粉丝