eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › AVR-GCC - sterowanie kompilacją
Ilość wypowiedzi w tym wątku: 11

  • 1. Data: 2009-03-31 19:30:35
    Temat: AVR-GCC - sterowanie kompilacją
    Od: tomi <z...@g...pl>


    Pytanie odnośnie AVR-GCC:

    Mam w kodzie kilkanaście funkcji printf z różną ilością argumentów, jak
    można je hurtowo włączyć lub wyłączyć przy kompilacji.


    Próbowałem za pomocą dyrektywy #define je przedefiniować na puste funkcje:
    #define printf(x)
    #define printf(x,y,z)
    ale tu mam problem z ilością argumentów, można je tak przedefiniować ?


    Myślałem też o takim rozwiązaniu:

    #ifdef DEBUG
    printf("i= %d\n", i);
    #endif

    ale jak to wstawić automatycznie przy każdym printfie ?


  • 2. Data: 2009-03-31 19:36:54
    Temat: Re: AVR-GCC - sterowanie kompilacją
    Od: Adam Dybkowski <a...@4...pl>

    tomi pisze:

    > Mam w kodzie kilkanaście funkcji printf z różną ilością argumentów, jak
    > można je hurtowo włączyć lub wyłączyć przy kompilacji.

    Zrób w oddzielnym pliku własną funkcję printf o takim prototypie, jak
    oryginalna (zależnie od twojego widzimisię: albo pustą, albo robiącą to
    co normalnie przy pomocy vprintf - możesz to ustalać na bieżąco na
    podstawie np. swojej zmiennej globalnej włączającej printf'y, albo
    włączać na stałe kompilacją warunkową). Plik z printf'em linkuj z całą
    resztą twojego projektu - wtedy nie zostanie dołączona biblioteczna
    funkcja printf. Voila!

    Podobnie zrób z printf_P bo z niej pewnie częściej korzystasz.

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

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


  • 3. Data: 2009-03-31 19:43:27
    Temat: Re: AVR-GCC - sterowanie kompilacją
    Od: "zbyszek" <z...@o...eu>

    > Myślałem też o takim rozwiązaniu:
    >
    > #ifdef DEBUG
    > printf("i= %d\n", i);
    > #endif
    >
    > ale jak to wstawić automatycznie przy każdym printfie ?

    metodą "Znajdz i zastap" printf( => #ifdef DEBUG printf( -reszta
    recznie
    albo printf( => // printf(

    z




  • 4. Data: 2009-03-31 20:00:03
    Temat: Re: AVR-GCC - sterowanie kompilacją
    Od: tomi <z...@g...pl>

    Adam Dybkowski wrote:
    > tomi pisze:
    >
    >> Mam w kodzie kilkanaście funkcji printf z różną ilością argumentów, jak
    >> można je hurtowo włączyć lub wyłączyć przy kompilacji.
    >
    > Zrób w oddzielnym pliku własną funkcję printf o takim prototypie, jak
    > oryginalna (zależnie od twojego widzimisię: albo pustą, albo robiącą to
    > co normalnie przy pomocy vprintf - możesz to ustalać na bieżąco na
    > podstawie np. swojej zmiennej globalnej włączającej printf'y, albo
    > włączać na stałe kompilacją warunkową). Plik z printf'em linkuj z całą
    > resztą twojego projektu - wtedy nie zostanie dołączona biblioteczna
    > funkcja printf. Voila!
    >
    > Podobnie zrób z printf_P bo z niej pewnie częściej korzystasz.
    >


    ale tu też będę miał problem ze zmienną ilością argumentów ?


  • 5. Data: 2009-03-31 20:40:48
    Temat: Re: AVR-GCC - sterowanie kompilacją
    Od: Adam Dybkowski <a...@4...pl>

    tomi pisze:

    >>> Mam w kodzie kilkanaście funkcji printf z różną ilością argumentów, jak
    >>> można je hurtowo włączyć lub wyłączyć przy kompilacji.
    >>
    >> Zrób w oddzielnym pliku własną funkcję printf o takim prototypie, jak
    >> oryginalna (zależnie od twojego widzimisię: albo pustą, albo robiącą to
    >> co normalnie przy pomocy vprintf
    [...]
    >> Podobnie zrób z printf_P bo z niej pewnie częściej korzystasz.

    > ale tu też będę miał problem ze zmienną ilością argumentów ?

    :-o Nigdy nie pisałeś funkcji w C ze zmienną liczbą argumentów? Albo
    takiej "opakowującej" printf?

    int printf (const char *__fmt, ...)
    {
    va_list ap;
    int res;

    va_start (ap, fmt);
    res = vprintf (fmt, ap);
    va_end (ap);

    return res;
    }


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

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


  • 6. Data: 2009-03-31 22:29:12
    Temat: Re: AVR-GCC - sterowanie kompilacją
    Od: Marcin Łukasik <.marcin.@.milea.pl.>

    tomi pisze:

    > ale tu też będę miał problem ze zmienną ilością argumentów ?

    O co Ci chodzi?
    Zrób dokładnie tak jak napisał Adam i będzie działać.

    Ilość argumentów w przypadku printf jest zmienna ("...").

    Zbuduj pustą funkcję w swoim programie o takiej samej nazwie i będzie ok.


    To przed programem głównym (polecam po wszystkich #include) załatwia sprawę:
    int printf (__const char *__restrict __format, ...) { return 1; }


    m.

    --
    Milea Wireless Communications, http://milea.pl
    Anteny WiFi, UMTS, kable, zlacza, akcesoria.

    ``Be who you are and say what you feel, because those who mind don't
    matter and those who matter don't mind.''


  • 7. Data: 2009-03-31 22:57:13
    Temat: Re: AVR-GCC - sterowanie kompilacją
    Od: Marcin Łukasik <.marcin.@.milea.pl.>

    Marcin Łukasik pisze:

    > To przed programem głównym (polecam po wszystkich #include) załatwia
    > sprawę:
    > int printf (__const char *__restrict __format, ...) { return 1; }

    ...albo idąć Twoim tokiem rozumowania:

    #ifndef DEBUG
    int printf (__const char *__restrict __format, ...) { return 1; }
    #endif

    m.

    --
    Milea Wireless Communications, http://milea.pl
    Anteny WiFi, UMTS, kable, zlacza, akcesoria.

    ``Be who you are and say what you feel, because those who mind don't
    matter and those who matter don't mind.''


  • 8. Data: 2009-04-01 06:45:58
    Temat: Re: AVR-GCC - sterowanie kompilacją
    Od: "Artur M. Piwko" <m...@b...pl>

    In the darkest hour on Tue, 31 Mar 2009 21:30:35 +0200,
    tomi <z...@g...pl> screamed:
    > Pytanie odnośnie AVR-GCC:
    >
    > Mam w kodzie kilkanaście funkcji printf z różną ilością argumentów, jak
    > można je hurtowo włączyć lub wyłączyć przy kompilacji.
    >
    > Próbowałem za pomocą dyrektywy #define je przedefiniować na puste funkcje:
    > #define printf(x)
    > #define printf(x,y,z)
    > ale tu mam problem z ilością argumentów, można je tak przedefiniować ?
    >

    Variadic macros. AVR-GCC (jak i GCC) je obsługuje.

    #define printf(format, ...)
    /* jeśli chcesz przy okazji wymusić min. 1 argument */

    lub ogólniej:

    #define printf(...)
    lub
    #define printf(args...)
    /* powyższe niczym się nie różnią, dopóki nie będziesz chciał czegoś
    * zrobić z argumentami makra:
    * - z pierwszego: printf(__VA_ARGS__)
    * - z drugiego: printf(args)
    **/

    > #ifdef DEBUG
    > printf("i= %d\n", i);
    > #endif
    >
    > ale jak to wstawić automatycznie przy każdym printfie ?

    Osobiście zrobiłbym własną funkcję, np. dprintf (od debug), i ją dopiero
    przełączał, tak jest ładniej. ;>

    #ifdef DEBUG
    #define dprintf(format, ...) printf(format, ##__VA_ARGS__)
    #else
    #define dprintf(format, ...)
    #endif

    --
    [ Artur M. Piwko : Pipen : AMP29-RIPE : RLU:100918 : From == Trap! : SIG:221B ]
    [ 08:30:00 user up 12029 days, 20:25, 1 user, load average: 0.50, 0.18, 0.45 ]

    Make it right before you make it faster.


  • 9. Data: 2009-04-01 17:32:36
    Temat: Re: AVR-GCC - sterowanie kompilacją
    Od: "pawel" <p...@p...onet.pl>


    Użytkownik "tomi" <z...@g...pl> napisał w wiadomości
    news:gqtr0t$8be$1@inews.gazeta.pl...
    >
    > Pytanie odnośnie AVR-GCC:
    >
    > Mam w kodzie kilkanaście funkcji printf z różną ilością argumentów, jak
    > można je hurtowo włączyć lub wyłączyć przy kompilacji.
    >

    Ja to robię tak
    #ifdef DEBUG
    #define DEBUG_PRINT(arg) printf arg
    #define DEBUG_PRINT_P(arg) printf_P arg
    #else
    #define DEBUG_PRINT(arg)
    #define DEBUG_PRINT_P(arg)
    #endif

    i zamiast funkcji printf używam np: DEBUG_PRINT(("blabla%dblabla", i));
    Muszą być podówjne nawiasy.

    Pozdrawiam
    Paweł



  • 10. Data: 2009-04-01 20:23:37
    Temat: Re: AVR-GCC - sterowanie kompilacją
    Od: Adam Dybkowski <a...@4...pl>

    pawel pisze:

    >> Mam w kodzie kilkanaście funkcji printf z różną ilością argumentów, jak
    >> można je hurtowo włączyć lub wyłączyć przy kompilacji.
    >
    > Ja to robię tak
    > #ifdef DEBUG
    > #define DEBUG_PRINT(arg) printf arg
    > #define DEBUG_PRINT_P(arg) printf_P arg
    > #else
    > #define DEBUG_PRINT(arg)
    > #define DEBUG_PRINT_P(arg)
    > #endif
    >
    > i zamiast funkcji printf używam np: DEBUG_PRINT(("blabla%dblabla", i));

    Ja używam w tym celu makra DBG_P - jest krócej napisać. I nie wymaga
    podwójnych nawiasów ale wygląda raczej tak:
    DBG_P(printf("BLABLA%d",i);)
    Daje to możliwość opcjonalnego wyłączania też innych kawałków kodu, nie
    tylko funkcji printf.

    Ale rzeczywiście to "super wygodne" rozwiązanie nijak się ma do nakładu
    pracy z przerobieniem masy gotowego napisanego wcześniej kodu. :-| Gdy
    się od razu tak nie pisało "debugów". W takim przypadku proponuję
    zlinkować z programem własną funkcję printf i będzie po kłopocie. A
    debugowanie można sobie wtedy dynamicznie włączać i wyłączać, np. na
    podstawie jakiejś zmiennej (jest to możliwe bo teksty będą obecne cały
    czas w pamięci programu).

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

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

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: