TMS320F2812三种运行方式在SRM控制中的应用

段生成完毕,还需要在CMD文件中将其映射到RAMH0上,即所谓的H0启动模式。之后程序就会照流程直接在RAMH0上运行程序,实现RAM调试运行的方式。

1.2 Flash直接运行
Flash直接运行指的是将用户编写的代码烧写到Flash,并在Flash初始化完成后,用户代码运行于Flash上的一种运行方式。
与RAM调试运行相比,Flash直接运行的程序流程多了一个Memory_copy的环节,即code_start-> wd_disable-> c_int00-> main()-> Memory_copy。这是因为要想在Flash上直接运行程序,就需要配置好Flash控制寄存器(FACTIVEWAIT、FBANKWAIT等)。但这些寄存器是不能在Flash上直接配置的,所以只能将包含这些配置语句的Flash初始化函数InitFlash()搬运到RAM中运行。
InitFlash()的搬运是通过指令“#pragma CODE_SECTION(InitFlash,“ramfunes”)”和CMD文件配置实现的。前者将函数InitFlash()映射到段ramfuncs,后者在SECTIONS中作如下配置:
ramfuncs:LOAD=FLASH,PAGE=0
RUN=RAML0,PAGE=0
LOAD_START(_RamfuncsLoadStart),
LOAD_END(_RamfuncsLoadEnd),
RUN_START(_RamfuncsRunStart)
其中,RamfuncsLoadStart等为已定义好的3个外部全局变量。这样配置后,只需要在主程序main()中先调用MemCopy(Ram-funcsLoad Start,&Ramfuncs LoadEnd,&Ram funcsRunStart)将已经烧写到Flash中的初始化函数InitFlash()代码全部复制到以Ram-funcsRun
Start开头的RAM中,再调用函数InitFlash()就实现了InitFlash()的搬运。
最后需要注意的一点就是,给codestart段分配的BEGIN段需要映射到以0x3F7FF6开头的一段Flash上,用于Flash启动模式,而不再是在RAM上。如此配置之后,其他用户代码就可以在Flash上正常运行了。
评论