Turbo51 Memory Organization

Pascal Compiler for 8051 microcontrollers

CODE memory

By default the maximum code size is $10000 bytes (64 KB). This can be changed in the main program with the $M directive.

IDATA memory

By default there is no IDATA memory. This can be changed either in the main program or in one of the directly or indirectly used units with the $IDATA directive. Usualy the main program uses a unit which declares features of the microcontroller including the IDATA memory with the $IDATA directive.

XDATA memory

By default there is no XDATA memory. This can be changed either in the main program with the $M directive or in one of the used units with the $XDATA directive.

DATA / IDATA Memory organization

If compiler switch $I is set then IDATA variables immediately follow DATA varables. If there is no IDATA memory or IDATA variables then stack immediately follows DATA variables. IDATA variables can start below $80 if there is free DATA memory and the $I directive is on.

Register bank 0 <- $00..$07
Register bank 1 <- $08..$0F
Register bank 2 <- $10..$17
Register bank 3 <- $18..$1F

Boolean variables

<- $20



Bit-addressable DATA variables

 

DATA variables



Free DATA memory

 
  <- $80 - First IDATA address

IDATA variables

 
StackStart <- Last variable (dummy)

Stack

 
  <- End of DATA / IDATA memory

XDATA Memory organization

Start address and size of XDATA memory and heap size can be set with compiler directive M ($M<CODE Start>, <CODE Size>, <XDATA Start>, <XDATA Size>, <Heap Size>).

  <- XDATA memory start (first byte)

XDATA Variables
 
 
XDATA_StackStart <- Last XDATA variable (dummy)

XDATA Stack
 
 
Free XDATA Stack (first byte) <- XSP

Free XDATA Stack
 
 
  <- HeapOrg - first byte of heap

HEAP
 
 
Free HEAP (first byte) <- HeapPtr points to the address of unused heap block

Free HEAP
 
 
  <- HeapEnd - XDATA memory end (last byte)
Copyright © 2024 Igor Funa. All Rights Reserved. Terms, Conditions and Privacy policy