求助!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-23 18:41
你对内存区还不太了解,当你使用第1组寄存器时,data区的00~07其实就是R0~R7,你的:p++编译后其实就是 inc R0(地址00),
for(i=0;i<128;i++) 其实也是INC R7(地址07)直到80H,其实它是也被清过零,只是你又把它加上去了。
Little_White
2楼-- · 2020-01-23 22:11
回复【1楼】flywater  落叶
-----------------------------------------------------------------------

没看大明白。R0-R7 在什么时候清零,又是在什么时候加上的???
kongjie07
3楼-- · 2020-01-23 22:50
回复【1楼】flywater 落叶
-----------------------------------------------------------------------
我清的是Idata类型的数据,跟data类型没什么关系吧?我知道间接寻址内128字节的寄存器是要用到R0和R1,可那是data类型的啊,我查看的是idata类型的数据。
rainyss
4楼-- · 2020-01-23 23:49
 精彩回答 2  元偷偷看……
rainyss
5楼-- · 2020-01-24 01:54
回复【3楼】kongjie07 路人甲
回复【1楼】flywater 落叶
-----------------------------------------------------------------------
我清的是idata类型的数据,跟data类型没什么关系吧?我知道间接寻址内128字节的寄存器是要用到r0和r1,可那是data类型的啊,我查看的是idata类型的数据。
-----------------------------------------------------------------------

低128字的data和idata是重叠的
gycsy
6楼-- · 2020-01-24 05:09
呵呵,挺有意思. 这个程序永远无法结束吧?

i 变量会被反复清0, for 永远出不来.

而idata内存访问一定要用到Ri作为地址指针.

一周热门 更多>