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

[求助]有关将FLASH编程程序复制到RAM中,并运行的问题

[求助]有关将FLASH编程程序复制到RAM中,并运行的问题

版主大人,如题,程序如下,请指点一下迷津吧!拜谢。。。
问题1:如何确定被复制到RAM中的FLASH编程程序的大小,就算用调用函数名称作为指针也要确定复制多大的一段程序吧?
问题2:如何调用复制到RAM中的FLASH编程程序?用“asm JSP 0x200A;”出现的错误是“Error : C10011: ':' expected to delimit label”用“asm CALL 0x200A;”出现的错误是"Error : C12020: Unknown Operand Combination:
Instr:CALL/Opr1:Ext/Opr2:NoOp.
问题3:返回的asm RTC;写道什么地方?

#include /* common defines and macros */
#include /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dp256b"

unsigned int *prog_flash,*copy_to_ram;
#define START_COPY_TO_RAM_ADDR (volatile unsigned int*)(0x200A)
#define MAX_COPY_TO_RAM_ADDR (volatile unsigned int*)(0x2500)
int *Ps;

void FlashProg();

/***********************slave_program******************************/
void delay_1bustime(unsigned int bustime) {
unsigned i = 0;
for(i = 0;i<= bustime ;i++){
}
}

void main(void) {
EnableInterrupts;

Ps = (volatile unsigned int*)&FlashProg;
copy_to_ram = START_COPY_TO_RAM_ADDR;//给这两个地址赋初值

while(copy_to_ram <= MAX_COPY_TO_RAM_ADDR){//这里暂时给RAM划定一个范围

*copy_to_ram++ = *Ps++;
}

asm JSP 0x200A;

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

/************************slave_FlashProg****************************/
void FlashProg(void) {
FLASH编程程序,仿照EEPROM编程程序而来,没有什么特别之处,先不写了。
}
飞思卡尔带我走进神奇的单片机世界
请参考这个帖子:

http://bbs.eccn.com/dispbbs.asp?boardID=3&RootID=97749&ID=97749
海纳百川  有容乃大
这个帖子更简单一些:

http://bbs.eccn.com/dispbbs.asp?boardID=3&RootID=104074&ID=104074
海纳百川  有容乃大
1、函数大小可以通过返汇编来确定,确定大小后再分配一个稍大的RAM缓冲区作为目标
2、通过地址调用函数使用 ((void(*)(void))START_COPY_TO_RAM_ADDR)();

拷贝函数:
byte* Copy(byte *dst,const byte *src,word len) {
while(len--) {
*dst++=*src++;
}
return dst;
}
拷贝+执行过程:
((void(*)(void))Copy((byte*)START_COPY_TO_RAM_ADDR,(const byte*)FlashProg,MAX_COPY_TO_RAM_ADDR-START_COPY_TO_RAM_ADDR))();

---------------------------------
精通S12,精通cw,有license 欢迎交流
onionchen1983hotmail.com
51,freescale,c,asm,protel,fpga
返回列表