Board logo

标题: flash的读写 [打印本页]

作者: qutao88    时间: 2006-8-7 16:20     标题: flash的读写

现在要做一个有关对flash读写的程序,可是不知道怎么写,那位有用C语言写的程序,想参考一下,先谢谢了


 


我的邮箱:qutao713@163.com


作者: strongchen    时间: 2006-8-7 16:26

论坛里已经有很多例子贴出来了,可以搜索一下。
另外,FLASH的读与RAM的读没有什么区别。
作者: qutao88    时间: 2006-8-8 09:30

void flash_to_ram(byte *src,byte *dest,byte size)
{
byte i;
for(i=0;i<size,i++)

{
*dest++ = *src++;
}
}

[此贴子已经被作者于2006-8-8 9:30:19编辑过]


作者: qutao88    时间: 2006-8-8 09:34

我在论坛里搜索了,没有得到我想要的结果,比如
void flash_to_ram(byte *src,byte *dest,byte size)
{
byte i;
for(i=0;i {
*dest++ = *src++;
}
}
如何让指针指到想要的地方
给它一个值,指不到想去的地址了,
帮一下了
作者: qutao88    时间: 2006-8-8 09:50

停在这都好几天了,没有进展,大家给指点一下了

谢谢了

作者: seuafu2005    时间: 2006-8-8 10:17

src和dest应该都是16bit的地址,定义成byte类型肯定不能完整copy
如果使用codewarrior编写的话,可以直接引用C语言库中的函数, memcpy2,原型在string.h头文件中

这里还有一个写好的函数,供你参考
void CopyToRam(unsigned int *dest, unsigned int *source, unsigned int count)
{
do
{

*dest++ = *source++;

} while(--count);

}
作者: qutao88    时间: 2006-8-8 10:28

现在用的不是CW,是一家公司开发的一个工具,可是dest和source如何指到实际的地址中,就这点不明白了,CW用的不熟,实在抱歉,因为没有他的调试工具
作者: strongchen    时间: 2006-8-8 10:59

直接赋值就可以了。
作者: qutao88    时间: 2006-8-8 11:30

就是给dest和source直接赋相应地址值,我好担心,都好几天了,停在这里,动不了
很想用CW,大家都用这个,也好交流,可是没有办法了
作者: strongchen    时间: 2006-8-8 11:33

什么动不了?不能赋值?
作者: qutao88    时间: 2006-8-8 11:46

有些不明白怎么个赋值方法,是直接给dest和source赋地址的值吗?就是这个地方不会了,走不下去,
希望你能多指点些,谢谢了,
qutao713@163.com
作者: guantingwei    时间: 2006-8-8 12:55

如果你用C,这又有什么关系?
将数据的地址转换为指针传递就是了……搞不明白什么停在这里不动了
作者: qutao88    时间: 2006-8-8 13:25

用C语言如何把数据写到指定的flash或ram的地址里去,就是怎么传递一个确切的地址值,然后把数据写进去

作者: qutao88    时间: 2006-8-8 13:26

很想看个例子,或者大给明确指点一下了
作者: strongchen    时间: 2006-8-8 14:56

我这有个基于CodeWarrior的例子,希望对你有所帮助:

typedef void (*CallaFun)(void);

unsigned char FunInRam[10];

void TestFunction(void){
asm NOP;
asm NOP;
}

void CopyToRam(void){
char i=8;
char *Ps, *Pd;

Ps = (char *)&TestFunction;
Pd = (char *)&FunInRam;

do{
*Pd++ = *Ps++;
} while(--i);
}

void main(void) {

CopyToRam(); /*Copy code to RAM*/

((CallaFun)&FunInRam)(); /* Call code in RAM */

for(;;) {
} /* loop forever */
}

作者: seuafu2005    时间: 2006-8-8 15:03

假定你把0x2000开始的flash的内容copy到0x100地址的ram就这样写
CopyToRam((unsigned int *)0x100,(unsigned int *)0x2000,20);
作者: qutao88    时间: 2006-8-8 15:08

谢谢版主!
如果我要把flash中4000开始的30B的数据拷到ram中2000开始的区域中,怎么赋这个地址值呢?

就是说如何把4000给PS,把2000给Pd
作者: strongchen    时间: 2006-8-8 15:29

这样就可以了:

Ps = (char *)0x4000;
Pd = (char *)0x2000;

作者: qutao88    时间: 2006-8-9 10:39

多谢版主,




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0