TMS320F28377D: FLASHD如果满了,代码会往FLASHE放吗?

Part Number: TMS320F28377D

在CMD中这样分配Flash:

.text               : >> FLASHB | FLASHC | FLASHD | FLASHE      PAGE = 0, ALIGN(4)

 ramfuncs            : LOAD = FLASHD,
                         RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3,
                         LOAD_START(_RamfuncsLoadStart),
                         LOAD_SIZE(_RamfuncsLoadSize),
                         LOAD_END(_RamfuncsLoadEnd),
                         RUN_START(_RamfuncsRunStart),
                         RUN_SIZE(_RamfuncsRunSize),
                         RUN_END(_RamfuncsRunEnd),
                         PAGE = 0, ALIGN(4)

运行快的代码放在FLASHD,上电会从FLASHD load 至 RAM运行,.text也会往FLASHD放。

1、如果FLASHD满了,我有代码需要优化,#pragma CODE_SECTION(cpu_timer0_isr, "ramfuncs");那cpu_timer0_isr会往FLASHE放吗?

2、.text               : >> FLASHB | FLASHC | FLASHE | FLASHF      PAGE = 0, ALIGN(4),text跳过FLASHD,这样可以吗?

  • 您好,
    已经收到了您的案例,调查需要些时间,感谢您的耐心等待。

  •  ramfuncs            : LOAD = FLASHD,

    改成

     ramfuncs            : LOAD =  FLASHB | FLASHC |  FLASHD | FLASHE | FLASHF

    不用关心要放在RAM运行的代码当前放在哪个扇区,系统会自动安排这些函数的位置。

    查看.Map文件可以发现,CCS生成工程后自动将ramfuncs区段的函数按顺序排列在RamfuncsLoadStart位置开始的FLASH中,系统上电后需自行将RamfuncsLoadStart直到RamfuncsLoadEnd所在FLASH代码拷贝到RamfuncsRunStart开始的RAM区域。

    CCS生成工程后
    abs   00001cde  RamfuncsLoadSize                  
    abs   00001cde  RamfuncsRunSize                   
    abs   00008000  RamfuncsRunStart                  
    abs   00009cde  RamfuncsRunEnd                    
    abs   00088960  RamfuncsLoadStart                 
    abs   0008a63e  RamfuncsLoadEnd  
    
    
    
    .TI.ramfunc 
    *          0    00088960    00001cde     RUN ADDR = 00008000
                      00088960    000005f0     Task_001.obj (.TI.ramfunc)
                      00088f50    000004b7     Task_002.obj (.TI.ramfunc)

  • 谢谢您的回复