logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

AVR-GCC zajętość SRAMu

sinuh3 23 Lis 2008 18:47 2403 7
  • #1 5774736
    sinuh3
    Poziom 17  
    Bawię się Atmegą 406. Ma toto 2kB SRAMu. Natomiast jak kompiluję projekt pod AVR-GCC (pod AVR-STUDIO), to mi krzyczy, że
    Cytat:

    Data: 450 bytes (87.9% Full)
    (.data + .bss + .noinit)



    O co chodzi? Czy w którymś z plików AVR-STUDO, tudzież WINAVR jest błąd?


    --
    PH
  • #2 5776297
    Dr.Vee
    VIP Zasłużony dla elektroda
    Sprawdź, czy podczas kompilacji kompilator jest wywoływany z opcją -mmcu=atmega406

    Jeśli nie, to źle wybrałeś mikrokontroler. Jeśli tak, to znaczy, że pewnie używasz starej wersji WinAVR :)

    Pozdrawiam,
    Dr.Vee
  • #3 5776303
    sinuh3
    Poziom 17  
    Jak najbardziej mmcu się zgadza. Nawet w opcjach memory settings w winavravr-studio napisali, że ma on 0x800 sramu.
    Ki czort?
    Winavr'a na razie ruszać nie będę:) (20071221) Chyba, że drugą instancję zainstaluję.
  • #4 5776312
    Dr.Vee
    VIP Zasłużony dla elektroda
    Program avr-size z WinAVR różni się od tego z oficjalnej dystrybucji binutils. WinAVR ma łatkę, w której dodaje wyświetlanie zajętości pamięci. Sprawdziłem kod i nawet w najstarszej wersji avr-size jest atmega406 i ma poprawny rozmiar 2kB ramu.

    Żeby avr-size poprawnie działał, to musi mieć przekazany paramter --mcu=typ_procesora. Wklej wszystkie komunikaty pochodzące od avr-size, razem z linią komend użytą do uruchomienia programu.

    Pozdrawiam,
    Dr.Vee
  • #5 5776319
    wrealcon
    Poziom 11  
    a to ja zapytam z innej strony :D
    jakie masz ustawienia odnosnie call stack and data stack size ? (nazwy z crossworks'a. moze sie inaczej zwac w winavr)

    pozdrawiam,
    wrealcon.
  • #6 5776838
    sinuh3
    Poziom 17  
    Proszę zatem:


    Cytat:
    Build started 24.11.2008 at 11:29:34
    avr-gcc.exe -mmcu=atmega406 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=1000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT main.o -MF dep/main.o.d -c ../main.c
    avr-gcc.exe -mmcu=atmega406 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=1000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT analog.o -MF dep/analog.o.d -c ../analog.c
    avr-gcc.exe -mmcu=atmega406 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=1000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT gpio.o -MF dep/gpio.o.d -c ../gpio.c
    avr-gcc.exe -mmcu=atmega406 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=1000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT pwrmgmt.o -MF dep/pwrmgmt.o.d -c ../pwrmgmt.c
    avr-gcc.exe -mmcu=atmega406 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=1000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT timer.o -MF dep/timer.o.d -c ../timer.c
    avr-gcc.exe -mmcu=atmega406 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=1000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT HD44780.o -MF dep/HD44780.o.d -c ../HD44780.c
    avr-gcc.exe -mmcu=atmega406 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=1000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT delay.o -MF dep/delay.o.d -c ../delay.c
    avr-gcc.exe -mmcu=atmega406 -Wl,-Map=406_iar_test.map main.o analog.o gpio.o pwrmgmt.o timer.o HD44780.o delay.o -o 406_iar_test.elf
    avr-objcopy -O ihex -R .eeprom 406_iar_test.elf 406_iar_test.hex
    avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex 406_iar_test.elf 406_iar_test.eep || exit 0
    avr-objdump -h -S 406_iar_test.elf > 406_iar_test.lss

    AVR Memory Usage
    ----------------
    Device: atmega406

    Program: 11578 bytes (28.3% Full)
    (.text + .data + .bootloader)

    Data: 450 bytes (87.9% Full)
    (.data + .bss + .noinit)

    EEPROM: 8 bytes (0.4% Full)
    (.eeprom)


    Build succeeded with 0 Warnings...
  • Pomocny post
    #7 5776937
    Dr.Vee
    VIP Zasłużony dla elektroda
    Sprawdziłem źródła jeszcze raz - autorzy WinAVR mają błąd w kodzie avr-size. :)

    Zauważ, że ilości eepromu i ramu są zamienione: 8 bajtów to ok. 0,4% z 2kB, a 450 bajtów to 87,9% z 0,5kB.

    Wyślę do nich poprawkę, w następnej wersji powinno już działać tak, jak trzeba :)

    PS. Bug już zgłoszony.

    Pozdrawiam,
    Dr.Vee
  • #8 5776947
    sinuh3
    Poziom 17  
    No i super! Dzięki za pomoc w wyjaśnieniu sprawy:)
REKLAMA