- UID
- 124450
- 性别
- 男
|
本人刚接触freescale单片机的新手,我现在在用HC908SR12作实验。以前一直从事51的,我从网上下载了著名的“匠人笔记”里的那篇擦除/写Flash的程序,确实完全按照手册上说的步骤进行flash操作,但那段关键的把Flash中的程序拷贝到RAM中执行的程序在编译时还是有点问题:
faddr=addr; //擦除flash的首地址
//将擦除程序从Flash区拷贝到RAM区PrgOfRam
asm("ldhx #_DoEarseFlash"); //擦除程序的首地址->HX
asm("sthx _pbase"); //HX->内存变量pbase
asm("ldhx #_EarseFlash_END"); //擦除程序的末地址->HX
asm("sthx _pend"); //HX->内存变量pend
memcpy((void *)PrgOfRam,(void *)pbase,pend-pbase);
//在RAM区执行擦除程序
asm("ldhx #_PrgOfRam"); //擦除程序在RAM区的首地址
asm("jsr ,X"); //执行RAM区域的擦除程序
比如上面这条指令asm("ldhx #_DoEarseFlash");,编译时不认识DoEarseFlash,Codewarrior的编译错误提示为:Immediate/Global address expected,意思应该为ldhx后面应指明为具体地址或者全局地址,可能是DoEarseFlash没有声明为全局函数的缘故,但无论我是在main.c里声明并定义,还是在我的MC68HC908SR12.h里声明,都出现这个编译错误。其它变量如pbase,PrgOfRam都一样,编译时都不认识,当然在.map文件里也看不到这些变量和函数的具体地址,我不知道这些变量和函数在MC68HC908SR12.h.h(他的GP32C.h)文件里怎么声明?能否给个实例!
我已经给匠人Email了,可能他忙暂时没有回复!
版主和各位高手能否帮帮我!谢谢!
感觉freescale的Flash比起51里的如C8051F系列单片机来,麻烦多了! |
|