eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika[OT] Zarządzanie konfiguracją modułów kodu źródłowego
Ilość wypowiedzi w tym wątku: 42

  • 21. Data: 2012-05-06 17:35:32
    Temat: Re: [OT] Zarządzanie konfiguracją modułów kodu źródłowego
    Od: Sebastian Biały <h...@p...onet.pl>

    On 2012-05-06 17:21, mk wrote:
    >>> #include "../lib/i2c/defaultconfiguration.h"
    >>> #include "i2cconfiguration.h"
    > Chyba miało być odwrotnie...

    Nie. plik lokalny dla projektu nadpisuje parametry domyślne.


  • 22. Data: 2012-05-06 17:41:27
    Temat: Re: [OT] Zarządzanie konfiguracją modułów kodu źródłowego
    Od: marek <n...@u...o2.pl>

    On 06.05.2012 14:19, Zbych wrote:
    > Ja raczej unikami używania tej samej kopii biblioteki do różnych
    > projektów. Dasz sobie głowę uciąć, że zmiana w bibliotece pod bieżący
    > projekt x nie spowoduje jakiś anomalii w projekcie x-10, który pisała inna
    > osoba?
    > Wolę zrobić kopię biblioteki z projektu x-1 i nanieść poprawki.

    Kopię? Od tego są systemy kontroli wersji. Robimy brancha nowego i
    dostosowujemy. Jak coś się zmieni w głównej gałęzi (np straszny bug
    wykryty) to mergujemy samą zmianę. W gicie robi się to pięknie...

    Takie problemy występują podczas rozwoju każdego oprogramowania, warto
    poczytać o schematach/rozwiązaniach przetestowanych w takim środowisku.

    http://nvie.com/posts/a-successful-git-branching-mod
    el/

    Marek


  • 23. Data: 2012-05-06 17:41:58
    Temat: Re: [OT] Zarządzanie konfiguracją modułów kodu źródłowego
    Od: "Andrzej Ekiert" <d...@t...pl>

    Dnia 06-05-2012 o 17:21:11 mk <reverse_lp.pw@myzskm> napisał(a):

    > Ciągle nie rozumiem na czym polega Twój problem...
    > Skoro pojawia się nowy parametr modułu bibliotecznego, to mamy dwie
    > opcje: albo musi on być obligatoryjne określony przez użytkownika
    > biblioteki (wtedy zdajemy się na kompilator i błąd klasy undefined),
    > albo nowy parametr ma jakąś wartość domyślną (stałą lub jakoś
    > ewaluowaną) i użytkownik ewentualnie może przedefiniować ten parametr.

    Skłaniam się ku pierwszej opcji: obligatoryjne określenie, nawet jeśli
    zwykle będzie to przypisanie wartości domyślnej. Chcę jakoś sobie to
    określanie usprawnić semi-automatyzując zadanie. Na razie mam tylko
    autowykrywanie przez próbę kompilacji gdzie parametr nie jest
    zdefiniowany. Chciałbym ułatwić sobie dodawanie tego parametru do plików
    konfiguracyjnych, oraz mieć wykrywanie ustawienia parametrów, które stały
    się "obsolete".

    ae


  • 24. Data: 2012-05-06 18:18:16
    Temat: Re: [OT] Zarządzanie konfiguracją modułów kodu źródłowego
    Od: mk <reverse_lp.pw@myzskm>

    W dniu 2012-05-06 17:35, Sebastian Biały pisze:
    > On 2012-05-06 17:21, mk wrote:
    >>>> #include "../lib/i2c/defaultconfiguration.h"
    >>>> #include "i2cconfiguration.h"
    >> Chyba miało być odwrotnie...
    >
    > Nie. plik lokalny dla projektu nadpisuje parametry domyślne.

    Używając #undef???

    IMO zdecydowanie lepsze jest jednak włączenie najpierw pliku z
    konfiguracją użytkownika, a potem nagłówek z konfiguracją domyślną -- to
    zresztą powszechna praktyka.
    Plik nagłówkowy "defaultconfiguration.h" nie definiuje parametrów już
    zdefiniowanych (#ifndef), a jedynie te które jeszcze nie zostały
    zdefiniowane nadając im wartości domyślne (+ ewentualnie jakiś komunikat
    przy pomocy #warning), obliczając je (np. na podstawie parametrów
    podanych przez użytkownika) lub walnąć błędem (#error) jeśli parametr ma
    być obligatoryjne określony przez użytkownika.

    pzdr
    mk


  • 25. Data: 2012-05-06 18:32:56
    Temat: Re: [OT] Zarządzanie konfiguracją modułów kodu źródłowego
    Od: Zbych <z...@o...pl>

    W dniu 06.05.2012 16:55, Michoo pisze:
    > On 06.05.2012 16:28, Zbych wrote:
    >> W dniu 06.05.2012 15:54, Michoo pisze:
    >>> HW::uart<0>::send_char(buf[i]);
    >>> zamienia na pojedynczy mov do rejestru.
    >>
    >> A jakie będą tego zalety w stosunku do wersji z define?
    > Że nie muszę kopiować kodu dla uart 1. No i środowisko mi ładniej
    > koloruje funkcje wpisane jako funkcje a nie jako połamane define.

    Póki rejestry UART są rozmieszczone identycznie względem bazowego, to w
    zwykłym C napiszesz jedną obsługę do wszystkich UARTów bez żadnych
    define'ów.

    > Btw - jak będę miał dość czasu, żeby posprzątać kod to wrzucę go na
    > jakieś sourceforge i każdy będzie mógł ocenić.

    Chętnie zobaczę.


  • 26. Data: 2012-05-06 19:00:34
    Temat: Re: [OT] Zarządzanie konfiguracją modułów kodu źródłowego
    Od: Sebastian Biały <h...@p...onet.pl>

    On 2012-05-06 18:18, mk wrote:
    >> Nie. plik lokalny dla projektu nadpisuje parametry domyślne.
    > Używając #undef???

    Uzywając def.

    Np. tak:

    default-config: #define UART_STOP_BITS 1

    project-config: #include "default.h", #define UART_STOP_BITS 2

    > IMO zdecydowanie lepsze jest jednak włączenie najpierw pliku z
    > konfiguracją użytkownika, a potem nagłówek z konfiguracją domyślną -- to
    > zresztą powszechna praktyka.

    Zdecydowana lepszośc tutaj dyskusyjna. Oba rozwiązania działają.

    > Plik nagłówkowy "defaultconfiguration.h" nie definiuje parametrów już
    > zdefiniowanych (#ifndef), a jedynie te które jeszcze nie zostały
    > zdefiniowane nadając im wartości domyślne (+ ewentualnie jakiś komunikat
    > przy pomocy #warning), obliczając je (np. na podstawie parametrów
    > podanych przez użytkownika) lub walnąć błędem (#error) jeśli parametr ma
    > być obligatoryjne określony przez użytkownika.

    W drugą stronę działa to tak samo (nie)skutecznie bez #ifndef, kwestia
    implementacji.

    IMO to nie konfiguracja powinna szukać bledów w #define i wyliczać
    pośrednie parametry tylko implementacja. Więc detekcje źle ustawionych
    parametrów robię w pliku c. To dlatego że to w pliku c wiadomo jaka
    konfiguracja jest nielegalna, np. uart avr ie obsługuje 2 bitów stopu.
    Gdyby te zależności miał wyliczać globalny plik default-config.h to
    wiedza o uart avr wyciekła by z implementacji specyficznej dla hardware
    do globalnej przestrzeni gdzie ją ciężko utrzymać.

    W moim rozwiązaniu zależności są detektowane i obliczane w c drivera bo
    nie ma innej możliwości. I dzieki temu plik default-config jest czysty o
    specyficznej wiedzy o hardware. Nie zawsze, ale zazwyczaj. Innymi słowy
    wszystko co dotyczy avr znajduje się w katalogu /avr/ i nie przecieka do
    inych plików.

    Przy czym żeby było jasno - oba podejścia są tak samo mizerne.


  • 27. Data: 2012-05-06 21:32:03
    Temat: Re: [OT] Zarządzanie konfiguracją modułów kodu źródłowego
    Od: mk <reverse_lp.pw@myzskm>

    W dniu 2012-05-06 19:00, Sebastian Biały pisze:
    > On 2012-05-06 18:18, mk wrote:
    >>> Nie. plik lokalny dla projektu nadpisuje parametry domyślne.
    >> Używając #undef???
    >
    > Uzywając def.
    >
    > Np. tak:
    >
    > default-config: #define UART_STOP_BITS 1
    >
    > project-config: #include "default.h", #define UART_STOP_BITS 2

    Redefiniowanie makra nową wartością jest nielegalne!!!

    >
    >> IMO zdecydowanie lepsze jest jednak włączenie najpierw pliku z
    >> konfiguracją użytkownika, a potem nagłówek z konfiguracją domyślną -- to
    >> zresztą powszechna praktyka.
    >
    > Zdecydowana lepszośc tutaj dyskusyjna. Oba rozwiązania działają.

    Jak gdzie (patrz wyżej).
    Można by odwołać jak wspomniałem z użyciem #undef, ale użycie #undef
    jest niezgodne np. z MISRA-C i w ogóle niepotrzebnie zaciemnia plik
    konfiguracji użytkownika.

    >
    >> Plik nagłówkowy "defaultconfiguration.h" nie definiuje parametrów już
    >> zdefiniowanych (#ifndef), a jedynie te które jeszcze nie zostały
    >> zdefiniowane nadając im wartości domyślne (+ ewentualnie jakiś komunikat
    >> przy pomocy #warning), obliczając je (np. na podstawie parametrów
    >> podanych przez użytkownika) lub walnąć błędem (#error) jeśli parametr ma
    >> być obligatoryjne określony przez użytkownika.
    >
    > W drugą stronę działa to tak samo (nie)skutecznie bez #ifndef, kwestia
    > implementacji.

    Niezgodne ze standardem.

    > IMO to nie konfiguracja powinna szukać bledów w #define i wyliczać
    > pośrednie parametry tylko implementacja.

    To zależy i to już trochę inny temat... część rzeczy można i należy
    sygnalizować już na wczesnym etapie rozpoznania konfiguracji użytkownika
    np. zgodność wersji modułu bibliotecznego i jej użytkownika, czy wiele
    innych parametrów o globalnym charakterze.
    Rozmowa na temat czy "default.h" należy czy nie należy do implementacji
    jest również czysto akademicka, tak jak i gdzie najlepiej określać
    parametry default.

    pzdr
    mk


  • 28. Data: 2012-05-06 22:05:44
    Temat: Re: [OT] Zarządzanie konfiguracją modułów kodu źródłowego
    Od: Sebastian Biały <h...@p...onet.pl>

    On 2012-05-06 21:32, mk wrote:
    >> Uzywając def.
    >> Np. tak:
    >> default-config: #define UART_STOP_BITS 1
    >> project-config: #include "default.h", #define UART_STOP_BITS 2
    > Redefiniowanie makra nową wartością jest nielegalne!!!

    Masz rację, jak zwykle pisze skrótami i nie wszystko podaje. Oczywiscie
    że jest #undef ale tylko dlatego że nie da się zrobić wprost #define
    ponownie (w gcc da się). Samo undef jest wyłacznie wytrychem a nie
    sednem metody. Sendem metody jest ponowne zdefiniowanie symbolu
    nadpisując default.

    Jak napisałem - dla mnie nie ma znaczenia którą metodą inkludowania
    wybierzesz - obydwie sa mizerne i sprwadzają się do tej samej sieczki w
    define.

    > jest niezgodne np. z MISRA-C i w ogóle niepotrzebnie zaciemnia plik
    > konfiguracji użytkownika.

    Nie mam targetu na misra-c. Więc ich zalecenia nie są dla mnie kluczowe.
    Czy zaciemnia - to już inna sprawa. W odwrotnej konfiguracji zaciemnia
    #ifdef. Tak czy inaczej - to nie wygląda dobrze.

    Prawde mowiąc korzystam znacznie częściej ze statycznego polimorfizmu.
    #define to odprysk w kilku miejscach.

    Mam taki nieskończony projekcik (który strasznie zaniedbałem, ale
    obiecuje poprawę) na SF, możesz sobie zerknąć co mam na myśli:

    http://sourceforge.net/projects/microheap/

    > sygnalizować już na wczesnym etapie rozpoznania konfiguracji użytkownika
    > np. zgodność wersji modułu bibliotecznego i jej użytkownika, czy wiele
    > innych parametrów o globalnym charakterze.

    W moim przypadku nie sposób w momencie inkludowania default wykryć czy
    dopuszczalne jest mieć uart o 2 bitach stopu. Przy czym "nie sposób" w
    sensie, że jakikolwiek sposób powoduje wyciek wiedzy o hardware do
    miejsca o innym poziomie abstrakcji. Im niej zależności tym lepiej dla
    projektu.

    > Rozmowa na temat czy "default.h" należy czy nie należy do implementacji
    > jest również czysto akademicka, tak jak i gdzie najlepiej określać
    > parametry default.

    Z tej akademickiej dyskusji wynikają dobre praktyki. Dla mnie on nie
    jest akademicka, bo dzieki takiemu podejsciu nie mam burdelu w kodzie.


  • 29. Data: 2012-05-06 22:25:15
    Temat: Re: [OT] Zarządzanie konfiguracją modułów kodu źródłowego
    Od: mk <reverse_lp.pw@myzskm>

    W dniu 2012-05-06 17:41, Andrzej Ekiert pisze:
    > Dnia 06-05-2012 o 17:21:11 mk <reverse_lp.pw@myzskm> napisał(a):
    >
    >> Ciągle nie rozumiem na czym polega Twój problem...
    >> Skoro pojawia się nowy parametr modułu bibliotecznego, to mamy dwie
    >> opcje: albo musi on być obligatoryjne określony przez użytkownika
    >> biblioteki (wtedy zdajemy się na kompilator i błąd klasy undefined),
    >> albo nowy parametr ma jakąś wartość domyślną (stałą lub jakoś
    >> ewaluowaną) i użytkownik ewentualnie może przedefiniować ten parametr.
    >
    > Skłaniam się ku pierwszej opcji: obligatoryjne określenie, nawet jeśli
    > zwykle będzie to przypisanie wartości domyślnej. Chcę jakoś sobie to
    > określanie usprawnić semi-automatyzując zadanie. Na razie mam tylko
    > autowykrywanie przez próbę kompilacji gdzie parametr nie jest
    > zdefiniowany. Chciałbym ułatwić sobie dodawanie tego parametru do plików
    > konfiguracyjnych,

    Nie rozumiem nadal dlaczego nie posługiwać się wartością domyślną
    konfiguracji zdefiniowaną gdzieś w module bibliotecznym...

    #ifndef ALPHA
    #error ALPHA parameter must be defined in your configuration file.
    #endif

    lub

    #ifndef ALPHA
    #warning Using defalut value X of ALPHA parameter. Specify an explict
    definition of ALPHA parameter in your configuration file to suppress
    this warning.
    #define ALPHA X
    #endif

    lub po cichu

    #ifndef ALPHA
    #define ALPHA X
    #endif

    > oraz mieć wykrywanie ustawienia parametrów, które
    > stały się "obsolete".

    #ifdef ALPHA
    #warning ALPHA parameter is obsolete configuration value. Use BRAVO instead.
    #endif

    Jeśli wzbraniasz się przed konceptem konfiguracji domyślnej wtedy po
    prostu pozostaje jakaś automatyczna modyfikacja plików wielu projektów
    -- zwykle z wykorzystaniem języków skryptowych, albo zaawansowanego edytora.

    W sumie można sobie wyobrazić jakiś system zarządzania konfiguracjami
    np. w postaci jakiejś bazy danych czy coś... Nie nie spotkałem się z
    czymś takim.

    pzdr
    mk


  • 30. Data: 2012-05-06 23:02:55
    Temat: Re: [OT] Zarządzanie konfiguracją modułów kodu źródłowego
    Od: "Andrzej Ekiert" <d...@t...pl>

    Dnia 06-05-2012 o 22:25:15 mk <reverse_lp.pw@myzskm> napisał(a):

    > Nie rozumiem nadal dlaczego nie posługiwać się wartością domyślną
    > konfiguracji zdefiniowaną gdzieś w module bibliotecznym...
    >
    > #ifndef ALPHA
    > #error ALPHA parameter must be defined in your configuration file.
    > #endif

    To w zasadzie mam teraz, tyle że warning lub błąd wynikający z
    niezdefiniowania ALPHA generuje się samoczynnie w miejscu jego użycia
    (bezwzględnie tego pilnuję). Nie trzeba więc nawet takiego #ifndefa pisać.

    > #ifndef ALPHA
    > #warning Using defalut value X of ALPHA parameter. Specify an explict
    > definition of ALPHA parameter in your configuration file to suppress
    > this warning.
    > #define ALPHA X
    > #endif

    Można. Ale wciąż wymaga ręcznego dopisania #define ALPHA wszędzie, jeśli
    się nie chce tych warningów. A to mnie właśnie boli, ze względu na
    bezproduktywną pracochłonność.

    > lub po cichu
    >
    > #ifndef ALPHA
    > #define ALPHA X
    > #endif

    Ryzykowne - otrzymujący mój kod mogą nie zauważyć nowych opcji, które np.
    mogą okrajać dotychczasową funkcjonalność. Sam mogę zapomnieć ustawić w
    jednym z projektów.

    > #ifdef ALPHA
    > #warning ALPHA parameter is obsolete configuration value. Use BRAVO
    > instead.
    > #endif

    Można, ale wymaga trzymania całej historii. Średnio mi się podoba taki
    śmietniczek.

    > W sumie można sobie wyobrazić jakiś system zarządzania konfiguracjami
    > np. w postaci jakiejś bazy danych czy coś... Nie nie spotkałem się z
    > czymś takim.

    No właśnie sobie to wyobraziłem. Chyba będę pisał, bo niczego sensownego
    nie znalazłem. Jeśli mi się uda skończyć, to opublikuję pod GPL.

    ae

strony : 1 . 2 . [ 3 ] . 4 . 5


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: