打印
[51单片机]

c语言下如何赋值ram 低128字节为0,使用循环方式。

[复制链接]
1200|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
softerchang|  楼主 | 2015-7-20 14:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
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;
}

使用特权

评论回复
5
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 字节的空间. 除了初始化代码, 应用程序不宜随便去清零这部分内存! 可能会导致程序崩溃.

使用特权

评论回复
6
coody| | 2015-7-21 13:01 | 只看该作者
如果用的是KEIL,启动代码已经帮清0了低128字节,也可以改成高128字节、XDATA一起清0

使用特权

评论回复
7
softerchang|  楼主 | 2015-7-24 13:55 | 只看该作者
谢谢诸位:
  其实最好的方法同coody说的一样,在启动代码中就已为0了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

83

主题

327

帖子

2

粉丝