标题: 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 |