用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在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 | |
【我踩过的那些坑】DRC使用位置错误导致的问题被打赏100分 | |
我踩过的那些坑之混合OTL功放与落地音箱被打赏50分 | |
汽车电子中巡航控制系统的使用被打赏10分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏100分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 | |
分享电子控制安全气囊计算机知识点被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】【OZONE】使用方法总结被打赏20分 | |
【分享开发笔记,赚取电动螺丝刀】【S32K314】芯片启动流程分析被打赏40分 |