用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网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 | |
【分享评测,赢取加热台】使用8051单片机驱动WS2812被打赏40分 |