Board logo

标题: 请教关于将Flash中的函数拷贝至Ram 并调用[求助] [打印本页]

作者: zhangyi65536    时间: 2006-5-5 13:46     标题: 请教关于将Flash中的函数拷贝至Ram 并调用[求助]

请问楼主 在以前的帖子中有如下一段


如何从C中调用ram内的程序[原创]
在作flash程序时,我准备将程序放在ram内,再从c调用: fun() { unsigned char ram_fun[]; //填充ram_fun; asm{ BSR ram_fun; //这里出错!!为何? }} 但汇编的调用语句出错。请问如何解决?


搞定了! asm{ LDHX ram_fun; JSR ,X; }


我像上面说的使用,编译器总是说 ram_fun 的地址不存在。还有HC12 中没有LDHX指令,它是不是LDX ,@是什么意思 ,HC12汇编中也没有它呀?到底如何将ram_fun 的地址复给X? 我用立即数是好使的,例如我将ram_fun 定义在$2000,然后 用asm{ldx #$2000; jsr 0,x;}好使,但就是不能像上面那个帖子中那样使,为什么?


还有 在以前的帖子中还有如下一段


没有啊
用指针  楼上的怎么copy的?

void CopyInRAM(void)
{
word *srcPtr, *dstPtr;
word count;

srcPtr = (unsigned int *)0xFD00;

dstPtr = (unsigned int *)0x0340;

for (count = 0; count < 250; count++, dstPtr++,srcPtr++)
{
*dstPtr = *srcPtr;
}
}


啊 知道了 可以直接调用函数地址


srcPtr = (unsigned int *)&func;


我像上面最后一句那样使


定义函数 void flashf(void);


unsigned int *p;


p=(unsigned int *)& flashf;


 编译器报告Non standard conversion used. 到底应该如何应用函数名?


拜托有谁知道回一下,谢谢!


 


 


作者: zhangyi65536    时间: 2006-5-5 14:08

我是这样写的
#pragma CODE_SEG COPY_FLASH
void flashf(void);

#pragma CODE_SEG MAIN_FLASH
void main(void) {
unsigned char i;
unsigned int Ramarea[];
unsigned int *s;
unsigned int *d;
//s=(unsigned int*)&flashf; //这样 写错误
//d=(unsigned int *)Ramarea;
d=(unsigned int*) 0x2000;
s=(unsigned int*)0xf100; //这样写可以
for(i=0;i<10;i++)
{
*d=*s;
d++;
s++;
}
asm
{
ldx #$2000; //这样写可以
//ldx @Ramarea;//这样写错误
//ldx #Ramarea;//这样也是错误
jsr 0,x;
}
for(;;) {} /* wait forever */
}
#pragma CODE_SEG COPY_FLASH
void flashf(void)
{
asm
{
NOP;
NOP;
NOP;
NOP;
rts;
}
}

作者: zhangyi65536    时间: 2006-5-6 09:16

顶一下,希望大家帮帮忙
作者: seuafu2005    时间: 2006-5-8 11:15

Ramarea本身就是可以代表一个地址的
你可以用asm jmp Ramarea;跳到ram去执行
copy到ram中去的程序是一个完整的函数,包含了返回代码




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