DSP2812 关于FLASH TO RAM
ramfuncs: LOAD=FLASHD,PAGE=0 ? 这个就是定义和赋值语句,extern只是个外部声明。真正的拷贝是用拷贝函数进行的? ? ? ?? ramfuncs: 是一个段名, 赵利国对于? ?? ? ramfuncs: LOAD=FLASHD,PAGE=0? 首先、LOAD=FLASH是指,把ramfuncs这个段装载到FLASHD这个位置(即allocation). 其次、RUN=RAML0,PAGE=0表示ramfuncs这个段将在RAML0这个位置(即allocation)运行. LOAD_START(_RamfuncsLoadStart)首先表示定义了RamfuncsLoadStart这个变量, 其次LOAD_START又将装载(LOAD)ramfuncs这个段的区域(即FLASHD的一个区域)的开始(START)地址赋给了RamfuncsLoadStart;LOAD_END则将装载(LOAD)ramfuncs这个段的区域的结束地址赋给了RamfuncsLoadEnd。 而RUN_START,将ramfuncs这个段运行空间(即RAML0的一个区域)的首地址赋给了RamfuncsRunStart。从而才有了后面的. 在这里LOAD_START就决定要从FLASH 复制到RAM程序的源首地址,而RUN_START决定了要复制到RAM中的运行的?目的首地址。从MemCopy()函数开始从FLASH装载区首地址将程序依次复制到运行区相应地址。 #pragma CODE_SECTION(epwm1_timer_isr,"ramfuncs"); #pragma CODE_SECTION(epwm2_timer_isr,sans-serif; font-size:14px"> #pragma CODE_SECTION(epwm3_timer_isr,sans-serif; font-size:14px"> MemCopy(&RamfuncsLoadStart,&RamfuncsRunStart); 其中 void MemCopy(Uint16 *SourceAddr,Uint16* SourceEndAddr,Uint16* DestAddr) { ??? while(SourceAddr < SourceEndAddr) ??? { ?????? *DestAddr++ = *SourceAddr++; ??? } ??? return; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |