求助!keil c中idata数据清零的问题

2020-01-23 14:29发布

程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int
sbit led=P2^0;

void main()
{       
        uchar i;
           uchar idata test_a[10]={1,2,3,4,5,6,7,8,9,0};
        uchar idata * data p=0;
        for(i=0;i<128;i++)
        {
                *p=0;
                p++;
        }



    led=0;

}
发现0x00和0x07怎么也清不了,请大侠们指点指点,谢谢!

(原文件名:idata clear.JPG)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
flywater
1楼-- · 2020-01-24 09:43
回复【2楼】Little White
-----------------------------------------------------------------------

看一下汇编代码你就清楚了,此时汇编代码用R0和R7用作了你的循环记数器,你清到07时就已把R0和R7清过了,只是你的程序中INC R0和INC R7又把它加到了87和80H
flywater
2楼-- · 2020-01-24 10:50
回复【3楼】kongjie07 路人甲
回复【1楼】flywater 落叶
-----------------------------------------------------------------------
我清的是idata类型的数据,跟data类型没什么关系吧?我知道间接寻址内128字节的寄存器是要用到r0和r1,可那是data类型的啊,我查看的是idata类型的数据。
-----------------------------------------------------------------------

建议好好看看教科书!
kongjie07
3楼-- · 2020-01-24 14:32
 精彩回答 2  元偷偷看……
kongjie07
4楼-- · 2020-01-24 20:28
回复【8楼】flywater 落叶
-----------------------------------------------------------------------

回复【9楼】kongjie07 路人甲
-----------------------------------------------------------------------

我一直以为idata存储类型的数据只包含片内高128字节的RAM,现在懂了,对8052来说它包括256字节的片内RAM,清空它可以用STARTUP.A51,把idatalen改成100H,xdatalen也改成100H(我用的是stc89c52rc)就行了。
csq463276932
5楼-- · 2020-01-24 23:58
    idATa: 固定指前面0x00-0xff的256个RAM,其中前128和dATa的128完全相同,只是因为访问的方式不同。idATa是用类似C中的指针方式访问的。汇编中的语句为:mox ACC,@Rx.(不重要的补充:c中idATa做指针式的访问效果很好)

一周热门 更多>