This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Place RW Compression Data

is it possible to use a scat file to place the rw compression data?

Parents
  • Hi IB,

    This may be a game of semantics but I don't agree with this wording:

    The value 0x77 of your example does not initially exist in the RW section.

    Either I'm not understanding you correctly or I think you may not be completely clear on what the scatter loading section attributes mean.

    From my understanding the 0x77 IS my RW section. The Load (ex. ROM) and Execute (ex. RAM) regions have nothing to do with what is part of the RW, RO, ZI sections.

    The automagic section of code you are referring to is part of the C library initialization. As you say this is code that is place by the linker that copies the Load Region to the Execution region. (Note: You can also place this code where you like as long as it's Load and Execute are at the same location)

    To be completely explicit in my understanding this is how I've come to understand scatter loading.

    Take the above example and call this "test.o". test.o will have the following:

    An RO section = the code instructions
    An RW section = the non-zero init data (namely the 0x77)
    And (possibly) a ZI section = equal to all the zero initialize RW variables...

    Now the scatter loading has 2 regions a Load region and an Execute region.

    In most cases (as you pointed out) the Load region refers to ROM and generally the Execution Region Refers to both ROM and RAM.

    For example the most common scenario is that the Load Section RO,RW,ZI regions are all in internal flash and during execution the RW and ZI are copied decompressed to internal RAM.

    Now the kicker. The RO section in "Load View" looks the same as in "Execution View" BUT the RW and ZI sections probably do not.
    In "load view" (i.e. the firmware image) The RW section is often compressed and placed right after the RO section. The ZI section normally consists of a start address and length.
    In "Execution View" (right after the copy by __main) the RO section stays in internal flash and the RW section that is in the flash is decompressed into the RAM. The ZI section that consisted of a start and length is zeroed in RAM.

    I totally realize you understand most of this I just object to associating ROM or RAM with the section attributes RO, RW as I do not believe they are related.
    A common scenario (especially in debug) is to have all the Regions in RAM (Load and Execute) Thus all the sections in both "views" are in RAM.

    I hope this clarifies my understanding and maybe highlights were are understanding differs?

    M

Reply
  • Hi IB,

    This may be a game of semantics but I don't agree with this wording:

    The value 0x77 of your example does not initially exist in the RW section.

    Either I'm not understanding you correctly or I think you may not be completely clear on what the scatter loading section attributes mean.

    From my understanding the 0x77 IS my RW section. The Load (ex. ROM) and Execute (ex. RAM) regions have nothing to do with what is part of the RW, RO, ZI sections.

    The automagic section of code you are referring to is part of the C library initialization. As you say this is code that is place by the linker that copies the Load Region to the Execution region. (Note: You can also place this code where you like as long as it's Load and Execute are at the same location)

    To be completely explicit in my understanding this is how I've come to understand scatter loading.

    Take the above example and call this "test.o". test.o will have the following:

    An RO section = the code instructions
    An RW section = the non-zero init data (namely the 0x77)
    And (possibly) a ZI section = equal to all the zero initialize RW variables...

    Now the scatter loading has 2 regions a Load region and an Execute region.

    In most cases (as you pointed out) the Load region refers to ROM and generally the Execution Region Refers to both ROM and RAM.

    For example the most common scenario is that the Load Section RO,RW,ZI regions are all in internal flash and during execution the RW and ZI are copied decompressed to internal RAM.

    Now the kicker. The RO section in "Load View" looks the same as in "Execution View" BUT the RW and ZI sections probably do not.
    In "load view" (i.e. the firmware image) The RW section is often compressed and placed right after the RO section. The ZI section normally consists of a start address and length.
    In "Execution View" (right after the copy by __main) the RO section stays in internal flash and the RW section that is in the flash is decompressed into the RAM. The ZI section that consisted of a start and length is zeroed in RAM.

    I totally realize you understand most of this I just object to associating ROM or RAM with the section attributes RO, RW as I do not believe they are related.
    A common scenario (especially in debug) is to have all the Regions in RAM (Load and Execute) Thus all the sections in both "views" are in RAM.

    I hope this clarifies my understanding and maybe highlights were are understanding differs?

    M

Children
  • "Either I'm not understanding you correctly or I think you may not be completely clear on what the scatter loading section attributes mean."

    One thing I could not do is claim to be an expert on the scatter loading file, it's syntax or it's facilities!

    "From my understanding the 0x77 IS my RW section."

    I would say "not quite". The location of it may well me in the RW section, but 'something' has to initialise that location. The 'something' is the scatter loader and the scatter loader reads the information it has to use from the 'extra' section (which I referred to before).

    Maybe we're discussing the same thing, but from slightly different viewpoints.

    If you were to single step through the startup as I suggested, and watch the variable you expect to see the value 0x77 in, I think you will see the variable get written as part of the startup.

  • We must be saying the same thing just in circles...
    The 0x77 IS the RW section (I'm almost sure of this)

    Basically Figure 2 on this page says it all:

    http://www.keil.com/support/man/docs/armlink/armlink_Bhchdbih.htm

    The important thing is to realize the the Load View has an RW section and the Execution View has an RW section and they do not have to be at the same place but both are still the RW sections.

    The code that moves/copies/decompresses the regions that don't have the same Load and Execute locations is the C lib init code. I've single stepped through this code may time :)

    Cheers,

    M

  • "We must be saying the same thing just in circles..."

    Yes, I think we are ;)

    However, I have to admit that you've made me revisit and rethink the topic - My original requirement changed a little and the challenge went away.

    When I get a chance, I would like to re-examine the whole area keeping your comments to hand.

    Cheers.