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

[ATmega32][AVRGCC] zajętość ram? oraz uint16_t w EEPROM

pmmisiek 01 Paź 2008 21:27 2716 8
REKLAMA
  • #1 5589774
    pmmisiek
    Poziom 15  
    Witam.

    Po kompilacji otrzymuję takie oto informacje:

    Linking: pid_ost300908.elf
    avr-gcc -mmcu=atmega32 -I. -gdwarf-2 -DF_CPU=8000000UL  -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=pid_ost300908.o  -std=gnu99 -MD -MP -MF .dep/pid_ost300908.elf.d pid_ost300908.o --output pid_ost300908.elf -Wl,-Map=pid_ost300908.map,--cref  -Wl,-u,vfprintf -lprintf_flt  -lm
    
    Creating load file for Flash: pid_ost300908.hex
    avr-objcopy -O ihex -R .eeprom pid_ost300908.elf pid_ost300908.hex
    
    Creating load file for EEPROM: pid_ost300908.eep
    avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \
    	--change-section-lma .eeprom=0 -O ihex pid_ost300908.elf pid_ost300908.eep
    
    Creating Extended Listing: pid_ost300908.lss
    avr-objdump -h -S pid_ost300908.elf > pid_ost300908.lss
    
    Creating Symbol Table: pid_ost300908.sym
    avr-nm -n pid_ost300908.elf > pid_ost300908.sym
    
    Size after:
    pid_ost300908.elf  :
    section            size      addr
    .text             15646         0
    .data               884   8388704
    .bss                739   8389588
    .eeprom              36   8454144
    .stab               888         0
    .stabstr             95         0
    .debug_aranges       32         0
    .debug_pubnames     804         0
    .debug_info        5011         0
    .debug_abbrev       659         0
    .debug_line        7782         0
    .debug_frame        368         0
    .debug_str          873         0
    .debug_loc          679         0
    .debug_ranges        24         0
    Total             34520
    


    W którym miejscu mogę sprawdzić zajętość pamięci RAM mikrokontrolera?

    I jeszcze pytanie czy w eepromie można przechowywać zmienne uint16_t??


    Pozdrawiam.
  • REKLAMA
  • #2 5589937
    ciastek4
    Poziom 14  
    Jest to pozycja .data
    pozycja .txt jest to zajetosc pamieci flash

    .text 15646 B (flash)
    .data 884 B (ram)

    w eepromie mozna przechowywać tego typu dane i nie tylko, kwestia jak je będziesz rozumiał.
    z avr-libc-user-manula:
    6.12.3.3 uint16_t eeprom_read_word (const uint16_t ∗ addr)
    Read one 16-bit word (little endian) from EEPROM address addr.
  • REKLAMA
  • #3 5590065
    pmmisiek
    Poziom 15  
    Czyli można by tak:?

    
    uint16_t delta;
    uint16_t lambda[35];
    
    static EEMEM uint16_t delta_ee;
    static EEMEM uint16_t lambda_ee[35];
    
    uint16_t zmienna[35];
    
    //zapis
    
    eeprom_write_word(&lambda_ee[1], lambda[1]);
    eeprom_busy_wait();
    //odczyt
    
    zmienna[1]=eeprom_read_word(&lambda_ee[1]);
    


    Co do sekcji .data to zrobiłem taki test:
    1.

    
    float zajetosc[50]; 
    int main( void )
    {
       for(i=0;i<50;i++)
       {
    	zajetosc[i]=0.98312333;
       }
    }
    

    wynik po kompilacji:
    
    Size after:
    pid_ost300908.elf  :
    section            size      addr
    .text             16256         0
    .data               884   8388704
    .bss               1003   8389588
    .eeprom              36   8454144
    .stab               888         0
    .stabstr             95         0
    .debug_aranges       32         0
    .debug_pubnames     857         0
    .debug_info        5190         0
    .debug_abbrev       659         0
    .debug_line        8049         0
    .debug_frame        368         0
    .debug_str          910         0
    .debug_loc          679         0
    .debug_ranges        24         0
    Total             35930
    

    2.

    
    float zajetosc[250]; 
    int main( void )
    {
       for(i=0;i<250;i++)
       {
    	zajetosc[i]=0.98312333;
       }
    }
    

    wynik po kompilacji:
    
    Size after:
    pid_ost300908.elf  :
    section            size      addr
    .text             16256         0
    .data               884   8388704
    .bss               1803   8389588
    .eeprom              36   8454144
    .stab               888         0
    .stabstr             95         0
    .debug_aranges       32         0
    .debug_pubnames     857         0
    .debug_info        5190         0
    .debug_abbrev       659         0
    .debug_line        8049         0
    .debug_frame        368         0
    .debug_str          910         0
    .debug_loc          679         0
    .debug_ranges        24         0
    Total             36730
    

    Więc albo .data nie jest informacją o zajętości ram albo coś jest nie tak
  • REKLAMA
  • #5 5590249
    ciastek4
    Poziom 14  
    Wygląda wszystko ok :)

    no tak :) o sekcji .bss zapomnialem

    Sekcja .bss służy do przechowywania danych niezainicjowanych, czyli
    takich, których wartość nie jest znana na początku działania programu.
  • REKLAMA
  • #7 5590358
    pmmisiek
    Poziom 15  
    Reasumując:

    Zajętość ram to .bss + .data czy tylko .bss??

    Dzięki za odpowiedzi
    Pozdrawiam.
  • #9 5592263
    BoskiDialer
    Poziom 34  
    Trzeba też pamiętać, żeby zostawić trochę pamięci - od końca w dół rośnie stos.
REKLAMA