eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › avr-gcc eeprom inline
Ilość wypowiedzi w tym wątku: 15

  • 1. Data: 2009-03-14 17:54:07
    Temat: avr-gcc eeprom inline
    Od: "pawel" <p...@p...onet.pl>

    Witam.
    Dlaczego funkcje deklarowane w eeprom.h są always inline?
    Czy muszą takie być ze względu na ich konstrukcję?

    Akurat potrzebuję takich funkcji non-inline ze względu na braki pamięci
    programu
    czy mogę poprostu przepisać ten plik i nie deklarować ich jako always
    inline?

    Dzięki za pomoc.
    Pozdrawiam
    Paweł



  • 2. Data: 2009-03-14 18:30:17
    Temat: Re: avr-gcc eeprom inline
    Od: Zbych <a...@o...pl>

    pawel pisze:
    > Witam.
    > Dlaczego funkcje deklarowane w eeprom.h są always inline?
    > Czy muszą takie być ze względu na ich konstrukcję?

    To wynika z tego, że rejestry sterujące eepromem są pod różnymi adresami
    w różnych uC a biblioteka jest jedna dla wszystkich. Dzięki
    inline'owaniu adresy mogą być ustalone na etapie kompilacji projektu a
    nie biblioteki.

    > Akurat potrzebuję takich funkcji non-inline ze względu na braki pamięci
    > programu
    > czy mogę poprostu przepisać ten plik i nie deklarować ich jako always
    > inline?

    Samo usunięcie inline nic nie da (kompilator będzie narzekał na
    zdublowane definicje). Najlepiej w jednym pliku swojego projektu zrób
    własne funkcje zapisu/odczytu eepromu i umieść w nich odwołania do
    funkcji bibliotecznych.


  • 3. Data: 2009-03-14 19:00:13
    Temat: Re: avr-gcc eeprom inline
    Od: "pawel" <p...@p...onet.pl>

    > Samo usunięcie inline nic nie da (kompilator będzie narzekał na zdublowane
    > definicje). Najlepiej w jednym pliku swojego projektu zrób własne funkcje
    > zapisu/odczytu eepromu i umieść w nich odwołania do funkcji
    > bibliotecznych.

    Chodzi ci o coś takiego?

    uint8_t eeprommy_read_byte (const uint8_t *addr){
    return eeprom_read_byte(addr);
    }

    Mam sporo wywołań bibliotecznych funkcji.
    Czy to napewno zmniejszy mi rozmiaru kodu?
    Czy wywołanie powyższej funkcji nie spowoduje mimo wszystko wstawienia za
    każdym razem
    funkcji eeprom_read_byte jako inline?

    Pozdrawiam
    Paweł



  • 4. Data: 2009-03-14 19:24:29
    Temat: Re: avr-gcc eeprom inline
    Od: Zbych <a...@o...pl>

    pawel pisze:

    > Mam sporo wywołań bibliotecznych funkcji.
    > Czy to napewno zmniejszy mi rozmiaru kodu?

    Jeśli eeprommy_read_byte wyląduje w pliku *.c a nie w nagłówkowym to
    rozmiar powinien zmaleć.

    > Czy wywołanie powyższej funkcji nie spowoduje mimo wszystko wstawienia za
    > każdym razem
    > funkcji eeprom_read_byte jako inline?

    Uważasz, że kompilator robi kopię normalnej funkcji przy każdym wywołaniu?


  • 5. Data: 2009-03-14 19:52:19
    Temat: Re: avr-gcc eeprom inline
    Od: "T.M.F." <t...@n...mp.pl>

    Zbych pisze:
    > pawel pisze:
    >
    >> Mam sporo wywołań bibliotecznych funkcji.
    >> Czy to napewno zmniejszy mi rozmiaru kodu?
    >
    > Jeśli eeprommy_read_byte wyląduje w pliku *.c a nie w nagłówkowym to
    > rozmiar powinien zmaleć.
    >
    >> Czy wywołanie powyższej funkcji nie spowoduje mimo wszystko wstawienia
    >> za każdym razem
    >> funkcji eeprom_read_byte jako inline?
    >
    > Uważasz, że kompilator robi kopię normalnej funkcji przy każdym wywołaniu?
    >

    Czasami tak.
    Pytanie kontrolne - jakiej wersji avr-gcc uzywasz? Najnowsza ma
    regression bug i ma tendencje do bardzo ostrego inlinowania funkcji co
    zwieksza objetosc. Rozwiazaniem jest proba kompilacji jakas wczesniejsza
    wersja lub ew. sprobowanie najnowszej wersji RC, czy czym nie wiem czy
    ten blad poprawiono.
    Inna sprawa, ze funkcje zapisu do EEPROM sa na tyle krotkie, ze koszt
    ich wywolania i przekazania parametrow moze byc wyzszy niz kazdorazowe
    osadzanie calej funkcji.
    Ile ci brakuje bajtow?


  • 6. Data: 2009-03-14 20:05:18
    Temat: Re: avr-gcc eeprom inline
    Od: "pawel" <p...@p...onet.pl>

    > Ile ci brakuje bajtow?

    Stosunkowo sporo, atmega32
    Program: 32830 bytes (100.2% Full)

    Maksymalnie 32768.

    Wyremowanie jednej linijki

    for(i = 0; i < MAX_DS18X20; i++)
    {
    //blablabla
    eeprom_write_byte(&ds18x20_ee[i].restout, k);
    //blablabla
    }

    gdzie ds18x20_ee to struktura, restout to jej pole
    zmniejsza kod wynikowy do:
    Program: 32744 bytes (99.9% Full)

    Paweł



  • 7. Data: 2009-03-14 20:10:18
    Temat: Re: avr-gcc eeprom inline
    Od: "pawel" <p...@p...onet.pl>


    > gdzie ds18x20_ee to struktura

    Pmyłka miało być tablica struktur

    Paweł



  • 8. Data: 2009-03-14 20:14:21
    Temat: Re: avr-gcc eeprom inline
    Od: "pawel" <p...@p...onet.pl>

    A jeszcze cikawiej, wyjęcie zapisu do eeprom poza pętle zmniejsz rozmiar
    pliku wynikowego z
    Program: 32830 bytes (100.2% Full)
    do
    Program: 32816 bytes (100.1% Full)

    Może w pętli liczyć na ramie a zapis robić poza nią?
    Mimo wszystko i tak sporo to zajmuje.
    Paweł



  • 9. Data: 2009-03-14 20:34:25
    Temat: Re: avr-gcc eeprom inline
    Od: Adam Dybkowski <a...@4...pl>

    T.M.F. pisze:

    > Pytanie kontrolne - jakiej wersji avr-gcc uzywasz? Najnowsza ma
    > regression bug i ma tendencje do bardzo ostrego inlinowania funkcji co
    > zwieksza objetosc.

    Piszesz o WinAVR 20090313 czy jakiejś dystrybucji linuxowej?

    --
    Adam Dybkowski
    http://dybkowski.net/

    Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.


  • 10. Data: 2009-03-14 20:41:24
    Temat: Re: avr-gcc eeprom inline
    Od: "pawel" <p...@p...onet.pl>

    > Piszesz o WinAVR 20090313 czy jakiejś dystrybucji linuxowej?

    Witam.
    Chociaż pytanie nie do mnie.
    Używam WinAvr 20071221 niestety we wszystkich nowszych wersjach kod znacznie
    się rozrasta.

    Paweł


strony : [ 1 ] . 2


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: