如何将Keil RealView MDK-ARM工具链链接到一个区域以便在内存中的一个区域中执行,但是将它存储在另一个区域中?

时间:2010-08-10 04:24:47

标签: embedded keil

我正在编写一个更新闪存的程序。当我正在擦除/写入闪存时,我想从RAM执行。理想情况下,我将我的代码链接到存储在闪存中的执行区域,在启动时我会复制到它所链接的RAM位置。

我不包含任何正常生成的C / C ++初始化代码,所以我不能只将我的函数标记为__ram。

如果我可以执行上述操作,那么调试器符号将与复制到RAM代码相关,并且我可以像往常一样调试业务。

我认为OVERLAY / RELOC的某些内容可能会有所帮助,但我不确定。

谢谢,

1 个答案:

答案 0 :(得分:0)

也许您的应用程序代码可以手动完成。像

这样的东西
  pSourceAddr = &FunctionInFlash;
  pDestAddr = &RamReservedForFunction;
  while(pSourceAddr <= (&FunctionInFlash+FunctionSize))
  {  *pDestAddr++ = *pSourceAddr++; 
  };

  typedef int (*RamFuncPtr)(int arg1); //or whatever the signature is..

 result = ((RamFuncPtr)&RamReservedForFunction)(argument1);

您应该能够获取链接器定义文件以导出FunctionInFlashRamReservedForFunction地址的符号。