Presentation on July 11, 2016
No recording was made of the presentation. Slides are here.
I promised a code snippet for dumping the .data, .bss, heap, and stack.
//**************************************************
//* http://www.nongnu.org/avr-libc/user-manual/malloc.html
//* thanks to John O for the pointer to this info and the insperation to do it
void Ram_TableDisplay(void)
{
extern uint8_t __stack;
extern uint8_t _end;
extern char *__data_start;
extern char *__data_end;
extern char *__bss_start;
extern char *__bss_end;
extern char *__brkval;
extern char *__heap_start;
extern char *__heap_end;
uint8_t *topOfHeap = NULL;
topOfHeap = (uint8_t*)malloc(sizeof(uint8_t));
int data_size = (int)&__data_end - (int)&__data_start;
int bss_size = (int)&__bss_end - (int)&__data_end;
int heap_end = (int)topOfHeap;
int heap_size = (int)topOfHeap - (int)&__heap_start;
int stack_size = RAMEND - (int)SP;
int available = (RAMEND - (int)&__data_start + 1);
free(topOfHeap);
topOfHeap = NULL;
available -= data_size + bss_size + heap_size + stack_size;
Serial.print(F("+----------------+ __data_start = ")); Serial.println((int)&__data_start);
Serial.print(F("+ data +")); Serial.println();
Serial.print(F("+ variables + data_size = ")); Serial.println(data_size);
Serial.print(F("+ +")); Serial.println();
Serial.print(F("+----------------+ __data_end-1 = ")); Serial.println((int)&__data_end-1);
Serial.print(F("+----------------+ __bss_start = ")); Serial.println((int)&__bss_start);
Serial.print(F("+ bss +")); Serial.println();
Serial.print(F("+ variables + bss_size = ")); Serial.println(bss_size);
Serial.print(F("+ +")); Serial.println();
Serial.print(F("+----------------+ __bss_end-1 = ")); Serial.println((int)&__bss_end-1);
Serial.print(F("+----------------+ __heap_start = ")); Serial.println((int)&__heap_start);
Serial.print(F("+ +")); Serial.println();
Serial.print(F("+ heap + heap_size = ")); Serial.println(heap_size);
Serial.print(F("+ +")); Serial.println();
Serial.print(F("+----------------+ heap_end = ")); Serial.println(heap_end-1);
Serial.print(F("available = "));
Serial.println(available);
Serial.print(F("+----------------+ Current STACK = ")); Serial.println((int)SP);
Serial.print(F("+ +")); Serial.println();
Serial.print(F("+ stack + stack_size = ")); Serial.println(stack_size);
Serial.print(F("+ +")); Serial.println();
Serial.print(F("+----------------+ RAMEND = ")); Serial.println(RAMEND);
Serial.println();
Serial.println();
}