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.

CCS 库函数



CCS中要用到rts2800_ml.lib,这个库中包含了sin、cos等三角函数与+ - ×  / 等数学运算的函数,我现在想把我程序中用到的这些函数,放到RAM中以提高运行速度,我自己的程序与函数,我可以把它们放到RAM中,而库中的这些函数不能用同样的方法完成,请问应该怎样做呢?谢谢!

  • 调用该库的程序,放在RAM中,该程序就是在ran中执行的。。。可否详细描述一下

  • 您讲的是对的。我现在的问题是:该库的程序,我不能放到RAM中。我想用这个方法:#pragma CODE_SECTION(ADCpick, "ramfuncs");ADCpick是我自己编制的程序,然后在CMD文件中,定义好ramfuncs的RAM空间,程序开始执行的时候,用MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);把ADCpick从FALSH拷贝到RAM中,那么ADCpick就在RAM中执行了。而不经常用到的函数,仍然在FALSH中运行。

    现在的问题是:用同样的方法,该库中的程序,没有放到RAM中去。比如:#pragma CODE_SECTION(cos, "ramfuncs"),是想把cos函数放到RAM中执行,编译、连接都可以通过,但看.MAP文件的话,有没有#pragma CODE_SECTION(cos, "ramfuncs"),这条语句,ramfuncs的空间占用的大小没有发生变化,所有,我认为cos没有放到RAM中。

    另外,TI的文档上,要求在函数体之前要定义#pragma CODE_SECTION(cos, "ramfuncs"),那么cos函数在库中已经做好,没有办法在函数体之前声明,那么是笔试就没有办法让cos函数放在RAM中执行呢?

  • 你使用的:#pragma CODE_SECTION(cos, "ramfuncs"),这个貌似没用到啊?就是说调用cos函数的这部分程序是放在那里了?你把调用的程序部分,作为一个整体,放在ram里试试。

  • 另外,我查看.MAP文件,我用到的rts2800_ml.lib中的函数,总length是0x07A0,共23个函数;但是ramfuncs空间被占用的数量是0x04b2,所以,我认为这23个函数仍然是在FLASH中运行的,您看对吗?

  • 程序中有个这样的声明:#pragma CODE_SECTION(FFT, "ramfuncs");FFT中是调用了cos函数的

  • 我做了这样的函数:

    #pragma CODE_SECTION(TEST, "ramfuncs");

    void TEST()

    {

    flaot i;

    i=acos(5);

    }

    acos在其他任何地方都没有用到的。在程序加入这个函数之前,ramfuncs占用的大小是0x04b2;加入这个程序后,ramfuncs的大小是0x4bb;而acos本身的代码量大小是0xae,所以我认为acos没有放到RAM中。.map中是这样的   003f6903    000000ae     rts2800_ml.lib : acos.obj (.text)

  • 嗯,   003f6903    000000ae     rts2800_ml.lib : acos.obj (.text) 

    说明acos.obj (.text)的位置并不在ram中。

    换一种方法,在SECTION中利用伪命令,

    SECTIONS
    {
    .text:{ file1.obj(.text) file2.obj(.text) file3.obj(.text,cinit)}  load=加载地址 run =运行地址
    }

    等上述格式,单独把acos.obj的部分放在ran中试试看。

  • 感谢您的耐心解答,但您讲的这段SECTION伪命令,我确实没有看懂。我的CMD文件中,已经有如下定义:

    SECTIONS
    {
    .cinit : > FLASHJ PAGE = 0
    .pinit : > FLASHJ, PAGE = 0
    .text : > FLASHA, PAGE = 0
    codestart : > BEGIN PAGE = 0
    ramfuncs : LOAD = FLASHI,
    RUN = RAML0,
    LOAD_START(_RamfuncsLoadStart),
    LOAD_END(_RamfuncsLoadEnd),
    RUN_START(_RamfuncsRunStart),
    PAGE = 0

    csmpasswds : > CSM_PWL PAGE = 0
    csm_rsvd : > CSM_RSVD PAGE = 0

    .stack : > RAMM0 PAGE = 1
    .ebss : > RAMH0 PAGE = 1
    .esysmem : > RAMH0 PAGE = 1
    .econst : FLASHH PAGE = 0
    .switch : > FLASHA PAGE = 0
    IQmath : > FLASHC PAGE = 0
    IQmathTables : > ROM PAGE = 0, TYPE = NOLOAD
    .reset : > RESET, PAGE = 0, TYPE = DSECT
    vectors : > VECTORS PAGE = 0, TYPE = DSECT

    }

    无论怎么尝试,也没有把acos加上,编译总是有错误,您能不能再详细指导,谢谢!