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.

How to fix Link Error: conflicting placement methods

In the process of importing a CCS 3.3 project into CCS 5.5 it gives the error message:

"C:/vss_work/410037_DESULF/cmd/Gen00505b_dev.cmd", line 90: error #10100-D:

<Linking>
   conflicting placement methods specified for ".text"

"C:/vss_work/410037_DESULF/cmd/Gen00505b_dev.cmd", line 90: error #10099-D: program will not fit into available memory.  placement with alignment/blocking fails for section ".text" size 0x867e page 0.  Available memory ranges:
>> Compilation failure
   FLASHD       size: 0x4000       unused: 0x0          max hole: 0x0      

Here is part of the file containing the error(line 90 starts with .text :> ):


    .reset                : > RESET,                              PAGE    =    0,    TYPE    =    DSECT
    IQmathTables  :     LOAD    =    BOOTROM, type    =    NOLOAD,    PAGE    =    0
    IQmath        : >    FLASHB,                                   PAGE    =    0
    csmpasswds        : > CSM_PWL,                                PAGE    =    0
    csm_rsvd            : > CSM_RSVD,                            PAGE    =    0
    codestart            : >    BEGIN_FLASH,                        PAGE    =    0
 vectors                : > VECTORS,                            PAGE    =    0,    TYPE    =    DSECT
 ramfuncs            : LOAD    = FLASHA,
                                  RUN        = PROG_LSARAM,
                                  RUN_START(_ramfuncsRunStart),
                                  LOAD_START(_ramfuncsLoadStart),
                                  LOAD_END(_ramfuncsLoadEnd),    align(128),    PAGE = 0

    DevelopmentFlash_A    :    >    FLASHB,                                    PAGE    =    0
    .esysmem                        :    LOAD = LSARAM,        align(128),    PAGE    =    1
    CAN_Ram                            :    LOAD = LSARAM,        align(16),    PAGE    =    1
    ControlRam                    :    LOAD = LSARAM,        align(16),        PAGE    =    1
    OutbackRam                    :    LOAD = MSARAM,        align(16),        PAGE    =    1
    SequencerRam                :    LOAD = H1SARAM,        align(16),        PAGE    =    1
    TempSeqRam                    : LOAD = LSARAM,        align(16),        PAGE    =    1
    AnodeFuelSeqRam         : LOAD = H1SARAM,        align(16),            PAGE    =    1
    SystemSeqRam                 : LOAD = H1SARAM,        align(16),        PAGE    =    1
    LoadSeqRam                    : LOAD = H1SARAM,        align(16),        PAGE    =    1
    .bss                        :    LOAD = LSARAM,        align(16),        PAGE    =    1
    .ebss                        :    LOAD = H1SARAM,        align(16),        PAGE    =    1
    .text                        :    >    FLASHC >> FLASHD,                PAGE    =    0
    .econst                        :    >    FLASHE,                            PAGE    =    0
    .printf                        :    >    FLASHA,                            PAGE    =    0
    .const                        :    >    FLASHA,                            PAGE    =    0
    .data                        :    >    FLASHA,                            PAGE    =    0
    .cio                        :    LOAD = LSARAM,        align(16),        PAGE    =    1


    Development_PRAM        :    LOAD = H0SARAM,         align(64),    PAGE    =    0
    .switch                            :    >    FLASHE,                        PAGE    =    0
    .cinit                            :    >    FLASHB,                        PAGE    =    0
    .pinit                            :    >    FLASHB,                        PAGE    =    0



THere probably is some difference between the way this file is read between CCS3.1 and CCS5.5 because this worked on the old version.

Any suggestions would be appreciated.

Thanks!

  • After further investigation, and reading other postings about "program will not fit into available
    memory" I tried the "Hello World" program from the examples, the environment generated the source code based on my F2810 processor selection etc. I was surprised to see the same problem, but this time the CMD file refereed to the F2812, which is not what I selected, that has 256k flash and my f2812 has only 128k flash. Why did the environment give me f2812 settings for my F2810? SO I read some TI info at this link: processors.wiki.ti.com/.../10099

    Is it possible the CS5.5 environment does not have correct info for the F2810? Is this processor still supported?
    Why did it give the FLASHD 4000 ?(from my original posting CMD file) it seems small, even if it refers to 4 bytes words.

    Another possibility is that the new compiler is just not producing as compact code as the old. Maybe some of the old compiler flags that are no longer supported helped squeeze it down, and I'll need to strip out some code of un-needed features(which is OK but will take time)

    Any thoughts on this would be appreciated!
  • correction: the second sentence should have said "and my f2810 has only 128k flash"

  • Dan Mezynski said:
    <Linking>
       conflicting placement methods specified for ".text"

    Notice this message prior to the message about the program not being able to fit into available memory. The reason for this message is that this line has two placement methods for .text. The > means allocate to a single memory region (do not split) while >> means split among multiple memory regions.
      .text       :    >    FLASHC >> FLASHD,                PAGE    =    0

    In this case, to allow .text to be split among multiple FLASH regions, the correct syntax should be:
      .text       :    >>    FLASHC | FLASHD,                PAGE    =    0

    I am not sure how the original line worked with CCS 3.3, but please change it and give it a try. The .text may still not fit, since your message shows a size of 0x867e so you may need to add another FLASH region to that line to allow it to spill over. Or you can try optimizing the code to reduce the code size. It may be that the compiler version you are using now is producing just slightly larger code to push it over the memory range it is allocated to.

    Optimization can be enabled from Project Properties->CCS Build->Compiler->Optimization. More details about different types of optimization is in the C28x Compiler Users Guide.

    Hope this helps!

  • I tried your good suggestion regarding the .text : >> FLASHC |FLASHD, PAGE = 0 and it did not work at first then I removed about 2300 source code lines and then it worked, and now have it running on the target!!!

    THANKS!!