1 .file "foo.c" 2 .arch atmega128 3 __SREG__ = 0x3f 4 __SP_H__ = 0x3e 5 __SP_L__ = 0x3d 6 __tmp_reg__ = 0 7 __zero_reg__ = 1 8 .global __do_copy_data 9 .global __do_clear_bss 12 .text 13 .Ltext0: 75 .section .progmem.data,"a",@progbits 78 baud_str: 79 0000 4241 5544 .string "BAUD" 79 00 80 .text 85 set_baud: 1:foo.c **** 2:foo.c **** #include 3:foo.c **** #include 4:foo.c **** #include 5:foo.c **** #include 6:foo.c **** 7:foo.c **** #define CONST 8:foo.c **** #define FLASH 9:foo.c **** 10:foo.c **** typedef uint16_t (*functype_t)(CONST char *, CONST char *); 11:foo.c **** 12:foo.c **** typedef struct 13:foo.c **** { 14:foo.c **** PGM_P command; 15:foo.c **** functype_t function; 16:foo.c **** } str_func_entry; 17:foo.c **** 18:foo.c **** 19:foo.c **** static CONST char FLASH baud_str[] PROGMEM = "BAUD"; 20:foo.c **** 21:foo.c **** static uint16_t set_baud(CONST char * rate_ptr, CONST char * tok_ptr ) 22:foo.c **** { 87 .LM1: 88 /* prologue: frame size=0 */ 89 /* prologue end (size=0) */ 23:foo.c **** return(0); 24:foo.c **** } 91 .LM2: 92 0000 80E0 ldi r24,lo8(0) 93 0002 90E0 ldi r25,hi8(0) 94 /* epilogue: frame size=0 */ 95 0004 0895 ret 96 /* epilogue end (size=1) */ 97 /* function set_baud size 3 (2) */ 99 .Lscope0: 101 .section .progmem.data 104 cmd_func_table: 105 0005 0000 .word baud_str 106 0007 0000 .word pm(set_baud) 107 .text 109 .global main 111 main: 25:foo.c **** 26:foo.c **** static FLASH str_func_entry cmd_func_table[] PROGMEM = 27:foo.c **** { 28:foo.c **** {baud_str, set_baud} 29:foo.c **** }; 30:foo.c **** 31:foo.c **** 32:foo.c **** 33:foo.c **** int main(void) 34:foo.c **** { 113 .LM3: 114 /* prologue: frame size=0 */ 115 0006 C0E0 ldi r28,lo8(__stack - 0) 116 0008 D0E0 ldi r29,hi8(__stack - 0) 117 000a DEBF out __SP_H__,r29 118 000c CDBF out __SP_L__,r28 119 /* prologue end (size=4) */ 35:foo.c **** (*(cmd_func_table[0].function))(NULL, NULL); 121 .LM4: 122 000e E091 0000 lds r30,cmd_func_table+2 123 0012 F091 0000 lds r31,(cmd_func_table+2)+1 124 0016 60E0 ldi r22,lo8(0) 125 0018 70E0 ldi r23,hi8(0) 126 001a CB01 movw r24,r22 127 001c 0995 icall 36:foo.c **** return(0); 37:foo.c **** } 129 .LM5: 130 001e 80E0 ldi r24,lo8(0) 131 0020 90E0 ldi r25,hi8(0) 132 /* epilogue: frame size=0 */ 133 0022 0C94 0000 jmp exit 134 /* epilogue end (size=2) */ 135 /* function main size 16 (10) */ 137 .Lscope1: 141 .text 143 Letext: 144 /* File "foo.c": code 19 = 0x0013 ( 12), prologues 4, epilogues 3 */ DEFINED SYMBOLS *ABS*:00000000 foo.c *ABS*:0000003f __SREG__ *ABS*:0000003e __SP_H__ *ABS*:0000003d __SP_L__ *ABS*:00000000 __tmp_reg__ *ABS*:00000001 __zero_reg__ E:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc2naaaa.s:78 .progmem.data:00000000 baud_str E:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc2naaaa.s:85 .text:00000000 set_baud E:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc2naaaa.s:104 .progmem.data:00000005 cmd_func_table E:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc2naaaa.s:111 .text:00000006 main E:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc2naaaa.s:143 .text:00000026 Letext UNDEFINED SYMBOLS __do_copy_data __do_clear_bss __stack exit