标题:
[求助]有关将FLASH编程程序复制到RAM中,并运行的问题
[打印本页]
作者:
yjbmtc
时间:
2007-4-17 11:00
标题:
[求助]有关将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编程程序而来,没有什么特别之处,先不写了。
}
作者:
strongchen
时间:
2007-4-17 16:34
请参考这个帖子:
http://bbs.eccn.com/dispbbs.asp?boardID=3&RootID=97749&ID=97749
作者:
strongchen
时间:
2007-4-17 16:36
这个帖子更简单一些:
http://bbs.eccn.com/dispbbs.asp?boardID=3&RootID=104074&ID=104074
作者:
onion2829
时间:
2007-4-20 11:59
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
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0