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.
我开发基于DSP28335+DSP/BIOS的程序,程序成功编译和链接后,将.out文件烧写到28335后,程序能正常运行。为了缩短程序运行时间,考虑到DSP28335的片内内存较小,我想把程序的.text段和.econst段从Flash加载到片外扩展RAM中运行,我参考了DSP28xxx_SectionCopy_nonBIOS.asm(SPRAAU8)和InitExtMemIf.asm( (David M. Alter)做了以下工作:
开始,在F28335_BIOS_flash.cmd定义了.text段和.econst段,
/*name PAGE 0:
ExtRAM origin:00100000 length:00080000
L67RAM origin:0000e000 length:00002000*/
.text : LOAD = FLASH_ABCDEFGH, PAGE = 0 /* Should be Flash */
RUN = ExtRAM, PAGE = 0 /* Must be CSM secured RAM */
LOAD_START(_text_loadstart),
LOAD_SIZE(_text_loadsize),
RUN_START(_text_runstart)
.econst : LOAD = FLASH_ABCDEFGH, PAGE = 0 /* Should be Flash */
RUN = ExtRAM, PAGE = 0 /* Must be CSM secured RAM */
LOAD_START(_econst_loadstart),
LOAD_SIZE(_econst_loadsize),
RUN_START(_econst_runstart)
然后,参考InitExtMemIf.asm(David M. Alter),初始化了片外扩展RAM
接着,在_c_int00之前,参考DSP28xxx_SectionCopy_nonBIOS.asm,将.text和.econst从Flash加载到片外扩展RAM中
MOVL XAR5,#_text_size ; Store Section Size in XAR5
SUBB XAR5,#1
MOVL ACC,@XAR5 ; Move Section Size to ACC
MOVL XAR6,#_text_loadstart ; Store Load Starting Address in XAR6
MOVL XAR7,#_text_runstart ; Store Run Address in XAR7
LCR copy
MOVL XAR5,#_econst_size ; Store Section Size in XAR5
SUBB XAR5,#1
MOVL ACC,@XAR5 ; Move Section Size to ACC
MOVL XAR6,#_econst_loadstart ; Store Load Starting Address in XAR6
MOVL XAR7,#_econst_runstart ; Store Run Address in XAR7
LCR copy
程序在CCS3.3中能够正常编译和链接,
In .map file, .text section is defined:
section page origin length input sections
-------- ---- ---------- ---------- ----------------
.text 0 00300f0b 00000d66 RUN ADDR = 00100000
烧写到DSP28335中,程序不能正常加载运行
我把.text改成从DSP片内的L67SARAM加载后,.econst仍从片外扩展RAM中加载,程序编译链接后能够正常加载运行。
.text : LOAD = FLASH_ABCDEFGH, PAGE = 0 /* Should be Flash */
RUN = L67SARAM, PAGE = 0 /* Must be CSM secured RAM */
LOAD_START(_text_loadstart),
LOAD_SIZE(_text_loadsize),
RUN_START(_text_runstart)
.econst : LOAD = FLASH_ABCDEFGH, PAGE = 0 /* Should be Flash */
RUN = ExtRAM, PAGE = 0 /* Must be CSM secured RAM */
LOAD_START(_econst_loadstart),
LOAD_SIZE(_econst_loadsize),
RUN_START(_econst_runstart)
但我的程序只编写了部分,如果完成整个程序,DSP28335片内RAM不能满足所有程序.text的加载,怎样解决将.text段从Flash加载到DSP28335片外扩展RAM中运行?
谢谢你的解答。我本意是想提高程序的运行速度,我的程序主要是矩阵计算,由于程序比较大,无法完全加载到内部RAM中,才想到把程序特别是.text段从Flash加载到外部RAM中来运行速度。但正如你所说,外扩 RAM 里执行初始化 外扩 RAM 的程序是悖论。理论上将程序全部从Flash加载到内部RAM中能提高运行速度,但F28335的内部内存只有34K,能够给我一些好的建议,怎么有效提高整个程序的速度。