首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

请教关于将Flash中的函数拷贝至Ram 并调用[求助]

请教关于将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. 到底应该如何应用函数名?


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


 


 

我是这样写的
#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;
}
}
顶一下,希望大家帮帮忙
Ramarea本身就是可以代表一个地址的
你可以用asm jmp Ramarea;跳到ram去执行
copy到ram中去的程序是一个完整的函数,包含了返回代码
返回列表