用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 跳转至页
回复
打赏帖 | |
---|---|
【STM32F769】AI之与本地deepseek对接被打赏50分 | |
Buck电路工作在CCM模式下电感电流的计算公式是什么?被打赏5分 | |
buck电路工作原理被打赏5分 | |
基于MSPM0L1306的MODBUS-RTU协议通讯实验被打赏100分 | |
我想要一部加热台+多合一调试工具被打赏18分 | |
每周了解几个硬件知识+485硬件知识分享被打赏10分 | |
【换取手持数字示波器】树莓派PICO调试器官方固件本地化部署实践被打赏24分 | |
【换取手持数字示波器】分享一个KEIL无法识别CMSIS-DAP调试器的解决办法被打赏20分 | |
【换取手持数字示波器】分享一个自制的ArduinoNano扩展板底板被打赏23分 | |
【换取手持示波器】树莓派PICOW网页烟花被打赏18分 |