F2812程序从Flash搬到RAM中运行
【非本人原创】
第一步:
// Functions that will be run from RAM need to be assigned to
// a different section.
This section will then be mapped using
// the linker cmd file.
#pragma CODE_SECTION(EPwm1_timer_isr,"ramfuncs");
#pragma CODE_SECTION(EPwm2_timer_isr,"ramfuncs");
MAIN()
{
// These are defined by the linker (see F2808.cmd)在CMD里面定义的变量
extern Uint16 RamfuncsloadStart;
extern Uint16 RamfuncsloadEnd;
extern Uint16 RamfuncsRunStart;
User specific code,enable interrupts:
// copy time critical code and Flash setup code to RAM
// This includes the following ISR functions: EPwm1_timer_isr(),EPwm2_timer_isr()
// EPwm3_timer_isr and and InitFlash();
// symbols are created by the linker. Refer to the F2808.cmd file.
// Call Flash Initialization to setup flash waitstates
// This function must reside in RAM
}
第二步:将要从FLASH里面加载到RAM的函数定义到"ramfuncs"
// Functions that will be run from RAM need to be assigned to
// a different section.
This section will then be mapped to a load and
// run address using the linker cmd file.
#pragma CODE_SECTION(InitFlash,"ramfuncs");
第三步:
CMD文件:
MEMORY
{
}
SECTIONS
{
}
总结:在MAP文件里:从FLASH加载到RAM运行的程序会有二个实际的存储空间,一个在FLASH里面,另一个在RAM里。ramfuncs
: LOAD = FLASHA,//指定了要加载程序存储在FLASH里面的地址段。
MAP文件里的表现:
SECTION ALLOCATION MAP
ramfuncs
0
003f65d6
0000004d
RUN ADDR = 00008000
.cinit
0
003f6623
00000019
GLOBAL SYMBOLS: SORTED ALPHABETICALLY BY Name
003f6623
_RamfuncsloadEnd
003f65d6
_RamfuncsloadStart
00008000
_RamfuncsRunStart
GLOBAL SYMBOLS: SORTED BY Symbol Address
00008000
_RamfuncsRunStart
0000801b
_DSP28x_usDelay//三个从FLASH里加载RAM里运行的程序
0000801f
_EPwm1_timer_isr
00008035
_EPwm2_timer_isr
003f65d6
_RamfuncsloadStart
003f6623
cinit
003f6623
___cinit__
程序运行上的表现:只要程序一运行到上面的三个函数,CCS程序PC指针就会指向相应RAM地址上运行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。