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

XC800, IDATA not used

I'm running into the dreaded L107 (DATA space), so I checked all the .lst files and took a look at the largest one:

MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   3806    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      89
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1       8
   EDATA SIZE       =   ----    ----
   HDATA SIZE       =   ----    ----
   XDATA CONST SIZE =   ----    ----
   FAR CONST SIZE   =   ----    ----
END OF MODULE INFORMATION.

What's extraordinary about this, is that all DATA variables summed up only come together to 30 bytes. There is however plenty of IDATA usage, which is apparently all accounted for as DATA usage.

I've tried moving some more variables from DATA to IDATA, leading the L107 to complain about just that much more DATA usage.

How do I make C51/LX51 acknowledge the existence of IDATA? As far as I can tell it should just work out of the box.

BTW, message preview claims I'm from the US, even though I selected Germany.

Parents
  • Maybe the SDCC output for the same program can illustrate what I want:

    Internal RAM layout:
          0 1 2 3 4 5 6 7 8 9 A B C D E F
    0x00:|0|0|0|0|0|0|0|0|1|1|1|1|1|1|1|1|
    0x10:|2|2|2|2|2|2|2|2|a|a|a|a|a|a| | |
    0x20:|B|B|B|B|T|b|b|b|b|b|b|b|b|b|b|b|
    0x30:|b|b|b|b|b|b|b|b|b|b|b|b|b|b|b|b|
    0x40:|b|b|b|b|b|b|b|b|b|b|b|b|b|b|b|b|
    0x50:|b|b|b|b|b|b|b|b|b|b|b|b|b|b|b|b|
    0x60:|b|b|b|b|b|b|b|b|b|b|b|b|b|c|c|c|
    0x70:|c|c|d|d|d|Q|Q|Q|Q|Q|Q|Q|Q|Q|I|I|
    0x80:|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|
    0x90:|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|
    0xa0:|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|
    0xb0:|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|
    0xc0:|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|
    0xd0:|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|
    0xe0:|I|I|I|I|I|I|I|I|S|S|S|S|S|S|S|S|
    0xf0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
    0-3:Reg Banks, T:Bit regs, a-z:Data, B:Bits, Q:Overlay, I:iData, S:Stack, A:Absolute
    

    In short, I want to use all of the internal RAM, there's not enough to spare half of it for a stack that grows to 18 bytes in the worst case.

Reply
  • Maybe the SDCC output for the same program can illustrate what I want:

    Internal RAM layout:
          0 1 2 3 4 5 6 7 8 9 A B C D E F
    0x00:|0|0|0|0|0|0|0|0|1|1|1|1|1|1|1|1|
    0x10:|2|2|2|2|2|2|2|2|a|a|a|a|a|a| | |
    0x20:|B|B|B|B|T|b|b|b|b|b|b|b|b|b|b|b|
    0x30:|b|b|b|b|b|b|b|b|b|b|b|b|b|b|b|b|
    0x40:|b|b|b|b|b|b|b|b|b|b|b|b|b|b|b|b|
    0x50:|b|b|b|b|b|b|b|b|b|b|b|b|b|b|b|b|
    0x60:|b|b|b|b|b|b|b|b|b|b|b|b|b|c|c|c|
    0x70:|c|c|d|d|d|Q|Q|Q|Q|Q|Q|Q|Q|Q|I|I|
    0x80:|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|
    0x90:|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|
    0xa0:|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|
    0xb0:|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|
    0xc0:|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|
    0xd0:|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|
    0xe0:|I|I|I|I|I|I|I|I|S|S|S|S|S|S|S|S|
    0xf0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
    0-3:Reg Banks, T:Bit regs, a-z:Data, B:Bits, Q:Overlay, I:iData, S:Stack, A:Absolute
    

    In short, I want to use all of the internal RAM, there's not enough to spare half of it for a stack that grows to 18 bytes in the worst case.

Children
No data