From 958073b19bceff28355b02b11c5e1167e2f6faaa Mon Sep 17 00:00:00 2001 From: David Lenfesty Date: Wed, 27 Nov 2019 16:55:26 -0700 Subject: [PATCH] Stuff is happening --- final_project/312_final.code-workspace | 3 +- final_project/lcd_disp/Makefile | 2 +- final_project/lcd_disp/fifo.c | 52 ++++++ final_project/lcd_disp/fifo.h | 36 ++++ final_project/lcd_disp/main.c | 112 +++++++++++- final_project/lcd_disp/main.h | 26 +++ final_project/lcd_disp/sd-reader.map | 244 +++++++++++++++++-------- final_project/lcd_disp/sd-reader.out | Bin 15932 -> 21308 bytes 8 files changed, 390 insertions(+), 85 deletions(-) create mode 100644 final_project/lcd_disp/fifo.c create mode 100644 final_project/lcd_disp/fifo.h create mode 100644 final_project/lcd_disp/main.h 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 f2b679873c3c4eb089db302d80b3e406cc43ed07..fd4f98cbd03e0317293cbe345a20524a5d7e4d00 100755 GIT binary patch delta 7596 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 delta 2916 zcmb_eZ){Ul6hF7X#LfJn%gwm0TWnge@4i&et4Tvnd(rgV3##**YFoGQ* z8WJ>1uAnALFd+uf7|4v#fb)e9YJ>$0XhMR33B(U-WEgP45A}C$`?kmPlZhw2@1EZ| z=bm%!dH0^z(;tY_JBR%#>oOuA5!I5PEEFI+6_5Zw$7L~!W(@b#GoC*Dk-&jcd6EaHVkxp3Zt@ZoHb3_mhDcZFr7FE3=Vv4Sax5tbho zl#4n!R^SyY*i2OKp ziCI~19Ka!kv%@wU+NiSZ6SHO1S&rvE=Str^$X`|R*97xSylS4j>0IgyLGqT;4h!a) zSR0Z{Tnl}*kQ`UqcLeiHtgV&1T?=htNKPs3Q4yA3y1XJh@`I~LRCYpfS1B$E=5y_w z^hHsk9AsQ{N?Y-k$^^94&{oh5!Td61dE-9IgnSQ{2cYdzmJ@>cxU!tMuMh|10{0f* zVQ887g}N{^pMMZQ(*}~r@zoq>GXJgUr%ZSmO6v>TUqb%iVJeR zr(9f;yF6aY6(J9KHdo!sF6eiu;3DyQfBWJ_A@~2_BT-ESmD(gZ8m`>wq-tl7! z@nbygz;n3)a|4>9@pL7?l#lWBB4EDWC>ClZXenmC(9dS^6PWq#uF2pOb%Nnr#({Xj zM$9_>9|^^EXPE!(FZJJdxZULNW#Ea)5(s)7*a6HHaA8A-FmtbA@&mt*`AAwpa->k= z&%w{jU{pcSIq=-WnHXQhY;{ntgKn8WWmkA>sz;feYS&71+4r0I;!w zi-EZc+}+u}9+)@Tlf_R1-vZ7-d}YuIfiYkwuuguIG-lE#O!y_X=W>Af6})TG9|JZf z_*oWne09jqKyZx#hy#8Hyn%)k<`UimXT;w_Z%p_uu-=dS_y}GB);j|ybjP4~K>v4U zy^4>3f^yN4j1G%{`D3bIqd6x1!zTPFFn)?SU<(8P6poqfi92Ptd}CFjCKB7xn+(P& z5*bX!6OqI~eB(fLD;q?5qRA-a+hg6y_&}rvY-9bJdKqmgDoMg75%25mj}2m7bRbEQ zSTeRFDGxr=Fq79NUPyM!(&pK+so5_R&0aa&yskJFgZr(KSbxu?+d)~?(pi#SF&Igx zz`gywN!7;X*_P*IZR;Yrx3x|F+FF;F&1F$Yu3cR%_paVA^V?iG{3r09kY#OUGx+}= z$!%>#sfWOzgpuG=FAVu*UdIC^jxf