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

Memory declaration problem

How come there is obviously space (gap) in the memory, but when I declare the Test[10] between the 0x34 and 0x62 the program kept saying overlap and address overflow.

IDATA 0029H 000BH UNIT ?ID?XXACT_H 0034H 002FH *** GAP *** IDATA 0063H 0001H ABSOLUTE 0064H 0004H *** GAP *** IDATA 0068H 000AH ABSOLUTE 0072H 0001H *** GAP *** IDATA 0073H 0002H ABSOLUTE

unsigned char idata Test[10] _at_ 0x34; //new declare
unsigned char idata Name[10] _at_ 0x68;
unsigned int idata TestCH _at_ 0x73;

help~!

Parents
  • WHY? HOW!

    Because instead of using them, you're trying to fight the tools for no apparent reason. And so far it looks like the tools are winning by a comfortable margin.

    What makes you think you have to make your own decisions about memory allocations for individual variables? The linker/locator and the compiler are quite good at that job as it is. Why interfere with their work?

    For the record: if you're going to have that variable in _idata_, the 0x6* range is hardly the best place to put it. The linker would have known that. But you told it you know better.

Reply
  • WHY? HOW!

    Because instead of using them, you're trying to fight the tools for no apparent reason. And so far it looks like the tools are winning by a comfortable margin.

    What makes you think you have to make your own decisions about memory allocations for individual variables? The linker/locator and the compiler are quite good at that job as it is. Why interfere with their work?

    For the record: if you're going to have that variable in _idata_, the 0x6* range is hardly the best place to put it. The linker would have known that. But you told it you know better.

Children