[51单片机] c语言下如何赋值ram 低128字节为0,使用循环方式。

[复制链接]
1446|6
 楼主| softerchang 发表于 2015-7-20 14:53 | 显示全部楼层 |阅读模式
如题,定义好全局变量后再一个个去设为0,麻烦。求解!
ningling_21 发表于 2015-7-20 16:42 | 显示全部楼层
使用指向低128字节空间的指针
cuya 发表于 2015-7-20 21:53 | 显示全部楼层
设置128字节为0,也就两行语句, 这也叫麻烦?
ayb_ice 发表于 2015-7-21 07:57 | 显示全部楼层
启动代码中配置

C里
char data temp[8];
char i;
for(i=0; i<sizeof(temp); i++){
    temp[i] = 0x0;
}
airwill 发表于 2015-7-21 08:24 | 显示全部楼层
从技术上讲. 1楼的办法用个指针就可以了.
比如:
unsigned char data *cp = (unsigned char data *)128;
do *--cp =0: while (cp);

不过有两个问题: cp 会编译到 R0, 而这个 R0 也在 128 字节内, 也会被修改. 上面的代码如果寄存器组不是0, 那么低与寄存器组的地址是清除不了的. 这里的指针用了累减方式, 而如果用指针累加方式, 情况会复杂一点.
另外, C 编译器会安排很多变量在低 128 字节的空间. 除了初始化代码, 应用程序不宜随便去清零这部分内存! 可能会导致程序崩溃.
coody 发表于 2015-7-21 13:01 | 显示全部楼层
如果用的是KEIL,启动代码已经帮清0了低128字节,也可以改成高128字节、XDATA一起清0
 楼主| softerchang 发表于 2015-7-24 13:55 | 显示全部楼层
谢谢诸位:
  其实最好的方法同coody说的一样,在启动代码中就已为0了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

83

主题

328

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部