首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

单片机里面如何确定地址在某个范围内,貌似和C语言不一样,不能直接用地址

2013-07-01 
单片机里面怎么确定地址在某个范围内,貌似和C语言不一样,不能直接用地址具体就是在51MCU中,我想将一块存有

单片机里面怎么确定地址在某个范围内,貌似和C语言不一样,不能直接用地址
具体就是在51MCU中,我想将一块存有字符串的地址中内容整体拷贝出来放到另外一个地址,使用了动态分配内存,但是由于内部RAM区域中00H-20H为寄存器组区域,所以当如果内存被分配到这片区域的话会引起r0-r7改变进而产生错误,导致读取的数据错误,现在只有判断分配的内存不在00H-20H才可以解决这个问题,
单片机里面如何确定地址在某个范围内,貌似和C语言不一样,不能直接用地址

//动态分配内存不考虑内存覆盖问题:但需注意要在20H-FFH之间,因为00H-1FH为寄存器组区
s[EnumCount]=(char idata *)malloc(12*sizeof(char)+EnumCount);
//if((char idata *)0x0020<(char idata *)s[EnumCount]<(char idata *)0x00FF))
strcpy(s[EnumCount],port);

因此我想问一下,怎么确定内部RAM地址位于某个范围内??
由于他和C语言地址形式不一样,是i:0034这种形式的,直接比较编译通不过
[解决办法]
引用:
Quote: 引用:

用关键字 _at_,或者直接定义全局或者局部变量

但如果是不定长度的我也不知道怎么办了

突然想到一个问题,对于超过128字节RAM的51机,其访问低128位RAM(即和特殊寄存器同地址区域)时是用间接寻址的,所以按道理malloc指定IDATA不会读写到特殊寄存器的R0-R7的,
不会你的51就只有128字节的RAM吧

我的为89C52,片内256byte(SFR和高128地址相同,当分开使用)+片内拓展1024byte,无片外RAM

要不分配到内部XDATA上去算了,省事
[解决办法]
找到问题聊,LZ比较地址大小方法错了,
改成下面试试,proteus仿真通过了
if( ( (char idata *)0x20<s[EnumCount] )&&( s[EnumCount]<(char idata *)0x7F ) )

热点排行