diff --git a/final_project/312_final.code-workspace b/final_project/312_final.code-workspace index 72f846f..2bf40c0 100644 --- a/final_project/312_final.code-workspace +++ b/final_project/312_final.code-workspace @@ -9,7 +9,8 @@ ], "settings": { "files.associations": { - "io.h": "c" + "io.h": "c", + "interrupt.h": "c" } } } \ No newline at end of file diff --git a/final_project/lcd_disp/Makefile b/final_project/lcd_disp/Makefile index ace6c7b..ef2f92a 100644 --- a/final_project/lcd_disp/Makefile +++ b/final_project/lcd_disp/Makefile @@ -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) diff --git a/final_project/lcd_disp/fifo.c b/final_project/lcd_disp/fifo.c new file mode 100644 index 0000000..e159ebb --- /dev/null +++ b/final_project/lcd_disp/fifo.c @@ -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; +} \ No newline at end of file diff --git a/final_project/lcd_disp/fifo.h b/final_project/lcd_disp/fifo.h new file mode 100644 index 0000000..d61a181 --- /dev/null +++ b/final_project/lcd_disp/fifo.h @@ -0,0 +1,36 @@ +#ifndef FIFO_H_ +#define FIFO_H_ + +#include + +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 \ No newline at end of file diff --git a/final_project/lcd_disp/main.c b/final_project/lcd_disp/main.c index c478520..18f1796 100644 --- a/final_project/lcd_disp/main.c +++ b/final_project/lcd_disp/main.c @@ -1,8 +1,66 @@ -#include -#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 + } } diff --git a/final_project/lcd_disp/main.h b/final_project/lcd_disp/main.h new file mode 100644 index 0000000..a318026 --- /dev/null +++ b/final_project/lcd_disp/main.h @@ -0,0 +1,26 @@ +#ifndef MAIN_H_ +#define MAIN_H_ + +#include +#include +#include +#include +#include + + +#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 \ No newline at end of file diff --git a/final_project/lcd_disp/sd-reader.map b/final_project/lcd_disp/sd-reader.map index 8fab970..e4fdaef 100644 --- a/final_project/lcd_disp/sd-reader.map +++ b/final_project/lcd_disp/sd-reader.map @@ -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 diff --git a/final_project/lcd_disp/sd-reader.out b/final_project/lcd_disp/sd-reader.out index f2b6798..fd4f98c 100755 Binary files a/final_project/lcd_disp/sd-reader.out and b/final_project/lcd_disp/sd-reader.out differ