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.
您好
我 在将部件从闪存复制到 RAM 时遇到问题。 我看了几个指南,你有:
*TI 链接器命令文件入门- TI 链接器命令文件入门
* 从 TMS320F28xxx DSP 的内部闪存运行应用程序。
*TMS320F28002x 闪存 API
*在 TMS320F28xxx DSP 上将编译程序段从闪存复制到 RAM
可惜,我仍然有麻烦。 每次我尝试其中一种复制方法时,我的程序卡在 main 之前或在非法操作陷阱中的某个地方。
场景1:
example1 { file1.obj file2.obj } > FLASH_BANK0_SEC2 myfunc1 : LOAD = FLASH_BANK0_SEC2, RUN = RAMLS4
这不奏效。 我使用#pragma code_section 运行我的函数、我可以看到它们已被复制、但程序也会卡住。 按照我的程序用 CPP 编写的方式。
场景2:
example2 { file1.obj file2.obj } LOAD = FLASH_BANK0_SEC2 RUN = RAMLS4, LOAD_START(MyfuncsLoadStart), LOAD_SIZE(MyfuncsLoadSize), LOAD_END(MyfuncsLoadEnd), RUN_START(MyfuncsRunStart), RUN_SIZE(MyfuncsRunSize), RUN_END(MyfuncsRunEnd), ALIGN(8)
此选项不起作用。 程序会卡住。
关于这种情况的另一个问题:当 在 load_start、load_size 等中使用符号时、我需要在代码中声明它们?
有一个.TI.ramfunc 的示例:
.TI.ramfunc : LOAD = FLASH_BANK0_SEC1 RUN = RAMLS4, LOAD_START(RamfuncsLoadStart), LOAD_SIZE(RamfuncsLoadSize), LOAD_END(RamfuncsLoadEnd), RUN_START(RamfuncsRunStart), RUN_SIZE(RamfuncsRunSize), RUN_END(RamfuncsRunEnd), ALIGN(8)
符号 RamfuncLoadStart、RamfuncsLoadSize 和等在代码中声明。
当我在段中再次使用它们时、会收到"绝对符号重新定义"的警告。
我想我不明白它们的正确用法。
另外几个要点:
*文件"f28002x_codestartbranch.asm"被添加 到我的项目中。
*当 我的程序 从 RAM 运行时,它会正常工作。 请参阅以下链接器文件示例:
codestart : > BEGIN, ALIGN(8) .text : > RAMLS5 | RAMLS6 | RAMLS7, ALIGN(8) .cinit : > RAMLS4, ALIGN(8) .switch : > RAMLS4, ALIGN(8) .reset : > RESET, TYPE = DSECT /* not used, */ .stack : > RAMM1 .init_array : > RAMLS4, ALIGN(8) .bss : > RAMLS4 .bss:output : > RAMLS4 .bss:cio : > RAMGS0 .const : > RAMLS4, ALIGN(8) .data : > RAMLS4 .sysmem : > RAMLS4
*当我的程序 从 闪存运行时,它会工作。 请参阅以下链接器文件示例:
codestart : > BEGIN, ALIGN(8) .text : >> FLASH_BANK0_SEC2 | FLASH_BANK0_SEC3 | FLASH_BANK0_SEC4, ALIGN(8) .cinit : > FLASH_BANK0_SEC1, ALIGN(8) .switch : > FLASH_BANK0_SEC1, ALIGN(8) .reset : > RESET, TYPE = DSECT /* not used, */ .stack : > RAMM1 .init_array : > FLASH_BANK0_SEC1, ALIGN(8) .bss : > RAMLS4 .bss:output : > RAMLS4 .bss:cio : > RAMGS0 .const : > FLASH_BANK0_SEC1, ALIGN(8) .data : > RAMLS4 .sysmem : > RAMLS4 //.TI.ramfunc : > RAMGS0 ramgs0 : > RAMGS0 /* Allocate IQ math areas: */ IQmath : > RAMLS4 IQmathTables : > RAMLS4 .TI.ramfunc : LOAD = FLASH_BANK0_SEC1 RUN = RAMLS4, LOAD_START(RamfuncsLoadStart), LOAD_SIZE(RamfuncsLoadSize), LOAD_END(RamfuncsLoadEnd), RUN_START(RamfuncsRunStart), RUN_SIZE(RamfuncsRunSize), RUN_END(RamfuncsRunEnd), ALIGN(8)
谢谢
约阿夫
尊敬的 Yoav、
这是一个在美国的假期。 我们会在几天后进行审查并回复您。
同时、请查看以下常见问题解答-它可能会有所帮助:
如何将应用程序从 RAM 配置修改为闪存配置?: https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/878674
谢谢。此致、
瓦姆西
尊敬的 Yoav、
1) 1)该常见问题解答是否有助于为您解决该问题?
2) 2)您可能已经注意到这些变量是在 device.h 文件中定义的。 您是否调用 memcpy()将闪存映射内容复制到 RAM?
谢谢。此致、
瓦姆西
您好,Vamsi
是的、常见问题解答可以帮助我。
感谢您的帮助
约阿夫