CCS中要用到rts2800_ml.lib,这个库中包含了sin、cos等三角函数与+ - × / 等数学运算的函数,我现在想把我程序中用到的这些函数,放到RAM中以提高运行速度,我自己的程序与函数,我可以把它们放到RAM中,而库中的这些函数不能用同样的方法完成,请问应该怎样做呢?谢谢!
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.
您讲的是对的。我现在的问题是:该库的程序,我不能放到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(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)
感谢您的耐心解答,但您讲的这段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加上,编译总是有错误,您能不能再详细指导,谢谢!