Stuff is happening

This commit is contained in:
David Lenfesty 2019-11-27 16:55:26 -07:00
parent fa8cc80206
commit 958073b19b
8 changed files with 390 additions and 85 deletions

View File

@ -9,7 +9,8 @@
],
"settings": {
"files.associations": {
"io.h": "c"
"io.h": "c",
"interrupt.h": "c"
}
}
}

View File

@ -16,7 +16,7 @@ OBJCOPY := avr-objcopy
SIZE := avr-size -A
DOXYGEN := doxygen
CFLAGS := -Wall -pedantic -mmcu=$(MCU) -std=c99 -g -Os -DF_CPU=$(MCU_FREQ)
CFLAGS := -Werror -Wall -pedantic -mmcu=$(MCU) -std=c99 -g -Os -DF_CPU=$(MCU_FREQ)
all: $(HEX)

View File

@ -0,0 +1,52 @@
#include "fifo.h"
static struct {
FIFO_TYPE buffer[FIFO_LEN];
uint16_t rd_ptr;
uint16_t wr_ptr;
uint16_t entries;
} fifo;
void fifo_init() {
fifo.rd_ptr = 0;
fifo.wr_ptr = 0;
fifo.entries = 0;
}
fifo_err_t fifo_pop(FIFO_TYPE* dest) {
// FIFO is empty, nothing to return!
if (fifo.entries == 0) {
return FIFO_EMPTY;
}
// Entries in FIFO, pop
*dest = fifo.buffer[fifo.rd_ptr];
fifo.rd_ptr++;
fifo.entries--;
// Ensure pointers don't overflow!
if (fifo.rd_ptr == FIFO_LEN) {
fifo.rd_ptr = 0;
}
return FIFO_SUCCESS;
}
fifo_err_t fifo_push(FIFO_TYPE src) {
// FIFO is full, don't store anything
if (fifo.entries == FIFO_LEN) {
return FIFO_FULL;
}
// FIFO has space, write
fifo.buffer[fifo.wr_ptr] = src;
fifo.wr_ptr++;
fifo.entries++;
// Ensure pointers don't overflow!
if (fifo.wr_ptr == FIFO_LEN) {
fifo.wr_ptr = 0;
}
return FIFO_SUCCESS;
}

View File

@ -0,0 +1,36 @@
#ifndef FIFO_H_
#define FIFO_H_
#include <stdint.h>
typedef enum {
FIFO_SUCCESS,
FIFO_FULL,
FIFO_EMPTY
} fifo_err_t;
#define FIFO_LEN 50
#define FIFO_TYPE uint8_t
/** @brief Initialises FIFO
*
* This MUST be called before any other fifo_* functions are called.
* Unless memory is initialised to 0. Then it's fine I guess.
*/
void fifo_init();
/** @brief Pops most recent addition off of FIFO buffer.
*
* @retval FIFO_SUCCESS Successfully read data from FIFO
* @retval FIFO_EMPTY Buffer was empty, no data read
*/
fifo_err_t fifo_pop(FIFO_TYPE* dest);
/** @brief Pushes entry onto FIFO buffer.
*
* @retval FIFO_SUCCESS successfully wrote data to FIFO buffer
* @retval FIFO_FULL buffer, was full, no data written
*/
fifo_err_t fifo_push(FIFO_TYPE src);
#endif

View File

@ -1,8 +1,66 @@
#include <avr/io.h>
#include "lcd.h"
#include "main.h"
#define USART_BAUDRATE 9600 //! USART baudrate, change this to set it.
#define UBRR_VALUE (((F_CPU/(USART_BAUDRATE*16UL)))-1)
/* ---- Global Flags ---- */
int16_t display_song = -1; //! ID of the song currently being displayed, -1 if song list is not initialised
int16_t selected_song = -1; //! ID of the selected song. -1 if no song is selected.
struct {
char* names[MAX_SONGS];
uint8_t num_songs;
} songs;
/** @brief Adds song to list of songs
*
* Allocates a new piece of memory for the name.
*/
void add_song(char* name) {
// Error out on too many songs
if (songs.num_songs == MAX_SONGS) {
lcd_gotoxy(0,0);
lcd_puts("Too many songs!");
while(1);
}
// Allocate memory to store name, and increase number
uint8_t name_len = strlen(name);
songs.names[songs.num_songs] = malloc(name_len);
songs.num_songs++;
}
/** @brief Clears list of songs
*
* Frees all memory used for name storage
*/
void clear_songs() {
// Free all memory
for (uint8_t i = 0; i < songs.num_songs; i++) {
free(songs.names[i]);
}
songs.num_songs = 0;
}
/** @brief Handles incoming Serial commands from the main player.
*/
ISR(USART_RX_vect) {
cli();
// Push incoming data to FIFO
fifo_push(UDR);
sei();
}
/** @brief Sets up various GPIO functions
*/
void gpio_init() {
// Initialise button pins as inputs
BUTTONS_DDR &= ~(1 << BUTTONS_LEFT_PIN) &
~(1 << BUTTONS_RIGHT_PIN) &
~(1 << BUTTONS_PLAYPAUSE_PIN);
// Turn on button pullups
BUTTONS_PORT |= (1 << BUTTONS_LEFT_PIN) |
(1 << BUTTONS_RIGHT_PIN) |
(1 << BUTTONS_PLAYPAUSE_PIN);
}
/** @brief Sets up USART for TX and RX with a baud rate of USART_BAUDRATE
*/
@ -14,10 +72,34 @@ void usart_init() {
UCSRC = (1 << UCSZ1) | (1 << UCSZ0); // fire-up USART
// Enable RX complete interrupt
UCSRB |= (1 << RXCIE);
}
void handle_left_press() {
}
void handle_right_press() {
}
// TODO NOT DONE
void handle_playpause_press() {
// If no song selected, select the correct one.
if (selected_song == -1) {
comms_select_file(display_song);
}
}
int main() {
// Scratch variables
uint8_t incoming_cmd = 0;
fifo_init();
gpio_init();
usart_init();
lcd_clrscr();
@ -25,6 +107,28 @@ int main() {
// Main loop
while (1) {
// Handle incoming messages
if (fifo_pop(&incoming_cmd) == FIFO_SUCCESS) {
}
// Handle "left" button press
if (BUTTONS_PORT & (1 << BUTTONS_LEFT_PIN)) {
handle_left_press();
_delay_ms(100); // Delay to debounce
}
// Handle "right" button press
if (BUTTONS_PORT & (1 << BUTTONS_LEFT_PIN)) {
handle_left_press();
_delay_ms(100); // Delay to debounce
}
// Handle play/pause button press
if (BUTTONS_PORT & (1 << BUTTONS_LEFT_PIN)) {
handle_left_press();
_delay_ms(100); // Delay to debounce
}
}

View File

@ -0,0 +1,26 @@
#ifndef MAIN_H_
#define MAIN_H_
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <string.h>
#include <stdlib.h>
#include "lcd.h"
#include "fifo.h"
#include "comms.h"
#define USART_BAUDRATE 9600 //! USART baudrate, change this to set it.
#define UBRR_VALUE (((F_CPU/(USART_BAUDRATE*16UL)))-1)
#define MAX_SONGS 16
#define BUTTONS_DDR DDRD
#define BUTTONS_PORT PORTD
#define BUTTONS_LEFT_PIN PORTD2
#define BUTTONS_RIGHT_PIN PORTD3
#define BUTTONS_PLAYPAUSE_PIN PORTD4
#endif

View File

@ -2,6 +2,19 @@ Archive member included to satisfy reference by file (symbol)
/usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_exit.o)
/usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr25/tiny-stack/crtattiny2313a.o (exit)
/usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_copy_data.o)
main.o (__do_copy_data)
/usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_clear_bss.o)
main.o (__do_clear_bss)
/usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr25/tiny-stack/libc.a(malloc.o)
main.o (malloc)
Allocating common symbols
Common symbol size file
__brkval 0x2 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr25/tiny-stack/libc.a(malloc.o)
songs 0x21 main.o
__flp 0x2 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr25/tiny-stack/libc.a(malloc.o)
Memory Configuration
@ -21,6 +34,7 @@ LOAD /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr25/tiny-stack/crtattiny2313a.o
LOAD lcd.o
LOAD comms.o
LOAD main.o
LOAD fifo.o
START GROUP
LOAD /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a
LOAD /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr25/tiny-stack/libm.a
@ -125,7 +139,7 @@ END GROUP
.rela.plt
*(.rela.plt)
.text 0x0000000000000000 0x1fa
.text 0x0000000000000000 0x65a
*(.vectors)
.vectors 0x0000000000000000 0x2a /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr25/tiny-stack/crtattiny2313a.o
0x0000000000000000 __vectors
@ -166,6 +180,10 @@ END GROUP
*(.init3)
*(.init3)
*(.init4)
.init4 0x0000000000000032 0x16 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_copy_data.o)
0x0000000000000032 __do_copy_data
.init4 0x0000000000000048 0x10 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_clear_bss.o)
0x0000000000000048 __do_clear_bss
*(.init4)
*(.init5)
*(.init5)
@ -176,67 +194,111 @@ END GROUP
*(.init8)
*(.init8)
*(.init9)
.init9 0x0000000000000032 0x4 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr25/tiny-stack/crtattiny2313a.o
.init9 0x0000000000000058 0x4 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr25/tiny-stack/crtattiny2313a.o
*(.init9)
*(.text)
.text 0x0000000000000036 0x2 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr25/tiny-stack/crtattiny2313a.o
0x0000000000000036 __vector_1
0x0000000000000036 __vector_12
0x0000000000000036 __bad_interrupt
0x0000000000000036 __vector_6
0x0000000000000036 __vector_3
0x0000000000000036 __vector_11
0x0000000000000036 __vector_13
0x0000000000000036 __vector_17
0x0000000000000036 __vector_19
0x0000000000000036 __vector_7
0x0000000000000036 __vector_5
0x0000000000000036 __vector_4
0x0000000000000036 __vector_9
0x0000000000000036 __vector_2
0x0000000000000036 __vector_15
0x0000000000000036 __vector_8
0x0000000000000036 __vector_14
0x0000000000000036 __vector_10
0x0000000000000036 __vector_16
0x0000000000000036 __vector_18
0x0000000000000036 __vector_20
.text 0x0000000000000038 0x1b8 lcd.o
0x0000000000000102 lcd_command
0x0000000000000110 lcd_data
0x000000000000011e lcd_gotoxy
0x000000000000012a lcd_getxy
0x0000000000000130 lcd_clrscr
0x0000000000000134 lcd_home
0x0000000000000138 lcd_putc
0x000000000000015a lcd_puts
0x0000000000000170 lcd_puts_p
0x000000000000018c lcd_init
.text 0x00000000000001f0 0x0 comms.o
.text 0x00000000000001f0 0x0 main.o
.text 0x00000000000001f0 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_exit.o)
0x00000000000001f0 . = ALIGN (0x2)
.text 0x000000000000005c 0x2 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr25/tiny-stack/crtattiny2313a.o
0x000000000000005c __vector_1
0x000000000000005c __vector_12
0x000000000000005c __bad_interrupt
0x000000000000005c __vector_6
0x000000000000005c __vector_3
0x000000000000005c __vector_11
0x000000000000005c __vector_13
0x000000000000005c __vector_17
0x000000000000005c __vector_19
0x000000000000005c __vector_5
0x000000000000005c __vector_4
0x000000000000005c __vector_9
0x000000000000005c __vector_2
0x000000000000005c __vector_15
0x000000000000005c __vector_8
0x000000000000005c __vector_14
0x000000000000005c __vector_10
0x000000000000005c __vector_16
0x000000000000005c __vector_18
0x000000000000005c __vector_20
.text 0x000000000000005e 0x1b8 lcd.o
0x0000000000000128 lcd_command
0x0000000000000136 lcd_data
0x0000000000000144 lcd_gotoxy
0x0000000000000150 lcd_getxy
0x0000000000000156 lcd_clrscr
0x000000000000015a lcd_home
0x000000000000015e lcd_putc
0x0000000000000180 lcd_puts
0x0000000000000196 lcd_puts_p
0x00000000000001b2 lcd_init
.text 0x0000000000000216 0x0 comms.o
.text 0x0000000000000216 0xe4 main.o
0x0000000000000216 add_song
0x000000000000025e clear_songs
0x0000000000000288 __vector_7
0x00000000000002d4 gpio_init
0x00000000000002e2 usart_init
0x00000000000002f4 handle_left_press
0x00000000000002f6 handle_right_press
0x00000000000002f8 handle_playpause_press
.text 0x00000000000002fa 0xb6 fifo.o
0x00000000000002fa fifo_init
0x000000000000030c fifo_pop
0x0000000000000360 fifo_push
.text 0x00000000000003b0 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_exit.o)
.text 0x00000000000003b0 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_copy_data.o)
.text 0x00000000000003b0 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_clear_bss.o)
.text 0x00000000000003b0 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr25/tiny-stack/libc.a(malloc.o)
0x00000000000003b0 . = ALIGN (0x2)
*(.text.*)
.text.startup 0x00000000000001f0 0x6 main.o
0x00000000000001f0 main
.text.startup 0x00000000000003b0 0x64 main.o
0x00000000000003b0 main
.text.libgcc.mul
0x00000000000001f6 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_exit.o)
0x0000000000000414 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_exit.o)
.text.libgcc.div
0x00000000000001f6 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_exit.o)
.text.libgcc 0x00000000000001f6 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_exit.o)
0x0000000000000414 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_exit.o)
.text.libgcc 0x0000000000000414 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_exit.o)
.text.libgcc.prologue
0x00000000000001f6 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_exit.o)
0x0000000000000414 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_exit.o)
.text.libgcc.builtins
0x00000000000001f6 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_exit.o)
0x0000000000000414 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_exit.o)
.text.libgcc.fmul
0x00000000000001f6 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_exit.o)
0x0000000000000414 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_exit.o)
.text.libgcc.fixed
0x00000000000001f6 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_exit.o)
0x00000000000001f6 . = ALIGN (0x2)
0x0000000000000414 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_exit.o)
.text.libgcc.mul
0x0000000000000414 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_copy_data.o)
.text.libgcc.div
0x0000000000000414 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_copy_data.o)
.text.libgcc 0x0000000000000414 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_copy_data.o)
.text.libgcc.prologue
0x0000000000000414 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_copy_data.o)
.text.libgcc.builtins
0x0000000000000414 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_copy_data.o)
.text.libgcc.fmul
0x0000000000000414 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_copy_data.o)
.text.libgcc.fixed
0x0000000000000414 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_copy_data.o)
.text.libgcc.mul
0x0000000000000414 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_clear_bss.o)
.text.libgcc.div
0x0000000000000414 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_clear_bss.o)
.text.libgcc 0x0000000000000414 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_clear_bss.o)
.text.libgcc.prologue
0x0000000000000414 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_clear_bss.o)
.text.libgcc.builtins
0x0000000000000414 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_clear_bss.o)
.text.libgcc.fmul
0x0000000000000414 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_clear_bss.o)
.text.libgcc.fixed
0x0000000000000414 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_clear_bss.o)
.text.avr-libc
0x0000000000000414 0x242 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr25/tiny-stack/libc.a(malloc.o)
0x0000000000000414 malloc
0x0000000000000544 free
0x0000000000000656 . = ALIGN (0x2)
*(.fini9)
.fini9 0x00000000000001f6 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_exit.o)
0x00000000000001f6 exit
0x00000000000001f6 _exit
.fini9 0x0000000000000656 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_exit.o)
0x0000000000000656 exit
0x0000000000000656 _exit
*(.fini9)
*(.fini8)
*(.fini8)
@ -255,46 +317,66 @@ END GROUP
*(.fini1)
*(.fini1)
*(.fini0)
.fini0 0x00000000000001f6 0x4 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_exit.o)
.fini0 0x0000000000000656 0x4 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_exit.o)
*(.fini0)
0x00000000000001fa _etext = .
0x000000000000065a _etext = .
.data 0x0000000000800060 0x0 load address 0x00000000000001fa
[!provide] PROVIDE (__data_start, .)
.data 0x0000000000800060 0x1a load address 0x000000000000065a
0x0000000000800060 PROVIDE (__data_start, .)
*(.data)
.data 0x0000000000800060 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr25/tiny-stack/crtattiny2313a.o
.data 0x0000000000800060 0x0 lcd.o
.data 0x0000000000800060 0x0 comms.o
.data 0x0000000000800060 0x0 main.o
.data 0x0000000000800060 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_exit.o)
.data 0x0000000000800060 0x4 main.o
0x0000000000800060 selected_song
0x0000000000800062 display_song
.data 0x0000000000800064 0x0 fifo.o
.data 0x0000000000800064 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_exit.o)
.data 0x0000000000800064 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_copy_data.o)
.data 0x0000000000800064 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_clear_bss.o)
.data 0x0000000000800064 0x6 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr25/tiny-stack/libc.a(malloc.o)
0x0000000000800064 __malloc_heap_end
0x0000000000800066 __malloc_heap_start
0x0000000000800068 __malloc_margin
*(.data*)
*(.rodata)
*(.rodata*)
.rodata.str1.1
0x000000000080006a 0x10 main.o
*(.gnu.linkonce.d*)
0x0000000000800060 . = ALIGN (0x2)
0x0000000000800060 _edata = .
[!provide] PROVIDE (__data_end, .)
0x000000000080007a . = ALIGN (0x2)
0x000000000080007a _edata = .
0x000000000080007a PROVIDE (__data_end, .)
.bss 0x0000000000800060 0x0
[!provide] PROVIDE (__bss_start, .)
.bss 0x000000000080007a 0x5d
0x000000000080007a PROVIDE (__bss_start, .)
*(.bss)
.bss 0x0000000000800060 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr25/tiny-stack/crtattiny2313a.o
.bss 0x0000000000800060 0x0 lcd.o
.bss 0x0000000000800060 0x0 comms.o
.bss 0x0000000000800060 0x0 main.o
.bss 0x0000000000800060 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_exit.o)
.bss 0x000000000080007a 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr25/tiny-stack/crtattiny2313a.o
.bss 0x000000000080007a 0x0 lcd.o
.bss 0x000000000080007a 0x0 comms.o
.bss 0x000000000080007a 0x0 main.o
.bss 0x000000000080007a 0x38 fifo.o
.bss 0x00000000008000b2 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_exit.o)
.bss 0x00000000008000b2 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_copy_data.o)
.bss 0x00000000008000b2 0x0 /usr/lib/gcc/avr/5.4.0/avr25/tiny-stack/libgcc.a(_clear_bss.o)
.bss 0x00000000008000b2 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr25/tiny-stack/libc.a(malloc.o)
*(.bss*)
*(COMMON)
[!provide] PROVIDE (__bss_end, .)
0x00000000000001fa __data_load_start = LOADADDR (.data)
0x00000000000001fa __data_load_end = (__data_load_start + SIZEOF (.data))
COMMON 0x00000000008000b2 0x21 main.o
0x00000000008000b2 songs
COMMON 0x00000000008000d3 0x4 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr25/tiny-stack/libc.a(malloc.o)
0x00000000008000d3 __brkval
0x00000000008000d5 __flp
0x00000000008000d7 PROVIDE (__bss_end, .)
0x000000000000065a __data_load_start = LOADADDR (.data)
0x0000000000000674 __data_load_end = (__data_load_start + SIZEOF (.data))
.noinit 0x0000000000800060 0x0
.noinit 0x00000000008000d7 0x0
[!provide] PROVIDE (__noinit_start, .)
*(.noinit*)
[!provide] PROVIDE (__noinit_end, .)
0x0000000000800060 _end = .
[!provide] PROVIDE (__heap_start, .)
0x00000000008000d7 _end = .
0x00000000008000d7 PROVIDE (__heap_start, .)
.eeprom 0x0000000000810000 0x0
*(.eeprom*)
@ -315,17 +397,19 @@ END GROUP
.user_signatures
*(.user_signatures*)
.stab 0x0000000000000000 0x1638
.stab 0x0000000000000000 0x1efc
*(.stab)
.stab 0x0000000000000000 0x1008 lcd.o
.stab 0x0000000000001008 0x30c comms.o
0x4e0 (size before relaxing)
.stab 0x0000000000001314 0x324 main.o
0x510 (size before relaxing)
.stab 0x0000000000001314 0x78c main.o
0x978 (size before relaxing)
.stab 0x0000000000001aa0 0x45c fifo.o
0x5f4 (size before relaxing)
.stabstr 0x0000000000000000 0xf6f
.stabstr 0x0000000000000000 0x12b5
*(.stabstr)
.stabstr 0x0000000000000000 0xf6f lcd.o
.stabstr 0x0000000000000000 0x12b5 lcd.o
.stab.excl
*(.stab.excl)
@ -345,6 +429,8 @@ END GROUP
0x12 (size before relaxing)
.comment 0x0000000000000011 0x12 comms.o
.comment 0x0000000000000011 0x12 main.o
.comment 0x0000000000000011 0x12 fifo.o
.comment 0x0000000000000011 0x12 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr25/tiny-stack/libc.a(malloc.o)
.note.gnu.avr.deviceinfo
0x0000000000000000 0x40

Binary file not shown.