W ramach gimnastyki z C, postanowiłem stworzyć odpowiednie zadanie dla tego µC, niestety nie jestem jeszcze dość biegły w optymalizacji kodu, mimo, iż kombinowałem różnie (nawet z unią), na przeszkodzie stanął mi nadmiar generowanego kodu o 20 bajtów, czyli 10 słów rozkazowych. RAM-u za to mam pod dostatkiem...
Oczywiście przeglądałem plik .lss i jest tam parę spraw do wycięcia, np. zbędne powtarzanie adresowania w pgm_space, inicjalizacja .bss, bad_vector, program_stop itp., ale nie mam pojęcia, jak to zrobić bez wstawek w asm.
Może na tym forum znajdzie się jakiś ciekawy pomysł ?
Kod:
Plik .lss w załączniku.
Przebieg kompilacji:Edit: zmiana nazwy tematu w związku ze znalezionym rozwiązaniem...
Oczywiście przeglądałem plik .lss i jest tam parę spraw do wycięcia, np. zbędne powtarzanie adresowania w pgm_space, inicjalizacja .bss, bad_vector, program_stop itp., ale nie mam pojęcia, jak to zrobić bez wstawek w asm.
Może na tym forum znajdzie się jakiś ciekawy pomysł ?
Kod:
Kod: text
Plik .lss w załączniku.
Przebieg kompilacji:
$ make
avr-gcc -I"." -mmcu=attiny13 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=9600000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT LED_RGB_t13.o -MF dep/LED_RGB_t13.o.d -c LED_RGB_t13.c
avr-gcc -mmcu=attiny13 -Wl,-Map=LED_RGB_t13.map LED_RGB_t13.o -o LED_RGB_t13.elf
avr-objcopy -O ihex -R .eeprom LED_RGB_t13.elf LED_RGB_t13.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex LED_RGB_t13.elf LED_RGB_t13.eep || exit 0
avr-objdump -h -S LED_RGB_t13.elf > LED_RGB_t13.lss
AVR Memory Usage
----------------
Device: attiny13
Program: 1044 bytes (102.0% Full)
(.text + .data + .bootloader)
Data: 7 bytes (10.9% Full)
(.data + .bss + .noinit)
