用C编程如何清零RAM区?好像用数据指针不行。。。。C语言我不熟
还是要用汇编才可以?
谢谢!!
共4条
1/1 1 跳转至页
请教,C语言编程如何清零RAM


有两种方法,一种是在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
(再次重申,可以实现功能,但是用在程序里有一定风险)
但是,在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
(再次重申,可以实现功能,但是用在程序里有一定风险)

4楼
好的,明白了
关键我要的是给指针赋初值这句:
clear_start = (unsigned int *)0xFFFFA000; /* 给指针赋值 */
谢谢!!
关键我要的是给指针赋初值这句:
clear_start = (unsigned int *)0xFFFFA000; /* 给指针赋值 */
谢谢!!
共4条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
基于MSPM0L1306的MODBUS-RTU协议通讯实验被打赏50分 | |
每周了解几个硬件知识+485硬件知识分享被打赏10分 | |
【换取手持示波器】树莓派PICOW网页烟花被打赏18分 | |
【换取手持示波器】树莓派PICO逻辑分析仪被打赏16分 | |
【分享评测,赢取加热台】教你五分钟本地部署蒸馏版本的DeepSeekR1-7B被打赏12分 | |
【换取手持示波器】蓝牙音箱更换电池被打赏8分 | |
【换取手持示波器】鼠标更换微动开关被打赏10分 | |
【我要开发板】4.传感器移植被打赏50分 | |
【换取手持数字示波器】RISC-VGCC使用-fno-omit-frame-pointer编译选项实现栈回溯被打赏29分 | |
【分享评测,赢取加热台】+开关电源简述被打赏7分 |