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.
Hi
I am having a problem copying parts from the flash to the ram. i looked on several guides that you have:
*TI Linker Command File Primer - TI Linker Command File Primer
* Running an Application from Internal Flash Memory on the TMS320F28xxx DSP.
*TMS320F28002x Flash API
*Copying Compiler Sections From Flash to RAM on the TMS320F28xxx DSCs
unfortunately, i am still having trouble. every time i try one of the methods of copying, my program stuck before main or somewhere in illegal operation trap.
scenario 1:
example1 { file1.obj file2.obj } > FLASH_BANK0_SEC2 myfunc1 : LOAD = FLASH_BANK0_SEC2, RUN = RAMLS4
this isn't working. i use the #pragma CODE_SECTION to run my functions and i can see they have been copied but the program getting stuck too. by the way my program is written in cpp.
scenario 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)
this option isn't working. the program get stuck.
another question about this scenario: when using the symbols inside the LOAD_START, LOAD_SIZE and etc. i need to declare them inside my code?
you have an example with .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)
the symbols RamfuncLoadStart, RamfuncsLoadSize and etc. they are declared inside the code.
when i try to use them again for my sections, i will get a warning "absolute symbol redefined".
i guess i don't understand the proper use for them.
another few points:
* the file "f28002x_codestartbranch.asm" is added to my project.
* when my program is running from ram it works. see example linker file below:
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
* when my program is running from flash it works. see example linker file below:
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)
Thanks
Yoav
Hi Yoav,
It is a holiday here in USA. We will review and get back to you in couple of days.
Meanwhile, please take a look at below FAQ - it may help:
How to modify an application from RAM configuration to Flash configuration?: https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/878674
Thanks and regards,
Vamsi
Hi Yoav,
1) Did that FAQ help solve the problem for you?
2) You might have noticed that those variables are defined in device.h file. Did you call memcpy() to copy the flash mapped content to RAM?
Thanks and regards,
Vamsi