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 2825fc2..1a3736e 100755 Binary files a/final_project/sd_reader/sd-reader.out and b/final_project/sd_reader/sd-reader.out differ 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 d23568d..0000000 Binary files a/final_project/sd_reader/uart.o and /dev/null differ