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不会卡死 这是为什么?
谢谢!
Green Deng:
首先要明白,将程序从flash搬运到ram运行的目的是为了加快程序运行时间,因为程序在ram中运行的速度比在flash中运行的速度快很多。因此,烧写到flash之后,对于一些对执行时间要求比较高的程序段就需要把他们搬运到ram运行,比如一些中断函数,delay_us函数等等。另外就是flashAPI函数,这个函数规定必须搬运到ram运行。
除上述的这些,对于一些执行时间要求不高的程序就没有必要搬运了。当然,如果ram资源足够的情况下搬运到ram也可以,甚至整个程序搬运到ram运行都行。
,
jun liu:
您好!请教一下哪些是flashAPI函数?官方的AD采样的C文件里面中的这个函数void AdcOffsetSelfCal()是不是就是flashAPI函数?
还有怎么看程序编译下载后占用的RAM和FLASH的大小?谢谢!
,
Green Deng:
不是,AdcOffsetSelfCal()是用于ADC偏移校准的。flashAPI有专门的库,是用于芯片运行的时候写入flash的
芯片空间占用的话可以通过CCS的view – memory browser查看