eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › Optymalizacja w WinAVR i kod programu
Ilość wypowiedzi w tym wątku: 9

  • 1. Data: 2010-06-16 10:48:54
    Temat: Optymalizacja w WinAVR i kod programu
    Od: "TomZor" <t...@p...onet.pl>

    WinAVR optymalizuje kod wynikowy za pomoca przelacznika -00,01,02,0s
    jak zrobić aby dany kawałek programu źródłowego (w C) nie był optymalizowany
    np (to tylko przykład)

    void i2c_stop(void)
    {
    I2C_PORT|=1<<SCL;
    I2C_PORT|=1<<SDA;
    delay_hp(); // delay
    I2C_PORT&=~(1<<SCL);
    delay_qp(); // delay
    I2C_PORT&=~(1<<SDA);
    delay_hp(); // delay
    }

    Zależy mi aby ustawić optymalizację na -0s ale wyłączył z optymalizacji
    powyższy kawałek programu, lub np wyłączył z optymalizacji cały plik ???


    Dziękuje za pomysły

    Tomek



    __________ Informacja programu ESET NOD32 Antivirus, wersja bazy sygnatur wirusow
    5193 (20100613) __________

    Wiadomosc zostala sprawdzona przez program ESET NOD32 Antivirus.

    http://www.eset.pl lub http://www.eset.com





  • 2. Data: 2010-06-16 11:15:55
    Temat: Re: Optymalizacja w WinAVR i kod programu
    Od: Michoo <m...@v...pl>

    TomZor pisze:
    > Zależy mi aby ustawić optymalizację na -0s ale wyłączył z optymalizacji
    A dlaczego? Jeżeli optymalizacja coś psuje to jest raczej problem z
    błędnym kodem.

    > powyższy kawałek programu, lub np wyłączył z optymalizacji cały plik ???

    Każdy plik jest kompilowany osobno - w Makefile ustawiasz odpowiednie
    opcje dla tego pliku i już.


    >
    > __________ Informacja programu ESET NOD32 Antivirus, wersja bazy sygnatur wirusow
    5193 (20100613) __________
    >
    > Wiadomosc zostala sprawdzona przez program ESET NOD32 Antivirus.
    >
    > http://www.eset.pl lub http://www.eset.com

    Skonfiguruj sobie to świństwo, żeby nie śmieciło na grupach.


    --
    Pozdrawiam
    Michoo


  • 3. Data: 2010-06-16 11:56:13
    Temat: Re: Optymalizacja w WinAVR i kod programu
    Od: Zbych <a...@o...pl>

    TomZor pisze:
    > WinAVR optymalizuje kod wynikowy za pomoca przelacznika -00,01,02,0s
    > jak zrobić aby dany kawałek programu źródłowego (w C) nie był optymalizowany
    > np (to tylko przykład)

    Trzeba dodać atrybut optimize do funkcji, która ma mieć inny poziom
    optymalizacji.

    void my_function(void) __attribute__((optimize("O1")))
    {
    [...]
    }

    Z manuala do gcc:

    optimize
    The optimize attribute is used to specify that a function is to be
    compiled with different optimization options than specified on the
    command line. Arguments can either be numbers or strings. Numbers are
    assumed to be an optimization level. Strings that begin with O are
    assumed to be an optimization option, while other options are assumed to
    be used with a -f prefix. You can also use the `#pragma GCC optimize'
    pragma to set the optimization options that affect more than one
    function. See Function Specific Option Pragmas, for details about the
    `#pragma GCC optimize' pragma.


    > Zależy mi aby ustawić optymalizację na -0s ale wyłączył z optymalizacji
    > powyższy kawałek programu, lub np wyłączył z optymalizacji cały plik ???

    Ja bym zaczął od znalezienia błędu w programie.


  • 4. Data: 2010-06-16 12:05:11
    Temat: Re: Optymalizacja w WinAVR i kod programu
    Od: "TomZor" <t...@p...onet.pl>

    Dzięki za informacje

    Program dziala poprawnie przy optymalizacji -00,01 dla pozostałych coś
    wycina albo robi po swojemu, prawdopodobnie kompilator wycina mi delay'e,

    Ale dzięki

    Tomek

    Postaram się "......ESET NOD32 Antivirus....." coś z tym zrobić







    Użytkownik "Zbych" <a...@o...pl> napisał w wiadomości
    news:4c18bbc8$0$17086$65785112@news.neostrada.pl...
    > TomZor pisze:
    >> WinAVR optymalizuje kod wynikowy za pomoca przelacznika -00,01,02,0s
    >> jak zrobić aby dany kawałek programu źródłowego (w C) nie był
    >> optymalizowany np (to tylko przykład)
    >
    > Trzeba dodać atrybut optimize do funkcji, która ma mieć inny poziom
    > optymalizacji.
    >
    > void my_function(void) __attribute__((optimize("O1")))
    > {
    > [...]
    > }
    >
    > Z manuala do gcc:
    >
    > optimize
    > The optimize attribute is used to specify that a function is to be
    > compiled with different optimization options than specified on the command
    > line. Arguments can either be numbers or strings. Numbers are assumed to
    > be an optimization level. Strings that begin with O are assumed to be an
    > optimization option, while other options are assumed to be used with a -f
    > prefix. You can also use the `#pragma GCC optimize' pragma to set the
    > optimization options that affect more than one function. See Function
    > Specific Option Pragmas, for details about the `#pragma GCC optimize'
    > pragma.
    >
    >
    >> Zależy mi aby ustawić optymalizację na -0s ale wyłączył z optymalizacji
    >> powyższy kawałek programu, lub np wyłączył z optymalizacji cały plik ???
    >
    > Ja bym zaczął od znalezienia błędu w programie.
    >
    > __________ Informacja programu ESET NOD32 Antivirus, wersja bazy sygnatur
    > wirusow 5193 (20100613) __________
    >
    > Wiadomosc zostala sprawdzona przez program ESET NOD32 Antivirus.
    >
    > http://www.eset.pl lub http://www.eset.com
    >
    >



    __________ Informacja programu ESET NOD32 Antivirus, wersja bazy sygnatur wirusow
    5193 (20100613) __________

    Wiadomosc zostala sprawdzona przez program ESET NOD32 Antivirus.

    http://www.eset.pl lub http://www.eset.com




  • 5. Data: 2010-06-16 12:11:17
    Temat: Re: Optymalizacja w WinAVR i kod programu
    Od: Zbych <a...@o...pl>

    TomZor pisze:
    > Dzięki za informacje
    >
    > Program dziala poprawnie przy optymalizacji -00,01 dla pozostałych coś
    > wycina albo robi po swojemu, prawdopodobnie kompilator wycina mi delay'e,

    To oznacza, że źle te delaye napisałeś. Skorzystaj z tych wbudowanych w
    bibliotekę:

    http://www.nongnu.org/avr-libc/user-manual/group__ut
    il__delay.html


  • 6. Data: 2010-06-17 16:58:52
    Temat: Re: Optymalizacja w WinAVR i kod programu
    Od: Sebastian Biały <h...@p...onet.pl>

    On 2010-06-16 14:05, TomZor wrote:
    > Program dziala poprawnie przy optymalizacji -00,01 dla pozosta?ych co?
    > wycina albo robi po swojemu, prawdopodobnie kompilator wycina mi delay'e,

    Pokaż kod delay_hp().

    Ale ... niech zgadnę ....

    masz tam:

    int i = 0;
    for( ; i < 100 ; i ++ )

    jesli tak to zmien int i na:

    volatile int i.

    Nie, to nie jest dobre rozwiązanie, ale będziesz wiedział czemu Ci wycina.


  • 7. Data: 2010-06-19 09:17:31
    Temat: Re: Optymalizacja w WinAVR i kod programu
    Od: "T.M.F." <t...@n...mp.pl>

    >> WinAVR optymalizuje kod wynikowy za pomoca przelacznika -00,01,02,0s
    >> jak zrobić aby dany kawałek programu źródłowego (w C) nie był
    >> optymalizowany np (to tylko przykład)
    >
    > Trzeba dodać atrybut optimize do funkcji, która ma mieć inny poziom
    > optymalizacji.
    >
    > void my_function(void) __attribute__((optimize("O1")))
    > {
    > [...]
    > }

    Wszystko pieknie, zapomniales tylko napisac, ze tego atrybutu nie ma w
    gcc 4.3.x, ktory jest w WinAVR.
    A jesli Os cos knoci to znaczy, ze program jest do bani, a co jest do
    bani to juz napisales.


    --
    Inteligentny dom - http://idom.wizzard.one.pl
    http://idom.sourceforge.net/
    Teraz takze forum dyskusyjne
    Zobacz, wyslij uwagi, dolacz do projektu.


  • 8. Data: 2010-06-20 08:34:03
    Temat: Re: Optymalizacja w WinAVR i kod programu
    Od: "TomZor" <t...@p...onet.pl>

    oto te delaye

    #define n_hp 20 // 40 // fosc = 8Mhz
    #define n_qp 10// 20


    void delay_hp(void) //hp - half i2c clock period delay
    normal: 5.0us
    {
    unsigned char time= 1+ (n_hp-7)/3;
    while(time--);
    }

    void delay_qp(void) //qp - quarter i2c clock period delay
    normal: 2.5us
    {
    unsigned char time= 1+ (n_qp-7)/3;
    while(time--);
    }

    Chodi o to ze program do obslugi i2c przy optymalizacji -00, 01 poprawnie
    kompiluje się, nie ma żadnych problemów z działaniem i2c.
    Natomiast przy pozostałych optymalizacjach juz odczyt zegarka po i2c a
    dokładnie DS1307 nie działa, więc może i mam źle coś napisane, ale skoro
    działa przy - 00 i 01 to tak do końca nie jest spaprane.
    ".....optimize("......." nie działa w WinAVR, szkoda, ale zobacze co
    jeszcze co kompilator wywala przzy różnych opcjach otymalizacji, bo może to
    nie wina procedur i2c ale gdzieś indziej...zobaczymy.




    Użytkownik "T.M.F." <t...@n...mp.pl> napisał w wiadomości
    news:4c1c8b00$0$17099$65785112@news.neostrada.pl...
    >>> WinAVR optymalizuje kod wynikowy za pomoca przelacznika -00,01,02,0s
    >>> jak zrobić aby dany kawałek programu źródłowego (w C) nie był
    >>> optymalizowany np (to tylko przykład)
    >>
    >> Trzeba dodać atrybut optimize do funkcji, która ma mieć inny poziom
    >> optymalizacji.
    >>
    >> void my_function(void) __attribute__((optimize("O1")))
    >> {
    >> [...]
    >> }
    >
    > Wszystko pieknie, zapomniales tylko napisac, ze tego atrybutu nie ma w gcc
    > 4.3.x, ktory jest w WinAVR.
    > A jesli Os cos knoci to znaczy, ze program jest do bani, a co jest do bani
    > to juz napisales.
    >
    >
    > --
    > Inteligentny dom - http://idom.wizzard.one.pl
    > http://idom.sourceforge.net/
    > Teraz takze forum dyskusyjne
    > Zobacz, wyslij uwagi, dolacz do projektu.
    >
    > __________ Informacja programu ESET NOD32 Antivirus, wersja bazy sygnatur
    > wirusow 5210 (20100619) __________
    >
    > Wiadomosc zostala sprawdzona przez program ESET NOD32 Antivirus.
    >
    > http://www.eset.pl lub http://www.eset.com
    >
    >


    __________ Informacja programu ESET NOD32 Antivirus, wersja bazy sygnatur wirusow
    5210 (20100619) __________

    Wiadomosc zostala sprawdzona przez program ESET NOD32 Antivirus.

    http://www.eset.pl lub http://www.eset.com




    __________ Informacja programu ESET NOD32 Antivirus, wersja bazy sygnatur wirusow
    5217 (20100622) __________

    Wiadomosc zostala sprawdzona przez program ESET NOD32 Antivirus.

    http://www.eset.pl lub http://www.eset.com




  • 9. Data: 2010-06-22 20:05:59
    Temat: Re: Optymalizacja w WinAVR i kod programu
    Od: Michoo <m...@v...pl>

    TomZor pisze:
    > oto te delaye
    >
    > #define n_hp 20 // 40 // fosc = 8Mhz
    > #define n_qp 10// 20
    #define F_CPU 8000000
    #include <delay.h>
    >
    >
    > void delay_hp(void) //hp - half i2c clock period
    > delay normal: 5.0us
    > {
    > unsigned char time= 1+ (n_hp-7)/3;
    > while(time--);
    > }
    void delay_hp(void)
    {
    _delay_us(5);
    }
    >
    > void delay_qp(void) //qp - quarter i2c clock period
    > delay normal: 2.5us
    > {
    > unsigned char time= 1+ (n_qp-7)/3;
    > while(time--);
    > }
    void delay_qp(void)
    {
    _delay_us(2.5);
    }

    Kompilować z optymalizacją. Przynajmniej te funkcje.


    A to co napisałeś to przykład jak NIE pisać - kompilator zmieni sposób
    generowania kodu i się wszystko posypie.

    --
    Pozdrawiam
    Michoo

strony : [ 1 ]


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: