CCS中要用到rts2800_ml.lib,这个库中包含了sin、cos等三角函数与+ - × / 等数学运算的函数,我现在想把我程序中用到的这些函数,放到RAM中以提高运行速度,我自己的程序与函数,我可以把它们放到RAM中,而库中的这些函数不能用同样的方法完成,请问应该怎样做呢?谢谢!
noaming:
调用该库的程序,放在RAM中,该程序就是在ran中执行的。。。可否详细描述一下
joe zhou1:
回复 noaming:
您讲的是对的。我现在的问题是:该库的程序,我不能放到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中执行呢?
noaming:
回复 joe zhou1:
你使用的:#pragma CODE_SECTION(cos, "ramfuncs"),这个貌似没用到啊?就是说调用cos函数的这部分程序是放在那里了?你把调用的程序部分,作为一个整体,放在ram里试试。
joe zhou1:
回复 joe zhou1:
另外,我查看.MAP文件,我用到的rts2800_ml.lib中的函数,总length是0x07A0,共23个函数;但是ramfuncs空间被占用的数量是0x04b2,所以,我认为这23个函数仍然是在FLASH中运行的,您看对吗?
joe zhou1:
回复 joe zhou1:
程序中有个这样的声明:#pragma CODE_SECTION(FFT, "ramfuncs");FFT中是调用了cos函数的
joe zhou1:
回复 joe zhou1:
我做了这样的函数:
#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)
joe zhou1:
回复 noaming:
感谢您的耐心解答,但您讲的这段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加上,编译总是有错误,您能不能再详细指导,谢谢!