This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

28335的定点除法怎么拷贝到ram执行



 

我现在做了一个28335控制BLDC的程序,其中涉及到浮点除法和正余弦的,我都通过更改control suite的fastrts库源码里的.text成我自己定义的ram段的方式,将这些算法移动到了ram里执行。但是定点除法我不知道该怎么拷贝到ram执行?

因为我的初始化比较多,因此暂时不考虑将整个.TEXT拷贝到ram里。希望专家帮忙解答一下,不胜感激! 

  • 在你的程序里加这句  #pragma CODE_SECTION(InitFlash, "ramfuncs");

    1. InitFlash是你要放在RAM里运行的函数的函数名。
    2. ramfuncs是你在CMD里定义的一块RAM空间。你在cmd文件中可以找到
    3. 在main里添加MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);注意其中的三个形参要用extern Uint16 RamfuncsLoadStart, RamfuncsLoadEnd, RamfuncsRunStart;声明一下。

  •   谢谢专家的回复,但是这个方法我已经在应用了。我的程序中断里用到的一系列函数我都通过这个方法copy到了内存里没问题。

     但是定点除法不一样,定点除法的特点是编译器自动调用,我找不到它的函数名在哪里,估计它在C2000编译器的某个库里。

    而且他应该是一个汇编语言编写的函数,和浮点除法一样这个汇编函数的头肯定有一个.TEXT这样的伪指令,导致它被添加到了.TEXT段里。

    因为它不是我定义的函数,又不像浮点库可以通过改变源代码里伪指令然后重新构建的方式来改变汇编段。因此就不知道该怎么做了。

     

     

  • Kevin,

    如果是编译后会生成.map文件,然后可以看到会生成很多obj文件

    找到该函数对应所在的obj文件,在cmd中用下面的语法

     boot               LOAD = FLASHA,      

     RUN = RAML0,      

    LOAD_START(_RamfuncsLoadStart),      

    LOAD_SIZE(_RamfuncsLoadSize),      

     RUN_START(_RamfuncsRunStart),      

     PAGE = 0

    {     -l rts2800.lib<boot.obj>(.text)      /**/

     }

    但如果是CCS编译器内嵌的函数的话,我暂时觉得没办法搬。除非你自己写一个定点除法的函数。

    Eric