Nuvoton Keil技巧篇1 -- 8051 RAM篇

        目前新唐已经量产多个8051系列产品,比如MS51、ML51、CM1003系列等。我们现在来重点讲解下新唐的RAM分布情况。
        RAM有片内和片外之分,片内又分为直接寻址和间接寻址。片外称之为xdata,片内直接寻址称之为data,片内间接寻址称之为idata。

        data:   指片内0x00-0x7F的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。
        idata:  指片内0x00-0xFF的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。
        xdata: 指片外0x0000-0x7FF空间。(针对不同Flash大小的芯片,此部分大小是有差异的)

        详细可以参考规格书,或者参考《一分钟了解8051的RAM如何分布和使用 》文章。
        官方链接:http://nuvoton-mcu.com/forum.php?mod=viewthread&tid=65929&extra=page%3D1 

     在STARTUP.A51文件上有进行描述,记得根据不同规格的芯片进行调整大小。
     MS51-Flash 16K:MS51FB9AE_MS51XB9AE_MS51XB9BE (对应XDATALEN 2FFH)
     MS51-Flash 32K:MS51FC0AE_MS51XC0BE_MS51EB0AE_MS51EC0AE_MS51TC0AE_MS51PC0AE(对应XDATALEN 7FFH)
     变量要用到idata的高128字节不要忘记将STARTUP.A51中IDATALEN的80H改成100H。

        针对ML51系列产品,目前有16K、32K、64K产品,代码是上下兼容的,我这边查了2020年的ML51旧版本STARTUP.A51,当时芯片比较少,XDATALAN是2FFH,目前ML51新版本代码已经改成FFFH。所以建议针对ML51全系列产品的XDATALAN直接改成0FFFH。

        有小伙伴咨询进行新唐8051 RAM变量操作时,变量需求赋初值吗?如上面的设定都是符合规格的话,STARTUP.A51里面有进行变量清0,但是为了代码规范性,建议还是手动清零。

        如何确定RAM是否有清零,参考如下步骤。
         1、 进入仿真,在需要测试RAM的地方打个断点,比如在XDATALAN下面执行的地方打个断点,在main()程序的第一行代码也打个断点。这样做的目的可以确定,执行完成STARTUP.A51文件后,跳转到main时,RAM变量是否清零。
         2、 全速运行到断点处,修改任意在RAM地址范围的数据,比如地址0x82,改成55。 点RST重新执行代码,再全速运行,通过查看memory,可以发现0x82地址处,数据已经清零。这样就可以说明这块RAM 的区域是清零了。              

         3、 可以通过这样的方式去测试DATALEN和IDATALEN定义的范围内RAM是否清零,前提是不能超出这个定义的大小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值