From 0e5306387e05cdd4750749301fb155eedb1a90bc Mon Sep 17 00:00:00 2001 From: David Lenfesty Date: Mon, 4 Nov 2019 17:31:54 -0700 Subject: [PATCH] Got a little demo going --- .gitignore | 1 + final_project/sd_reader/.vscode/tasks.json | 16 + {lab_3 => final_project/sd_reader}/lcd.c | 0 {lab_3 => final_project/sd_reader}/lcd.h | 0 final_project/sd_reader/main.c | 487 ++------------ final_project/sd_reader/sd-reader.map | 704 ++++++++++++--------- final_project/sd_reader/sd-reader.out | Bin 62296 -> 47376 bytes final_project/sd_reader/sd_raw_config.h | 4 +- final_project/sd_reader/uart.c | 198 ------ final_project/sd_reader/uart.h | 42 -- final_project/sd_reader/uart.o | Bin 10952 -> 0 bytes 11 files changed, 464 insertions(+), 988 deletions(-) create mode 100644 final_project/sd_reader/.vscode/tasks.json rename {lab_3 => final_project/sd_reader}/lcd.c (100%) rename {lab_3 => final_project/sd_reader}/lcd.h (100%) delete mode 100644 final_project/sd_reader/uart.c delete mode 100644 final_project/sd_reader/uart.h delete mode 100644 final_project/sd_reader/uart.o diff --git a/.gitignore b/.gitignore index b57af0b..6815f44 100755 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ cmake-build-debug/* .idea/* */build/** */_build/** +*.o diff --git a/final_project/sd_reader/.vscode/tasks.json b/final_project/sd_reader/.vscode/tasks.json new file mode 100644 index 0000000..9d26701 --- /dev/null +++ b/final_project/sd_reader/.vscode/tasks.json @@ -0,0 +1,16 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + "label": "make", + "type": "shell", + "command": "make", + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} \ No newline at end of file diff --git a/lab_3/lcd.c b/final_project/sd_reader/lcd.c similarity index 100% rename from lab_3/lcd.c rename to final_project/sd_reader/lcd.c diff --git a/lab_3/lcd.h b/final_project/sd_reader/lcd.h similarity index 100% rename from lab_3/lcd.h rename to final_project/sd_reader/lcd.h diff --git a/final_project/sd_reader/main.c b/final_project/sd_reader/main.c index 47298d4..8565352 100644 --- a/final_project/sd_reader/main.c +++ b/final_project/sd_reader/main.c @@ -15,7 +15,7 @@ #include "partition.h" #include "sd_raw.h" #include "sd_raw_config.h" -#include "uart.h" +#include "lcd.h" #define DEBUG 1 @@ -205,462 +205,55 @@ * - sd-reader_config.h */ -static uint8_t read_line(char* buffer, uint8_t buffer_length); -static uint32_t strtolong(const char* str); -static uint8_t find_file_in_dir(struct fat_fs_struct* fs, struct fat_dir_struct* dd, const char* name, struct fat_dir_entry_struct* dir_entry); static struct fat_file_struct* open_file_in_dir(struct fat_fs_struct* fs, struct fat_dir_struct* dd, const char* name); -static uint8_t print_disk_info(const struct fat_fs_struct* fs); int main() { + lcd_init(LCD_DISP_ON); + /* we will just use ordinary idle mode */ set_sleep_mode(SLEEP_MODE_IDLE); - /* setup uart */ - uart_init(); + /* open first partition */ + struct partition_struct* partition = partition_open(sd_raw_read, + sd_raw_read_interval, + 0, + 0, + 0 + ); - while(1) + if(!partition) { - /* setup sd card slot */ - if(!sd_raw_init()) - { -#if DEBUG - uart_puts_p(PSTR("MMC/SD initialization failed\n")); -#endif - continue; + /* If the partition did not open, assume the storage device + * is a "superfloppy", i.e. has no MBR. + */ + partition = partition_open(sd_raw_read, + sd_raw_read_interval, + 0, + 0, + -1 + ); + } + + /* open file system */ + struct fat_fs_struct* fs = fat_open(partition); + + /* open root directory */ + struct fat_dir_entry_struct directory; + fat_get_dir_entry_of_path(fs, "/", &directory); + + struct fat_dir_struct* dd = fat_open_dir(fs, &directory); + + // Print out all files/directories in top level + while (1) { + struct fat_dir_entry_struct dir_entry; + while(fat_read_dir(dd, &dir_entry)) { + // print out directory entry name + lcd_clrscr(); + lcd_gotoxy(0,0); + lcd_puts(dir_entry.long_name); } - - /* open first partition */ - struct partition_struct* partition = partition_open(sd_raw_read, - sd_raw_read_interval, -#if SD_RAW_WRITE_SUPPORT - sd_raw_write, - sd_raw_write_interval, -#else - 0, - 0, -#endif - 0 - ); - - if(!partition) - { - /* If the partition did not open, assume the storage device - * is a "superfloppy", i.e. has no MBR. - */ - partition = partition_open(sd_raw_read, - sd_raw_read_interval, -#if SD_RAW_WRITE_SUPPORT - sd_raw_write, - sd_raw_write_interval, -#else - 0, - 0, -#endif - -1 - ); - if(!partition) - { -#if DEBUG - uart_puts_p(PSTR("opening partition failed\n")); -#endif - continue; - } - } - - /* open file system */ - struct fat_fs_struct* fs = fat_open(partition); - if(!fs) - { -#if DEBUG - uart_puts_p(PSTR("opening filesystem failed\n")); -#endif - continue; - } - - /* open root directory */ - struct fat_dir_entry_struct directory; - fat_get_dir_entry_of_path(fs, "/", &directory); - - struct fat_dir_struct* dd = fat_open_dir(fs, &directory); - if(!dd) - { -#if DEBUG - uart_puts_p(PSTR("opening root directory failed\n")); -#endif - continue; - } - - /* print some card information as a boot message */ - print_disk_info(fs); - - /* provide a simple shell */ - char buffer[24]; - while(1) - { - /* print prompt */ - uart_putc('>'); - uart_putc(' '); - - /* read command */ - char* command = buffer; - if(read_line(command, sizeof(buffer)) < 1) - continue; - - /* execute command */ - if(strcmp_P(command, PSTR("init")) == 0) - { - break; - } - else if(strncmp_P(command, PSTR("cd "), 3) == 0) - { - command += 3; - if(command[0] == '\0') - continue; - - /* change directory */ - struct fat_dir_entry_struct subdir_entry; - if(find_file_in_dir(fs, dd, command, &subdir_entry)) - { - struct fat_dir_struct* dd_new = fat_open_dir(fs, &subdir_entry); - if(dd_new) - { - fat_close_dir(dd); - dd = dd_new; - continue; - } - } - - uart_puts_p(PSTR("directory not found: ")); - uart_puts(command); - uart_putc('\n'); - } - else if(strcmp_P(command, PSTR("ls")) == 0) - { - /* print directory listing */ - struct fat_dir_entry_struct dir_entry; - while(fat_read_dir(dd, &dir_entry)) - { - uint8_t spaces = sizeof(dir_entry.long_name) - strlen(dir_entry.long_name) + 4; - - uart_puts(dir_entry.long_name); - uart_putc(dir_entry.attributes & FAT_ATTRIB_DIR ? '/' : ' '); - while(spaces--) - uart_putc(' '); - uart_putdw_dec(dir_entry.file_size); - uart_putc('\n'); - } - } - else if(strncmp_P(command, PSTR("cat "), 4) == 0) - { - command += 4; - if(command[0] == '\0') - continue; - - /* search file in current directory and open it */ - struct fat_file_struct* fd = open_file_in_dir(fs, dd, command); - if(!fd) - { - uart_puts_p(PSTR("error opening ")); - uart_puts(command); - uart_putc('\n'); - continue; - } - - /* print file contents */ - uint8_t buffer[8]; - uint32_t offset = 0; - intptr_t count; - while((count = fat_read_file(fd, buffer, sizeof(buffer))) > 0) - { - uart_putdw_hex(offset); - uart_putc(':'); - for(intptr_t i = 0; i < count; ++i) - { - uart_putc(' '); - uart_putc_hex(buffer[i]); - } - uart_putc('\n'); - offset += 8; - } - - fat_close_file(fd); - } - else if(strcmp_P(command, PSTR("disk")) == 0) - { - if(!print_disk_info(fs)) - uart_puts_p(PSTR("error reading disk info\n")); - } -#if FAT_WRITE_SUPPORT - else if(strncmp_P(command, PSTR("rm "), 3) == 0) - { - command += 3; - if(command[0] == '\0') - continue; - - struct fat_dir_entry_struct file_entry; - if(find_file_in_dir(fs, dd, command, &file_entry)) - { - if(fat_delete_file(fs, &file_entry)) - continue; - } - - uart_puts_p(PSTR("error deleting file: ")); - uart_puts(command); - uart_putc('\n'); - } - else if(strncmp_P(command, PSTR("touch "), 6) == 0) - { - command += 6; - if(command[0] == '\0') - continue; - - struct fat_dir_entry_struct file_entry; - if(!fat_create_file(dd, command, &file_entry)) - { - uart_puts_p(PSTR("error creating file: ")); - uart_puts(command); - uart_putc('\n'); - } - } - else if(strncmp_P(command, PSTR("mv "), 3) == 0) - { - command += 3; - if(command[0] == '\0') - continue; - - char* target = command; - while(*target != ' ' && *target != '\0') - ++target; - - if(*target == ' ') - *target++ = '\0'; - else - continue; - - struct fat_dir_entry_struct file_entry; - if(find_file_in_dir(fs, dd, command, &file_entry)) - { - if(fat_move_file(fs, &file_entry, dd, target)) - continue; - } - - uart_puts_p(PSTR("error moving file: ")); - uart_puts(command); - uart_putc('\n'); - } - else if(strncmp_P(command, PSTR("write "), 6) == 0) - { - command += 6; - if(command[0] == '\0') - continue; - - char* offset_value = command; - while(*offset_value != ' ' && *offset_value != '\0') - ++offset_value; - - if(*offset_value == ' ') - *offset_value++ = '\0'; - else - continue; - - /* search file in current directory and open it */ - struct fat_file_struct* fd = open_file_in_dir(fs, dd, command); - if(!fd) - { - uart_puts_p(PSTR("error opening ")); - uart_puts(command); - uart_putc('\n'); - continue; - } - - int32_t offset = strtolong(offset_value); - if(!fat_seek_file(fd, &offset, FAT_SEEK_SET)) - { - uart_puts_p(PSTR("error seeking on ")); - uart_puts(command); - uart_putc('\n'); - - fat_close_file(fd); - continue; - } - - /* read text from the shell and write it to the file */ - uint8_t data_len; - while(1) - { - /* give a different prompt */ - uart_putc('<'); - uart_putc(' '); - - /* read one line of text */ - data_len = read_line(buffer, sizeof(buffer)); - if(!data_len) - break; - - /* write text to file */ - if(fat_write_file(fd, (uint8_t*) buffer, data_len) != data_len) - { - uart_puts_p(PSTR("error writing to file\n")); - break; - } - } - - fat_close_file(fd); - } - else if(strncmp_P(command, PSTR("mkdir "), 6) == 0) - { - command += 6; - if(command[0] == '\0') - continue; - - struct fat_dir_entry_struct dir_entry; - if(!fat_create_dir(dd, command, &dir_entry)) - { - uart_puts_p(PSTR("error creating directory: ")); - uart_puts(command); - uart_putc('\n'); - } - } -#endif -#if SD_RAW_WRITE_BUFFERING - else if(strcmp_P(command, PSTR("sync")) == 0) - { - if(!sd_raw_sync()) - uart_puts_p(PSTR("error syncing disk\n")); - } -#endif - else - { - uart_puts_p(PSTR("unknown command: ")); - uart_puts(command); - uart_putc('\n'); - } - } - - /* close directory */ - fat_close_dir(dd); - - /* close file system */ - fat_close(fs); - - /* close partition */ - partition_close(partition); } return 0; -} - -uint8_t read_line(char* buffer, uint8_t buffer_length) -{ - memset(buffer, 0, buffer_length); - - uint8_t read_length = 0; - while(read_length < buffer_length - 1) - { - uint8_t c = uart_getc(); - - if(c == 0x08 || c == 0x7f) - { - if(read_length < 1) - continue; - - --read_length; - buffer[read_length] = '\0'; - - uart_putc(0x08); - uart_putc(' '); - uart_putc(0x08); - - continue; - } - - uart_putc(c); - - if(c == '\n') - { - buffer[read_length] = '\0'; - break; - } - else - { - buffer[read_length] = c; - ++read_length; - } - } - - return read_length; -} - -uint32_t strtolong(const char* str) -{ - uint32_t l = 0; - while(*str >= '0' && *str <= '9') - l = l * 10 + (*str++ - '0'); - - return l; -} - -uint8_t find_file_in_dir(struct fat_fs_struct* fs, struct fat_dir_struct* dd, const char* name, struct fat_dir_entry_struct* dir_entry) -{ - while(fat_read_dir(dd, dir_entry)) - { - if(strcmp(dir_entry->long_name, name) == 0) - { - fat_reset_dir(dd); - return 1; - } - } - - return 0; -} - -struct fat_file_struct* open_file_in_dir(struct fat_fs_struct* fs, struct fat_dir_struct* dd, const char* name) -{ - struct fat_dir_entry_struct file_entry; - if(!find_file_in_dir(fs, dd, name, &file_entry)) - return 0; - - return fat_open_file(fs, &file_entry); -} - -uint8_t print_disk_info(const struct fat_fs_struct* fs) -{ - if(!fs) - return 0; - - struct sd_raw_info disk_info; - if(!sd_raw_get_info(&disk_info)) - return 0; - - uart_puts_p(PSTR("manuf: 0x")); uart_putc_hex(disk_info.manufacturer); uart_putc('\n'); - uart_puts_p(PSTR("oem: ")); uart_puts((char*) disk_info.oem); uart_putc('\n'); - uart_puts_p(PSTR("prod: ")); uart_puts((char*) disk_info.product); uart_putc('\n'); - uart_puts_p(PSTR("rev: ")); uart_putc_hex(disk_info.revision); uart_putc('\n'); - uart_puts_p(PSTR("serial: 0x")); uart_putdw_hex(disk_info.serial); uart_putc('\n'); - uart_puts_p(PSTR("date: ")); uart_putw_dec(disk_info.manufacturing_month); uart_putc('/'); - uart_putw_dec(disk_info.manufacturing_year); uart_putc('\n'); - uart_puts_p(PSTR("size: ")); uart_putdw_dec(disk_info.capacity / 1024 / 1024); uart_puts_p(PSTR("MB\n")); - uart_puts_p(PSTR("copy: ")); uart_putw_dec(disk_info.flag_copy); uart_putc('\n'); - uart_puts_p(PSTR("wr.pr.: ")); uart_putw_dec(disk_info.flag_write_protect_temp); uart_putc('/'); - uart_putw_dec(disk_info.flag_write_protect); uart_putc('\n'); - uart_puts_p(PSTR("format: ")); uart_putw_dec(disk_info.format); uart_putc('\n'); - uart_puts_p(PSTR("free: ")); uart_putdw_dec(fat_get_fs_free(fs)); uart_putc('/'); - uart_putdw_dec(fat_get_fs_size(fs)); uart_putc('\n'); - - return 1; -} - -#if FAT_DATETIME_SUPPORT -void get_datetime(uint16_t* year, uint8_t* month, uint8_t* day, uint8_t* hour, uint8_t* min, uint8_t* sec) -{ - *year = 2007; - *month = 1; - *day = 1; - *hour = 0; - *min = 0; - *sec = 0; -} -#endif - - +} \ No newline at end of file diff --git a/final_project/sd_reader/sd-reader.map b/final_project/sd_reader/sd-reader.map index d0b9c52..b6967b8 100644 --- a/final_project/sd_reader/sd-reader.map +++ b/final_project/sd_reader/sd-reader.map @@ -3,11 +3,9 @@ Archive member included to satisfy reference by file (symbol) /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_mulsi3.o) fat.o (__mulsi3) /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodhi4.o) - uart.o (__udivmodhi4) -/usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_divmodhi4.o) - fat.o (__divmodhi4) + fat.o (__udivmodhi4) /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodsi4.o) - uart.o (__udivmodsi4) + fat.o (__udivmodsi4) /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega168.o (exit) /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_tablejump2.o) @@ -16,28 +14,34 @@ Archive member included to satisfy reference by file (symbol) fat.o (__do_copy_data) /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o) partition.o (__do_clear_bss) -/usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulhisi3.o) - fat.o (__umulhisi3) /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muluhisi3.o) - uart.o (__muluhisi3) -/usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strcmp_P.o) - main.o (strcmp_P) -/usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strncmp_P.o) - main.o (strncmp_P) -/usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memcpy.o) - sd_raw.o (memcpy) -/usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memset.o) - fat.o (memset) + /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_mulsi3.o) (__muluhisi3) +/usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muldi3.o) + fat.o (__muldi3) +/usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muldi3_6.o) + /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muldi3.o) (__muldi3_6) +/usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulsidi3.o) + fat.o (__umulsidi3) +/usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_ashldi3.o) + sd_raw.o (__ashldi3) +/usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_ashrdi3.o) + sd_raw.o (__lshrdi3) +/usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_adddi3.o) + sd_raw.o (__adddi3) +/usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_adddi3_s8.o) + fat.o (__adddi3_s8) +/usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_subdi3.o) + sd_raw.o (__subdi3) +/usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_cmpdi2.o) + fat.o (__cmpdi2) +/usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_cmpdi2_s8.o) + fat.o (__cmpdi2_s8) +/usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulhisi3.o) + /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muluhisi3.o) (__umulhisi3) /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strchr.o) fat.o (strchr) -/usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strcmp.o) - fat.o (strcmp) /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strncmp.o) fat.o (strncmp) -/usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strncpy.o) - fat.o (strncpy) -/usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strrchr.o) - fat.o (strrchr) Memory Configuration @@ -57,8 +61,8 @@ Address of section .data set to 0x800100 LOAD /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega168.o LOAD partition.o LOAD sd_raw.o -LOAD uart.o LOAD byteordering.o +LOAD lcd.o LOAD fat.o LOAD main.o START GROUP @@ -165,7 +169,7 @@ END GROUP .rela.plt *(.rela.plt) -.text 0x0000000000000000 0x3574 +.text 0x0000000000000000 0x2502 *(.vectors) .vectors 0x0000000000000000 0x68 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega168.o 0x0000000000000000 __vectors @@ -183,36 +187,35 @@ END GROUP *libprintf_flt.a:*(.progmem.data) *libc.a:*(.progmem.data) *(.progmem*) - .progmem.data 0x0000000000000086 0x20c main.o - 0x0000000000000292 . = ALIGN (0x2) + 0x0000000000000086 . = ALIGN (0x2) *(.jumptables) *(.jumptables*) *(.lowtext) *(.lowtext*) - 0x0000000000000292 __ctors_start = . + 0x0000000000000086 __ctors_start = . *(.ctors) - 0x0000000000000292 __ctors_end = . - 0x0000000000000292 __dtors_start = . + 0x0000000000000086 __ctors_end = . + 0x0000000000000086 __dtors_start = . *(.dtors) - 0x0000000000000292 __dtors_end = . + 0x0000000000000086 __dtors_end = . SORT(*)(.ctors) SORT(*)(.dtors) *(.init0) - .init0 0x0000000000000292 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega168.o - 0x0000000000000292 __init + .init0 0x0000000000000086 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega168.o + 0x0000000000000086 __init *(.init0) *(.init1) *(.init1) *(.init2) - .init2 0x0000000000000292 0xc /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega168.o + .init2 0x0000000000000086 0xc /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega168.o *(.init2) *(.init3) *(.init3) *(.init4) - .init4 0x000000000000029e 0x16 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o) - 0x000000000000029e __do_copy_data - .init4 0x00000000000002b4 0x10 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o) - 0x00000000000002b4 __do_clear_bss + .init4 0x0000000000000092 0x16 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o) + 0x0000000000000092 __do_copy_data + .init4 0x00000000000000a8 0x10 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o) + 0x00000000000000a8 __do_clear_bss *(.init4) *(.init5) *(.init5) @@ -223,279 +226,378 @@ END GROUP *(.init8) *(.init8) *(.init9) - .init9 0x00000000000002c4 0x8 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega168.o + .init9 0x00000000000000b8 0x8 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega168.o *(.init9) *(.text) - .text 0x00000000000002cc 0x4 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega168.o - 0x00000000000002cc __vector_22 - 0x00000000000002cc __vector_1 - 0x00000000000002cc __vector_24 - 0x00000000000002cc __vector_12 - 0x00000000000002cc __bad_interrupt - 0x00000000000002cc __vector_6 - 0x00000000000002cc __vector_3 - 0x00000000000002cc __vector_23 - 0x00000000000002cc __vector_25 - 0x00000000000002cc __vector_11 - 0x00000000000002cc __vector_13 - 0x00000000000002cc __vector_17 - 0x00000000000002cc __vector_19 - 0x00000000000002cc __vector_7 - 0x00000000000002cc __vector_5 - 0x00000000000002cc __vector_4 - 0x00000000000002cc __vector_9 - 0x00000000000002cc __vector_2 - 0x00000000000002cc __vector_21 - 0x00000000000002cc __vector_15 - 0x00000000000002cc __vector_8 - 0x00000000000002cc __vector_14 - 0x00000000000002cc __vector_10 - 0x00000000000002cc __vector_16 - 0x00000000000002cc __vector_20 - .text 0x00000000000002d0 0x126 partition.o - 0x00000000000002d0 partition_open - 0x00000000000003e6 partition_close - .text 0x00000000000003f6 0x7de sd_raw.o - 0x0000000000000484 sd_raw_available - 0x0000000000000490 sd_raw_locked - 0x000000000000049e sd_raw_sync - 0x00000000000004d2 sd_raw_read - 0x0000000000000602 sd_raw_init - 0x0000000000000714 sd_raw_read_interval - 0x00000000000007ba sd_raw_write - 0x0000000000000930 sd_raw_write_interval - 0x00000000000009d8 sd_raw_get_info - .text 0x0000000000000bd4 0x224 uart.o - 0x0000000000000bd4 uart_init - 0x0000000000000bec uart_putc - 0x0000000000000c0a uart_putc_hex - 0x0000000000000c34 uart_putw_hex - 0x0000000000000c46 uart_putdw_hex - 0x0000000000000c66 uart_putw_dec - 0x0000000000000cde uart_putdw_dec - 0x0000000000000d96 uart_puts - 0x0000000000000dae uart_puts_p - 0x0000000000000dcc uart_getc - 0x0000000000000df6 __vector_18 - .text 0x0000000000000df8 0x28 byteordering.o - 0x0000000000000df8 read16 - 0x0000000000000e00 read32 - 0x0000000000000e0c write16 - 0x0000000000000e14 write32 - .text 0x0000000000000e20 0x1dd4 fat.o - 0x00000000000018da fat_open - 0x0000000000001bec fat_close - 0x0000000000001bf8 fat_open_file - 0x0000000000001c58 fat_close_file - 0x0000000000001c64 fat_read_file - 0x0000000000001e6e fat_write_file - 0x00000000000020f6 fat_resize_file - 0x00000000000022de fat_seek_file - 0x0000000000002380 fat_open_dir - 0x00000000000023e8 fat_close_dir - 0x00000000000023f4 fat_reset_dir - 0x000000000000240e fat_read_dir - 0x000000000000259c fat_get_dir_entry_of_path - 0x00000000000026ae fat_create_file - 0x000000000000275c fat_delete_file - 0x0000000000002848 fat_move_file - 0x0000000000002934 fat_create_dir - 0x0000000000002aa2 fat_get_fs_size - 0x0000000000002ad6 fat_get_fs_free - .text 0x0000000000002bf4 0x23a main.o - .text 0x0000000000002e2e 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_mulsi3.o) - .text 0x0000000000002e2e 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodhi4.o) - .text 0x0000000000002e2e 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_divmodhi4.o) - .text 0x0000000000002e2e 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodsi4.o) - .text 0x0000000000002e2e 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) - .text 0x0000000000002e2e 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_tablejump2.o) - .text 0x0000000000002e2e 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o) - .text 0x0000000000002e2e 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o) - .text 0x0000000000002e2e 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulhisi3.o) - .text 0x0000000000002e2e 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muluhisi3.o) - .text 0x0000000000002e2e 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strcmp_P.o) - .text 0x0000000000002e2e 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strncmp_P.o) - .text 0x0000000000002e2e 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memcpy.o) - .text 0x0000000000002e2e 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memset.o) - .text 0x0000000000002e2e 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strchr.o) - .text 0x0000000000002e2e 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strcmp.o) - .text 0x0000000000002e2e 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strncmp.o) - .text 0x0000000000002e2e 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strncpy.o) - .text 0x0000000000002e2e 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strrchr.o) - 0x0000000000002e2e . = ALIGN (0x2) + .text 0x00000000000000c0 0x4 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega168.o + 0x00000000000000c0 __vector_22 + 0x00000000000000c0 __vector_1 + 0x00000000000000c0 __vector_24 + 0x00000000000000c0 __vector_12 + 0x00000000000000c0 __bad_interrupt + 0x00000000000000c0 __vector_6 + 0x00000000000000c0 __vector_3 + 0x00000000000000c0 __vector_23 + 0x00000000000000c0 __vector_25 + 0x00000000000000c0 __vector_11 + 0x00000000000000c0 __vector_13 + 0x00000000000000c0 __vector_17 + 0x00000000000000c0 __vector_19 + 0x00000000000000c0 __vector_7 + 0x00000000000000c0 __vector_5 + 0x00000000000000c0 __vector_4 + 0x00000000000000c0 __vector_9 + 0x00000000000000c0 __vector_2 + 0x00000000000000c0 __vector_21 + 0x00000000000000c0 __vector_15 + 0x00000000000000c0 __vector_8 + 0x00000000000000c0 __vector_14 + 0x00000000000000c0 __vector_10 + 0x00000000000000c0 __vector_16 + 0x00000000000000c0 __vector_18 + 0x00000000000000c0 __vector_20 + .text 0x00000000000000c4 0x144 partition.o + 0x00000000000000c4 partition_open + 0x00000000000001f8 partition_close + .text 0x0000000000000208 0x868 sd_raw.o + 0x0000000000000296 sd_raw_available + 0x00000000000002a2 sd_raw_init + 0x0000000000000420 sd_raw_locked + 0x000000000000042e sd_raw_read + 0x00000000000005ae sd_raw_read_interval + 0x000000000000080c sd_raw_get_info + .text 0x0000000000000a70 0x28 byteordering.o + 0x0000000000000a70 read16 + 0x0000000000000a78 read32 + 0x0000000000000a84 write16 + 0x0000000000000a8c write32 + .text 0x0000000000000a98 0x1f8 lcd.o + 0x0000000000000b6a lcd_command + 0x0000000000000b7c lcd_data + 0x0000000000000b8e lcd_gotoxy + 0x0000000000000b9c lcd_getxy + 0x0000000000000ba4 lcd_clrscr + 0x0000000000000baa lcd_home + 0x0000000000000bb0 lcd_putc + 0x0000000000000bd8 lcd_puts + 0x0000000000000bf0 lcd_puts_p + 0x0000000000000c0e lcd_init + .text 0x0000000000000c90 0x14fa fat.o + 0x000000000000115a fat_open + 0x0000000000001610 fat_close + 0x000000000000161c fat_open_file + 0x0000000000001698 fat_close_file + 0x00000000000016a4 fat_read_file + 0x0000000000001a76 fat_seek_file + 0x0000000000001b06 fat_open_dir + 0x0000000000001b76 fat_close_dir + 0x0000000000001b82 fat_reset_dir + 0x0000000000001ba4 fat_read_dir + 0x0000000000001e6e fat_get_dir_entry_of_path + 0x0000000000001f80 fat_get_fs_size + 0x0000000000001fee fat_get_fs_free + .text 0x000000000000218a 0x0 main.o + .text 0x000000000000218a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_mulsi3.o) + .text 0x000000000000218a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodhi4.o) + .text 0x000000000000218a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodsi4.o) + .text 0x000000000000218a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) + .text 0x000000000000218a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_tablejump2.o) + .text 0x000000000000218a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o) + .text 0x000000000000218a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o) + .text 0x000000000000218a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muluhisi3.o) + .text 0x000000000000218a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muldi3.o) + .text 0x000000000000218a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muldi3_6.o) + .text 0x000000000000218a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulsidi3.o) + .text 0x000000000000218a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_ashldi3.o) + .text 0x000000000000218a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_ashrdi3.o) + .text 0x000000000000218a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_adddi3.o) + .text 0x000000000000218a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_adddi3_s8.o) + .text 0x000000000000218a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_subdi3.o) + .text 0x000000000000218a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_cmpdi2.o) + .text 0x000000000000218a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_cmpdi2_s8.o) + .text 0x000000000000218a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulhisi3.o) + .text 0x000000000000218a 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strchr.o) + .text 0x000000000000218a 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strncmp.o) + 0x000000000000218a . = ALIGN (0x2) *(.text.*) - .text.startup 0x0000000000002e2e 0x588 main.o - 0x0000000000002e2e main + .text.startup 0x000000000000218a 0x9a main.o + 0x000000000000218a main .text.libgcc.mul - 0x00000000000033b6 0x20 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_mulsi3.o) - 0x00000000000033b6 __mulsi3 + 0x0000000000002224 0x20 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_mulsi3.o) + 0x0000000000002224 __mulsi3 .text.libgcc.div - 0x00000000000033d6 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_mulsi3.o) - .text.libgcc 0x00000000000033d6 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_mulsi3.o) + 0x0000000000002244 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_mulsi3.o) + .text.libgcc 0x0000000000002244 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_mulsi3.o) .text.libgcc.prologue - 0x00000000000033d6 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_mulsi3.o) + 0x0000000000002244 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_mulsi3.o) .text.libgcc.builtins - 0x00000000000033d6 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_mulsi3.o) + 0x0000000000002244 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_mulsi3.o) .text.libgcc.fmul - 0x00000000000033d6 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_mulsi3.o) + 0x0000000000002244 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_mulsi3.o) .text.libgcc.fixed - 0x00000000000033d6 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_mulsi3.o) + 0x0000000000002244 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_mulsi3.o) .text.libgcc.mul - 0x00000000000033d6 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodhi4.o) + 0x0000000000002244 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodhi4.o) .text.libgcc.div - 0x00000000000033d6 0x28 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodhi4.o) - 0x00000000000033d6 __udivmodhi4 - .text.libgcc 0x00000000000033fe 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodhi4.o) + 0x0000000000002244 0x28 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodhi4.o) + 0x0000000000002244 __udivmodhi4 + .text.libgcc 0x000000000000226c 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodhi4.o) .text.libgcc.prologue - 0x00000000000033fe 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodhi4.o) + 0x000000000000226c 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodhi4.o) .text.libgcc.builtins - 0x00000000000033fe 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodhi4.o) + 0x000000000000226c 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodhi4.o) .text.libgcc.fmul - 0x00000000000033fe 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodhi4.o) + 0x000000000000226c 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodhi4.o) .text.libgcc.fixed - 0x00000000000033fe 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodhi4.o) + 0x000000000000226c 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodhi4.o) .text.libgcc.mul - 0x00000000000033fe 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_divmodhi4.o) + 0x000000000000226c 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodsi4.o) .text.libgcc.div - 0x00000000000033fe 0x28 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_divmodhi4.o) - 0x00000000000033fe __divmodhi4 - 0x00000000000033fe _div - .text.libgcc 0x0000000000003426 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_divmodhi4.o) + 0x000000000000226c 0x44 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodsi4.o) + 0x000000000000226c __udivmodsi4 + .text.libgcc 0x00000000000022b0 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodsi4.o) .text.libgcc.prologue - 0x0000000000003426 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_divmodhi4.o) + 0x00000000000022b0 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodsi4.o) .text.libgcc.builtins - 0x0000000000003426 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_divmodhi4.o) + 0x00000000000022b0 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodsi4.o) .text.libgcc.fmul - 0x0000000000003426 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_divmodhi4.o) + 0x00000000000022b0 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodsi4.o) .text.libgcc.fixed - 0x0000000000003426 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_divmodhi4.o) + 0x00000000000022b0 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodsi4.o) .text.libgcc.mul - 0x0000000000003426 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodsi4.o) + 0x00000000000022b0 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) .text.libgcc.div - 0x0000000000003426 0x44 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodsi4.o) - 0x0000000000003426 __udivmodsi4 - .text.libgcc 0x000000000000346a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodsi4.o) + 0x00000000000022b0 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) + .text.libgcc 0x00000000000022b0 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) .text.libgcc.prologue - 0x000000000000346a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodsi4.o) + 0x00000000000022b0 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) .text.libgcc.builtins - 0x000000000000346a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodsi4.o) + 0x00000000000022b0 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) .text.libgcc.fmul - 0x000000000000346a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodsi4.o) + 0x00000000000022b0 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) .text.libgcc.fixed - 0x000000000000346a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodsi4.o) + 0x00000000000022b0 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) .text.libgcc.mul - 0x000000000000346a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) + 0x00000000000022b0 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_tablejump2.o) .text.libgcc.div - 0x000000000000346a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) - .text.libgcc 0x000000000000346a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) + 0x00000000000022b0 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_tablejump2.o) + .text.libgcc 0x00000000000022b0 0xc /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_tablejump2.o) + 0x00000000000022b0 __tablejump2__ .text.libgcc.prologue - 0x000000000000346a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) + 0x00000000000022bc 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_tablejump2.o) .text.libgcc.builtins - 0x000000000000346a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) + 0x00000000000022bc 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_tablejump2.o) .text.libgcc.fmul - 0x000000000000346a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) + 0x00000000000022bc 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_tablejump2.o) .text.libgcc.fixed - 0x000000000000346a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) + 0x00000000000022bc 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_tablejump2.o) .text.libgcc.mul - 0x000000000000346a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_tablejump2.o) + 0x00000000000022bc 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o) .text.libgcc.div - 0x000000000000346a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_tablejump2.o) - .text.libgcc 0x000000000000346a 0xc /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_tablejump2.o) - 0x000000000000346a __tablejump2__ + 0x00000000000022bc 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o) + .text.libgcc 0x00000000000022bc 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o) .text.libgcc.prologue - 0x0000000000003476 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_tablejump2.o) + 0x00000000000022bc 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o) .text.libgcc.builtins - 0x0000000000003476 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_tablejump2.o) + 0x00000000000022bc 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o) .text.libgcc.fmul - 0x0000000000003476 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_tablejump2.o) + 0x00000000000022bc 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o) .text.libgcc.fixed - 0x0000000000003476 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_tablejump2.o) + 0x00000000000022bc 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o) .text.libgcc.mul - 0x0000000000003476 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o) + 0x00000000000022bc 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o) .text.libgcc.div - 0x0000000000003476 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o) - .text.libgcc 0x0000000000003476 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o) + 0x00000000000022bc 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o) + .text.libgcc 0x00000000000022bc 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o) .text.libgcc.prologue - 0x0000000000003476 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o) + 0x00000000000022bc 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o) .text.libgcc.builtins - 0x0000000000003476 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o) + 0x00000000000022bc 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o) .text.libgcc.fmul - 0x0000000000003476 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o) + 0x00000000000022bc 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o) .text.libgcc.fixed - 0x0000000000003476 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o) + 0x00000000000022bc 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o) .text.libgcc.mul - 0x0000000000003476 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o) + 0x00000000000022bc 0x16 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muluhisi3.o) + 0x00000000000022bc __muluhisi3 .text.libgcc.div - 0x0000000000003476 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o) - .text.libgcc 0x0000000000003476 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o) + 0x00000000000022d2 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muluhisi3.o) + .text.libgcc 0x00000000000022d2 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muluhisi3.o) .text.libgcc.prologue - 0x0000000000003476 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o) + 0x00000000000022d2 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muluhisi3.o) .text.libgcc.builtins - 0x0000000000003476 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o) + 0x00000000000022d2 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muluhisi3.o) .text.libgcc.fmul - 0x0000000000003476 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o) + 0x00000000000022d2 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muluhisi3.o) .text.libgcc.fixed - 0x0000000000003476 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o) + 0x00000000000022d2 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muluhisi3.o) .text.libgcc.mul - 0x0000000000003476 0x1e /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulhisi3.o) - 0x0000000000003476 __umulhisi3 + 0x00000000000022d2 0xa0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muldi3.o) + 0x00000000000022d2 __muldi3 .text.libgcc.div - 0x0000000000003494 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulhisi3.o) - .text.libgcc 0x0000000000003494 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulhisi3.o) + 0x0000000000002372 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muldi3.o) + .text.libgcc 0x0000000000002372 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muldi3.o) .text.libgcc.prologue - 0x0000000000003494 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulhisi3.o) + 0x0000000000002372 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muldi3.o) .text.libgcc.builtins - 0x0000000000003494 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulhisi3.o) + 0x0000000000002372 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muldi3.o) .text.libgcc.fmul - 0x0000000000003494 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulhisi3.o) + 0x0000000000002372 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muldi3.o) .text.libgcc.fixed - 0x0000000000003494 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulhisi3.o) + 0x0000000000002372 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muldi3.o) .text.libgcc.mul - 0x0000000000003494 0x16 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muluhisi3.o) - 0x0000000000003494 __muluhisi3 + 0x0000000000002372 0x12 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muldi3_6.o) + 0x0000000000002372 __muldi3_6 .text.libgcc.div - 0x00000000000034aa 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muluhisi3.o) - .text.libgcc 0x00000000000034aa 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muluhisi3.o) + 0x0000000000002384 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muldi3_6.o) + .text.libgcc 0x0000000000002384 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muldi3_6.o) .text.libgcc.prologue - 0x00000000000034aa 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muluhisi3.o) + 0x0000000000002384 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muldi3_6.o) .text.libgcc.builtins - 0x00000000000034aa 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muluhisi3.o) + 0x0000000000002384 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muldi3_6.o) .text.libgcc.fmul - 0x00000000000034aa 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muluhisi3.o) + 0x0000000000002384 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muldi3_6.o) .text.libgcc.fixed - 0x00000000000034aa 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muluhisi3.o) + 0x0000000000002384 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muldi3_6.o) + .text.libgcc.mul + 0x0000000000002384 0x56 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulsidi3.o) + 0x0000000000002384 __umulsidi3 + 0x0000000000002386 __umulsidi3_helper + .text.libgcc.div + 0x00000000000023da 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulsidi3.o) + .text.libgcc 0x00000000000023da 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulsidi3.o) + .text.libgcc.prologue + 0x00000000000023da 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulsidi3.o) + .text.libgcc.builtins + 0x00000000000023da 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulsidi3.o) + .text.libgcc.fmul + 0x00000000000023da 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulsidi3.o) + .text.libgcc.fixed + 0x00000000000023da 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulsidi3.o) + .text.libgcc.mul + 0x00000000000023da 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_ashldi3.o) + .text.libgcc.div + 0x00000000000023da 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_ashldi3.o) + .text.libgcc 0x00000000000023da 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_ashldi3.o) + .text.libgcc.prologue + 0x00000000000023da 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_ashldi3.o) + .text.libgcc.builtins + 0x00000000000023da 0x32 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_ashldi3.o) + 0x00000000000023da __ashldi3 + .text.libgcc.fmul + 0x000000000000240c 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_ashldi3.o) + .text.libgcc.fixed + 0x000000000000240c 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_ashldi3.o) + .text.libgcc.mul + 0x000000000000240c 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_ashrdi3.o) + .text.libgcc.div + 0x000000000000240c 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_ashrdi3.o) + .text.libgcc 0x000000000000240c 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_ashrdi3.o) + .text.libgcc.prologue + 0x000000000000240c 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_ashrdi3.o) + .text.libgcc.builtins + 0x000000000000240c 0x3c /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_ashrdi3.o) + 0x000000000000240c __ashrdi3 + 0x0000000000002410 __lshrdi3 + .text.libgcc.fmul + 0x0000000000002448 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_ashrdi3.o) + .text.libgcc.fixed + 0x0000000000002448 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_ashrdi3.o) + .text.libgcc.mul + 0x0000000000002448 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_adddi3.o) + .text.libgcc.div + 0x0000000000002448 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_adddi3.o) + .text.libgcc 0x0000000000002448 0x12 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_adddi3.o) + 0x0000000000002448 __adddi3 + .text.libgcc.prologue + 0x000000000000245a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_adddi3.o) + .text.libgcc.builtins + 0x000000000000245a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_adddi3.o) + .text.libgcc.fmul + 0x000000000000245a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_adddi3.o) + .text.libgcc.fixed + 0x000000000000245a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_adddi3.o) + .text.libgcc.mul + 0x000000000000245a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_adddi3_s8.o) + .text.libgcc.div + 0x000000000000245a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_adddi3_s8.o) + .text.libgcc 0x000000000000245a 0x18 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_adddi3_s8.o) + 0x000000000000245a __adddi3_s8 + .text.libgcc.prologue + 0x0000000000002472 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_adddi3_s8.o) + .text.libgcc.builtins + 0x0000000000002472 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_adddi3_s8.o) + .text.libgcc.fmul + 0x0000000000002472 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_adddi3_s8.o) + .text.libgcc.fixed + 0x0000000000002472 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_adddi3_s8.o) + .text.libgcc.mul + 0x0000000000002472 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_subdi3.o) + .text.libgcc.div + 0x0000000000002472 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_subdi3.o) + .text.libgcc 0x0000000000002472 0x12 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_subdi3.o) + 0x0000000000002472 __subdi3 + .text.libgcc.prologue + 0x0000000000002484 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_subdi3.o) + .text.libgcc.builtins + 0x0000000000002484 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_subdi3.o) + .text.libgcc.fmul + 0x0000000000002484 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_subdi3.o) + .text.libgcc.fixed + 0x0000000000002484 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_subdi3.o) + .text.libgcc.mul + 0x0000000000002484 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_cmpdi2.o) + .text.libgcc.div + 0x0000000000002484 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_cmpdi2.o) + .text.libgcc 0x0000000000002484 0x12 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_cmpdi2.o) + 0x0000000000002484 __cmpdi2 + .text.libgcc.prologue + 0x0000000000002496 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_cmpdi2.o) + .text.libgcc.builtins + 0x0000000000002496 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_cmpdi2.o) + .text.libgcc.fmul + 0x0000000000002496 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_cmpdi2.o) + .text.libgcc.fixed + 0x0000000000002496 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_cmpdi2.o) + .text.libgcc.mul + 0x0000000000002496 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_cmpdi2_s8.o) + .text.libgcc.div + 0x0000000000002496 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_cmpdi2_s8.o) + .text.libgcc 0x0000000000002496 0x18 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_cmpdi2_s8.o) + 0x0000000000002496 __cmpdi2_s8 + .text.libgcc.prologue + 0x00000000000024ae 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_cmpdi2_s8.o) + .text.libgcc.builtins + 0x00000000000024ae 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_cmpdi2_s8.o) + .text.libgcc.fmul + 0x00000000000024ae 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_cmpdi2_s8.o) + .text.libgcc.fixed + 0x00000000000024ae 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_cmpdi2_s8.o) + .text.libgcc.mul + 0x00000000000024ae 0x1e /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulhisi3.o) + 0x00000000000024ae __umulhisi3 + .text.libgcc.div + 0x00000000000024cc 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulhisi3.o) + .text.libgcc 0x00000000000024cc 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulhisi3.o) + .text.libgcc.prologue + 0x00000000000024cc 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulhisi3.o) + .text.libgcc.builtins + 0x00000000000024cc 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulhisi3.o) + .text.libgcc.fmul + 0x00000000000024cc 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulhisi3.o) + .text.libgcc.fixed + 0x00000000000024cc 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulhisi3.o) .text.avr-libc - 0x00000000000034aa 0x12 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strcmp_P.o) - 0x00000000000034aa strcmp_P + 0x00000000000024cc 0x16 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strchr.o) + 0x00000000000024cc strchr .text.avr-libc - 0x00000000000034bc 0x1c /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strncmp_P.o) - 0x00000000000034bc strncmp_P - .text.avr-libc - 0x00000000000034d8 0x12 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memcpy.o) - 0x00000000000034d8 memcpy - .text.avr-libc - 0x00000000000034ea 0xe /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memset.o) - 0x00000000000034ea memset - .text.avr-libc - 0x00000000000034f8 0x16 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strchr.o) - 0x00000000000034f8 strchr - .text.avr-libc - 0x000000000000350e 0x12 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strcmp.o) - 0x000000000000350e strcmp - .text.avr-libc - 0x0000000000003520 0x1c /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strncmp.o) - 0x0000000000003520 strncmp - .text.avr-libc - 0x000000000000353c 0x1e /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strncpy.o) - 0x000000000000353c strncpy - .text.avr-libc - 0x000000000000355a 0x16 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strrchr.o) - 0x000000000000355a strrchr - 0x0000000000003570 . = ALIGN (0x2) + 0x00000000000024e2 0x1c /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strncmp.o) + 0x00000000000024e2 strncmp + 0x00000000000024fe . = ALIGN (0x2) *(.fini9) - .fini9 0x0000000000003570 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) - 0x0000000000003570 exit - 0x0000000000003570 _exit + .fini9 0x00000000000024fe 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) + 0x00000000000024fe exit + 0x00000000000024fe _exit *(.fini9) *(.fini8) *(.fini8) @@ -514,39 +616,41 @@ END GROUP *(.fini1) *(.fini1) *(.fini0) - .fini0 0x0000000000003570 0x4 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) + .fini0 0x00000000000024fe 0x4 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) *(.fini0) - 0x0000000000003574 _etext = . + 0x0000000000002502 _etext = . -.data 0x0000000000800100 0x10 load address 0x0000000000003574 +.data 0x0000000000800100 0x10 load address 0x0000000000002502 0x0000000000800100 PROVIDE (__data_start, .) *(.data) .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega168.o .data 0x0000000000800100 0x0 partition.o .data 0x0000000000800100 0x0 sd_raw.o - .data 0x0000000000800100 0x0 uart.o .data 0x0000000000800100 0x0 byteordering.o + .data 0x0000000000800100 0x0 lcd.o .data 0x0000000000800100 0x0 fat.o .data 0x0000000000800100 0x0 main.o .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_mulsi3.o) .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodhi4.o) - .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_divmodhi4.o) .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodsi4.o) .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_tablejump2.o) .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o) .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o) - .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulhisi3.o) .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muluhisi3.o) - .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strcmp_P.o) - .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strncmp_P.o) - .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memcpy.o) - .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memset.o) + .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muldi3.o) + .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muldi3_6.o) + .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulsidi3.o) + .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_ashldi3.o) + .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_ashrdi3.o) + .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_adddi3.o) + .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_adddi3_s8.o) + .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_subdi3.o) + .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_cmpdi2.o) + .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_cmpdi2_s8.o) + .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulhisi3.o) .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strchr.o) - .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strcmp.o) .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strncmp.o) - .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strncpy.o) - .data 0x0000000000800100 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strrchr.o) *(.data*) *(.rodata) .rodata 0x0000000000800100 0xd fat.o @@ -559,46 +663,48 @@ END GROUP 0x0000000000800110 _edata = . 0x0000000000800110 PROVIDE (__data_end, .) -.bss 0x0000000000800110 0x2c8 +.bss 0x0000000000800110 0xf5 0x0000000000800110 PROVIDE (__bss_start, .) *(.bss) .bss 0x0000000000800110 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega168.o .bss 0x0000000000800110 0x11 partition.o - .bss 0x0000000000800121 0x206 sd_raw.o - .bss 0x0000000000800327 0x0 uart.o - .bss 0x0000000000800327 0x0 byteordering.o - .bss 0x0000000000800327 0xb1 fat.o - .bss 0x00000000008003d8 0x0 main.o - .bss 0x00000000008003d8 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_mulsi3.o) - .bss 0x00000000008003d8 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodhi4.o) - .bss 0x00000000008003d8 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_divmodhi4.o) - .bss 0x00000000008003d8 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodsi4.o) - .bss 0x00000000008003d8 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) - .bss 0x00000000008003d8 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_tablejump2.o) - .bss 0x00000000008003d8 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o) - .bss 0x00000000008003d8 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o) - .bss 0x00000000008003d8 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulhisi3.o) - .bss 0x00000000008003d8 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muluhisi3.o) - .bss 0x00000000008003d8 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strcmp_P.o) - .bss 0x00000000008003d8 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strncmp_P.o) - .bss 0x00000000008003d8 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memcpy.o) - .bss 0x00000000008003d8 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memset.o) - .bss 0x00000000008003d8 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strchr.o) - .bss 0x00000000008003d8 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strcmp.o) - .bss 0x00000000008003d8 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strncmp.o) - .bss 0x00000000008003d8 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strncpy.o) - .bss 0x00000000008003d8 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strrchr.o) + .bss 0x0000000000800121 0x1 sd_raw.o + .bss 0x0000000000800122 0x0 byteordering.o + .bss 0x0000000000800122 0x0 lcd.o + .bss 0x0000000000800122 0xe3 fat.o + .bss 0x0000000000800205 0x0 main.o + .bss 0x0000000000800205 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_mulsi3.o) + .bss 0x0000000000800205 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodhi4.o) + .bss 0x0000000000800205 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodsi4.o) + .bss 0x0000000000800205 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) + .bss 0x0000000000800205 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_tablejump2.o) + .bss 0x0000000000800205 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o) + .bss 0x0000000000800205 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o) + .bss 0x0000000000800205 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muluhisi3.o) + .bss 0x0000000000800205 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muldi3.o) + .bss 0x0000000000800205 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muldi3_6.o) + .bss 0x0000000000800205 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulsidi3.o) + .bss 0x0000000000800205 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_ashldi3.o) + .bss 0x0000000000800205 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_ashrdi3.o) + .bss 0x0000000000800205 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_adddi3.o) + .bss 0x0000000000800205 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_adddi3_s8.o) + .bss 0x0000000000800205 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_subdi3.o) + .bss 0x0000000000800205 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_cmpdi2.o) + .bss 0x0000000000800205 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_cmpdi2_s8.o) + .bss 0x0000000000800205 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulhisi3.o) + .bss 0x0000000000800205 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strchr.o) + .bss 0x0000000000800205 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strncmp.o) *(.bss*) *(COMMON) - 0x00000000008003d8 PROVIDE (__bss_end, .) - 0x0000000000003574 __data_load_start = LOADADDR (.data) - 0x0000000000003584 __data_load_end = (__data_load_start + SIZEOF (.data)) + 0x0000000000800205 PROVIDE (__bss_end, .) + 0x0000000000002502 __data_load_start = LOADADDR (.data) + 0x0000000000002512 __data_load_end = (__data_load_start + SIZEOF (.data)) -.noinit 0x00000000008003d8 0x0 +.noinit 0x0000000000800205 0x0 [!provide] PROVIDE (__noinit_start, .) *(.noinit*) [!provide] PROVIDE (__noinit_end, .) - 0x00000000008003d8 _end = . + 0x0000000000800205 _end = . [!provide] PROVIDE (__heap_start, .) .eeprom 0x0000000000810000 0x0 @@ -620,23 +726,23 @@ END GROUP .user_signatures *(.user_signatures*) -.stab 0x0000000000000000 0x67bc +.stab 0x0000000000000000 0x4b3c *(.stab) .stab 0x0000000000000000 0x6e4 partition.o - .stab 0x00000000000006e4 0x1350 sd_raw.o - 0x1500 (size before relaxing) - .stab 0x0000000000001a34 0xa20 uart.o - 0xbf4 (size before relaxing) - .stab 0x0000000000002454 0x414 byteordering.o + .stab 0x00000000000006e4 0x129c sd_raw.o + 0x144c (size before relaxing) + .stab 0x0000000000001980 0x414 byteordering.o 0x594 (size before relaxing) - .stab 0x0000000000002868 0x2fdc fat.o - 0x31f8 (size before relaxing) - .stab 0x0000000000005844 0xf78 main.o - 0x1200 (size before relaxing) + .stab 0x0000000000001d94 0xe34 lcd.o + 0x1008 (size before relaxing) + .stab 0x0000000000002bc8 0x1b0c fat.o + 0x1d28 (size before relaxing) + .stab 0x00000000000046d4 0x468 main.o + 0x6fc (size before relaxing) -.stabstr 0x0000000000000000 0x2a7b +.stabstr 0x0000000000000000 0x2390 *(.stabstr) - .stabstr 0x0000000000000000 0x2a7b partition.o + .stabstr 0x0000000000000000 0x2390 partition.o .stab.excl *(.stab.excl) @@ -655,8 +761,8 @@ END GROUP .comment 0x0000000000000000 0x11 partition.o 0x12 (size before relaxing) .comment 0x0000000000000011 0x12 sd_raw.o - .comment 0x0000000000000011 0x12 uart.o .comment 0x0000000000000011 0x12 byteordering.o + .comment 0x0000000000000011 0x12 lcd.o .comment 0x0000000000000011 0x12 fat.o .comment 0x0000000000000011 0x12 main.o diff --git a/final_project/sd_reader/sd-reader.out b/final_project/sd_reader/sd-reader.out index 2825fc278e9242b1dde164c1e9c6b0c62128f4a9..1a3736ea33d2b92bb1052c31cb70e08e4830ba91 100755 GIT binary patch literal 47376 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 literal 62296 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
C9n0{bg47ut`lmpI?fVtbCRGdYa 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 D-VJ{P diff --git a/final_project/sd_reader/sd_raw_config.h b/final_project/sd_reader/sd_raw_config.h index ca88eaa..3d0a4da 100644 --- a/final_project/sd_reader/sd_raw_config.h +++ b/final_project/sd_reader/sd_raw_config.h @@ -34,7 +34,7 @@ extern "C" * * Set to 1 to enable MMC/SD write support, set to 0 to disable it. */ -#define SD_RAW_WRITE_SUPPORT 1 +#define SD_RAW_WRITE_SUPPORT 0 /** * \ingroup sd_raw_config @@ -65,7 +65,7 @@ extern "C" * Set to 1 to support so-called SDHC memory cards, i.e. SD * cards with more than 2 gigabytes of memory. */ -#define SD_RAW_SDHC 0 +#define SD_RAW_SDHC 1 /** * @} diff --git a/final_project/sd_reader/uart.c b/final_project/sd_reader/uart.c deleted file mode 100644 index df5e1fd..0000000 --- a/final_project/sd_reader/uart.c +++ /dev/null @@ -1,198 +0,0 @@ - -/* - * Copyright (c) 2006-2012 by Roland Riegel - * - * This file is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include -#include - -#include "uart.h" - -/* some mcus have multiple uarts */ -#ifdef UDR0 -#define UBRRH UBRR0H -#define UBRRL UBRR0L -#define UDR UDR0 - -#define UCSRA UCSR0A -#define UDRE UDRE0 -#define RXC RXC0 - -#define UCSRB UCSR0B -#define RXEN RXEN0 -#define TXEN TXEN0 -#define RXCIE RXCIE0 - -#define UCSRC UCSR0C -#define URSEL -#define UCSZ0 UCSZ00 -#define UCSZ1 UCSZ01 -#define UCSRC_SELECT 0 -#else -#define UCSRC_SELECT (1 << URSEL) -#endif - -#ifndef USART_RXC_vect -#if defined(UART0_RX_vect) -#define USART_RXC_vect UART0_RX_vect -#elif defined(UART_RX_vect) -#define USART_RXC_vect UART_RX_vect -#elif defined(USART0_RX_vect) -#define USART_RXC_vect USART0_RX_vect -#elif defined(USART_RX_vect) -#define USART_RXC_vect USART_RX_vect -#elif defined(USART0_RXC_vect) -#define USART_RXC_vect USART0_RXC_vect -#elif defined(USART_RXC_vect) -#define USART_RXC_vect USART_RXC_vect -#else -#error "Uart receive complete interrupt not defined!" -#endif -#endif - -#define BAUD 9600UL -#define UBRRVAL (F_CPU/(BAUD*16)-1) -#define USE_SLEEP 1 - -void uart_init() -{ - /* set baud rate */ - UBRRH = UBRRVAL >> 8; - UBRRL = UBRRVAL & 0xff; - /* set frame format: 8 bit, no parity, 1 bit */ - UCSRC = UCSRC_SELECT | (1 << UCSZ1) | (1 << UCSZ0); - /* enable serial receiver and transmitter */ -#if !USE_SLEEP - UCSRB = (1 << RXEN) | (1 << TXEN); -#else - UCSRB = (1 << RXEN) | (1 << TXEN) | (1 << RXCIE); -#endif -} - -void uart_putc(uint8_t c) -{ - if(c == '\n') - uart_putc('\r'); - - /* wait until transmit buffer is empty */ - while(!(UCSRA & (1 << UDRE))); - - /* send next byte */ - UDR = c; -} - -void uart_putc_hex(uint8_t b) -{ - /* upper nibble */ - if((b >> 4) < 0x0a) - uart_putc((b >> 4) + '0'); - else - uart_putc((b >> 4) - 0x0a + 'a'); - - /* lower nibble */ - if((b & 0x0f) < 0x0a) - uart_putc((b & 0x0f) + '0'); - else - uart_putc((b & 0x0f) - 0x0a + 'a'); -} - -void uart_putw_hex(uint16_t w) -{ - uart_putc_hex((uint8_t) (w >> 8)); - uart_putc_hex((uint8_t) (w & 0xff)); -} - -void uart_putdw_hex(uint32_t dw) -{ - uart_putw_hex((uint16_t) (dw >> 16)); - uart_putw_hex((uint16_t) (dw & 0xffff)); -} - -void uart_putw_dec(uint16_t w) -{ - uint16_t num = 10000; - uint8_t started = 0; - - while(num > 0) - { - uint8_t b = w / num; - if(b > 0 || started || num == 1) - { - uart_putc('0' + b); - started = 1; - } - w -= b * num; - - num /= 10; - } -} - -void uart_putdw_dec(uint32_t dw) -{ - uint32_t num = 1000000000; - uint8_t started = 0; - - while(num > 0) - { - uint8_t b = dw / num; - if(b > 0 || started || num == 1) - { - uart_putc('0' + b); - started = 1; - } - dw -= b * num; - - num /= 10; - } -} - -void uart_puts(const char* str) -{ - while(*str) - uart_putc(*str++); -} - -void uart_puts_p(PGM_P str) -{ - while(1) - { - uint8_t b = pgm_read_byte_near(str++); - if(!b) - break; - - uart_putc(b); - } -} - -uint8_t uart_getc() -{ - /* wait until receive buffer is full */ -#if USE_SLEEP - uint8_t sreg = SREG; - sei(); - - while(!(UCSRA & (1 << RXC))) - sleep_mode(); - - SREG = sreg; -#else - while(!(UCSRA & (1 << RXC))); -#endif - - uint8_t b = UDR; - if(b == '\r') - b = '\n'; - - return b; -} - -EMPTY_INTERRUPT(USART_RXC_vect) - diff --git a/final_project/sd_reader/uart.h b/final_project/sd_reader/uart.h deleted file mode 100644 index d94d93d..0000000 --- a/final_project/sd_reader/uart.h +++ /dev/null @@ -1,42 +0,0 @@ - -/* - * Copyright (c) 2006-2012 by Roland Riegel - * - * This file is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#ifndef UART_H -#define UART_H - -#include -#include - -#ifdef __cplusplus -extern "C" -{ -#endif - -void uart_init(); - -void uart_putc(uint8_t c); - -void uart_putc_hex(uint8_t b); -void uart_putw_hex(uint16_t w); -void uart_putdw_hex(uint32_t dw); - -void uart_putw_dec(uint16_t w); -void uart_putdw_dec(uint32_t dw); - -void uart_puts(const char* str); -void uart_puts_p(PGM_P str); - -uint8_t uart_getc(); - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/final_project/sd_reader/uart.o b/final_project/sd_reader/uart.o deleted file mode 100644 index d23568db9f4e298690e56a3cd9d09ff02cbfab14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10952 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 A>Hq)$