Board logo

标题: 如何从C中调用ram内的程序[原创] [打印本页]

作者: forthlab    时间: 2005-6-16 12:04     标题: 如何从C中调用ram内的程序[原创]

在作flash程序时,我准备将程序放在ram内,再从c调用:

fun()

unsigned char ram_fun[];
//填充ram_fun;

asm{
       BSR @ram_fun;      //这里出错!!为何?
    }



但汇编的调用语句出错。请问如何解决?
作者: seuafu2005    时间: 2005-6-16 12:27

用jsr试试,bsr的寻址范围就8位偏移量
作者: 8808beter    时间: 2005-6-16 16:13

语句错误!
#define P_AddressInRAM  0x????
asm{JSR     P_AddressInRAM}
作者: forthlab    时间: 2005-6-16 16:19

用JSR也一样出错!
另外,ram_fun[]的地址我也不知道,只有编译器知道,我只要在fun()内调用RAM的函数,调用fun()后,ram_fun[]能自动释放。
作者: libingqiang    时间: 2005-6-16 19:45

具体怎样做呀?能不能介绍一下
作者: forthlab    时间: 2005-6-18 12:03

搞定了!

asm{
    LDHX @ram_fun;
    JSR ,X;
}
作者: tuorongou    时间: 2005-7-7 14:17     标题: 查错

我在写擦除程序时,是以下这样的,但编译时,引用汇编出错,请高手指教:
void EarseFlash(unsigned int addr)
  {
    faddr=addr;                   //擦除flash的首地址
   
    asm{
      ldhx @DoEarseFlash   //擦除程序的首地址->HX
      sthx pbase           //HX->内存变量pbase
      ldhx @EarseFlash_END  //擦除程序的末地址->HX
      sthx pend           //HX->内存变量pend
    }            
    memcpy((void *)PrgOfRam,(void *)pbase,pend-pbase); //编译时这句出现警告
    //在RAM区执行擦除程序
    asm{
        ldhx @PrgOfRam             //擦除程序在RAM区的首地址
      jsr ,X
      }                        //执行RAM区域的擦除程序
  }
作者: tuorongou    时间: 2005-7-11 08:26


作者: seuafu2005    时间: 2005-7-11 10:03

memcpy() 出现警告是没有把头文件包含进去,我记得应该是包含string.h
引用汇编出错是哪里出错?是编译器编译没有通过?
你的程序,擦除是在RAM里面运行,但是你的擦除地址参数是怎么传递进去的?


[此贴子已经被作者于2005-7-11 10:03:34编辑过]






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