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.

TMS320F28027: 我现在的项目程序下载到flash运行的时候再搬运到RAM,请问是不是相关函数都需要使用#pragma CODE_SECTION(XXX,"ramfuncs");把有关函数定义到flash区那?

Part Number: TMS320F28027

我现在的项目程序下载到flash运行的时候再搬运到RAM,请问是不是相关函数都需要使用#pragma CODE_SECTION(XXX,"ramfuncs");把有关函数定义到flash区那?

我看到一个公司的TI芯片的例子就是把所有使用到的函数使用#pragma CODE_SECTION(XXX,"ramfuncs");定义到CODe里面 具体如下:

#pragma CODE_SECTION(Common_PI_Regulator_Update,"ramfuncs");
#pragma CODE_SECTION(LPF,"ramfuncs");
#pragma CODE_SECTION(zhihui,"ramfuncs");
#pragma CODE_SECTION(BoostControl, "ramfuncs");
#pragma CODE_SECTION(ADsample, "ramfuncs");
#pragma CODE_SECTION(ProJudge, "ramfuncs");
#pragma CODE_SECTION(alarm, "ramfuncs");
#pragma CODE_SECTION(Boostcalc, "ramfuncs");
#pragma CODE_SECTION(RelayCntrUpdate, "ramfuncs");
#pragma CODE_SECTION(GPIOInterface, "ramfuncs");
#pragma CODE_SECTION(filter501, "ramfuncs");
#pragma CODE_SECTION(FOC1_ISR,"ramfuncs");
#pragma CODE_SECTION(InitFlash, "ramfuncs");

设置把AD采用的中断函数FOC1_ISR都使用上述方法,请问这样做有什么好处?

按照以前同事说这样做的话使用 AdcOffsetSelfCal();     // Adc Offset Self Calibrate不会卡死  这是为什么?

谢谢!

  • 首先要明白,将程序从flash搬运到ram运行的目的是为了加快程序运行时间,因为程序在ram中运行的速度比在flash中运行的速度快很多。因此,烧写到flash之后,对于一些对执行时间要求比较高的程序段就需要把他们搬运到ram运行,比如一些中断函数,delay_us函数等等。另外就是flashAPI函数,这个函数规定必须搬运到ram运行。

    除上述的这些,对于一些执行时间要求不高的程序就没有必要搬运了。当然,如果ram资源足够的情况下搬运到ram也可以,甚至整个程序搬运到ram运行都行。

  • 您好!请教一下哪些是flashAPI函数?官方的AD采样的C文件里面中的这个函数void AdcOffsetSelfCal()是不是就是flashAPI函数?

    还有怎么看程序编译下载后占用的RAM和FLASH的大小?谢谢!

  • 不是,AdcOffsetSelfCal()是用于ADC偏移校准的。flashAPI有专门的库,是用于芯片运行的时候写入flash的

    芯片空间占用的话可以通过CCS的view - memory browser查看