电子产品世界 » 论坛首页 » 嵌入式开发 » 单片机 » 请教,C语言编程如何清零RAM


共4条 1/1 1 跳转至

请教,C语言编程如何清零RAM

助工
2008-06-03 20:34:11    评分

用C编程如何清零RAM区?好像用数据指针不行。。。。C语言我不熟
还是要用汇编才可以?
谢谢!!




关键词: 请教     语言编程     如何     清零    

助工
2008-06-03 20:40:59    评分
2楼
这样可以???:
int a[255];
for (i=0;i<256;i++)
{
         a[i]=0;
}

菜鸟
2008-06-03 22:08:54    评分
3楼
有两种方法,一种是在C语言中嵌入汇编,另一种是用纯C语言实现。
但是,在C语言里面这样直接操作RAM地址非常不安全。
因为很可能产生地址分配上的冲突,清掉了编译器分配好的变量。
如果没有必要,请不要这样使用。

另外,您自己提出的那种方法非常安全,但是浪费了空间;
因为编译器不会在数组a占用的地址上再分配变量,所以达不到目的。

以下仅是C语言实现清RAM的例子,仅供参考:

=========================================
某款SuperH单片机,RAM起始地址为FFFFA000,
从此地址开始,向后清100 Bytes,全清为零

unsigned int     i;                       /* 定义循环变量 */
unsigned int *  clear_start;        /* 起始地址指针    */

clear_start = (unsigned int *)0xFFFFA000;    /* 给指针赋值    */

for(i = 0; i < 25; i++){        /* 循环清零    */
    * clear_start ++ = 0x00000000;
}


注:unsigned int 类型在SuperH编译器里面是4个bytes
循环量终止于25,即25个unsigned int,相当于100 bytes

(再次重申,可以实现功能,但是用在程序里有一定风险)

助工
2008-06-04 08:05:57    评分
4楼
好的,明白了
关键我要的是给指针赋初值这句:
clear_start = (unsigned int *)0xFFFFA000;    /* 给指针赋值    */


谢谢!!

共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]