eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › Definiowane portów/flag w C
Ilość wypowiedzi w tym wątku: 18

  • 1. Data: 2017-10-19 13:01:49
    Temat: Definiowane portów/flag w C
    Od: sword <n...@p...onet.pl>


    Cześć,

    Może nie do końca ta grupa ale wielu z Was pisze w C i może mi podpowie :)

    Korzystam z takich makr, które pracują na bitach, np.:

    #define setbit(VAR,Place) ( (VAR) |= (uint8_t)((uint8_t)1<<(uint8_t)(Place)) )

    w programie mam zdefiniowane np.:

    #define PORT_LED GPIOA
    #define LED_R 0

    uint8_t main_flags1, main_flags2, main_flags3;
    #define FLAGA1 0
    #define FLAGA2 0


    i później takie wykorzystanie np.:

    setbit(PORT_LED, LED_R);
    setbit(main_flags, FLAGA1);
    setbit(main_flags2, FLAGA2);

    Przy portach to jeszcze nie jest problemu ale przy flagach trzeba
    ręcznie panować nad tym w której zmiennej leży jaka flaga. Już
    kilka razy szukałem przez to błędów.

    Jak zrobić, żeby odwołanie do flagi było jednoznaczne, chodziło by mi
    o coś takiego (co nie działa przez ten przecinek):

    #define F_LED_R PORT_LED,LED_R

    setbit(F_LED_R);

    Wtedy w programie nie muszę się już zastanawiać gdzie leży jaki bit.

    Zawsze tak pisałem w asm, a teraz mi tego brakuje :)


    Pozdrawiam,
    --
    sword


  • 2. Data: 2017-10-19 13:47:30
    Temat: Re: Definiowane portów/flag w C
    Od: g...@s...invalid (Adam Wysocki)

    sword <n...@p...onet.pl> wrote:

    > Jak zrobić, żeby odwołanie do flagi było jednoznaczne, chodziło by mi
    > o coś takiego (co nie działa przez ten przecinek):
    >
    > #define F_LED_R PORT_LED,LED_R
    >
    > setbit(F_LED_R);

    #define led_set() set_bit(PORT_LED, LED_R)

    --
    [ Email: a@b a=grp b=chmurka.net ]
    [ Web: http://www.chmurka.net/ ]


  • 3. Data: 2017-10-19 14:15:54
    Temat: Re: Definiowane portów/flag w C
    Od: sword <n...@p...onet.pl>

    On 2017-10-19 13:47, Adam Wysocki wrote:
    > sword <n...@p...onet.pl> wrote:
    >
    >> Jak zrobić, żeby odwołanie do flagi było jednoznaczne, chodziło by mi
    >> o coś takiego (co nie działa przez ten przecinek):
    >>
    >> #define F_LED_R PORT_LED,LED_R
    >>
    >> setbit(F_LED_R);
    >
    > #define led_set() set_bit(PORT_LED, LED_R)

    Ja tych makr mam więcej, to był tylko przykład z 'setbit'.
    Chodzi o to, żeby w dowolnym makrze można było podstawić port
    lub flagę nie generując przy tym osobnego makra dla każdego
    przypadku, np.:

    setbit(F_LED_R);
    clrbit(F_LED_R);
    chgbit(F_LED_R);
    if (valbit(F_LED_R))


    --
    sword


  • 4. Data: 2017-10-19 14:30:25
    Temat: Re: Definiowane portów/flag w C
    Od: Waldemar <w...@z...fu-berlin.de>

    Am 19.10.2017 um 14:15 schrieb sword:
    > On 2017-10-19 13:47, Adam Wysocki wrote:
    >> sword <n...@p...onet.pl> wrote:
    >>
    >>> Jak zrobić, żeby odwołanie do flagi było jednoznaczne, chodziło by mi
    >>> o coś takiego (co nie działa przez ten przecinek):
    >>>
    >>> #define F_LED_R PORT_LED,LED_R
    >>>
    >>> setbit(F_LED_R);
    >>
    >> #define led_set() set_bit(PORT_LED, LED_R)
    >
    > Ja tych makr mam więcej, to był tylko przykład z 'setbit'.
    > Chodzi o to, żeby w dowolnym makrze można było podstawić port
    > lub flagę nie generując przy tym osobnego makra dla każdego
    > przypadku, np.:
    >
    > setbit(F_LED_R);
    > clrbit(F_LED_R);
    > chgbit(F_LED_R);
    > if (valbit(F_LED_R))

    a czemu upierasz się przy makrach? Nie możesz dać inline function?

    Waldek


  • 5. Data: 2017-10-19 20:17:48
    Temat: Re: Definiowane portów/flag w C
    Od: Sebastian Biały <h...@p...onet.pl>

    On 10/19/2017 1:01 PM, sword wrote:
    > Wtedy w programie nie muszę się już zastanawiać gdzie leży jaki bit.

    Nie musisz jesli użyjesz C++. Nie mam stosownego przykładu pod reką w
    tej chwili ale kilka lat temu mając ochote ukręcić leb idiotom od
    definicji rejestrow SAM7 narzeźbilem coś takiego i "sprzedałem" kod.
    Napisanie tego na nowo jest w zasadzie osiągalne.

    Oczywiście od razu informacja dla wszystkich co podskoczyli na hasło C++
    - ten mechanizm nie genaruje ani bajta więcej w kodzie. To
    metaprogramowanie na szablonach, operatorach itd, na końcu wychodzi to
    samo tylko pewne i bez głupich pomyłek i wygląda prawie identycznie.


  • 6. Data: 2017-10-19 21:14:07
    Temat: Re: Definiowane portów/flag w C
    Od: sword <n...@p...onet.pl>

    On 2017-10-19 14:30, Waldemar wrote:
    >> Ja tych makr mam więcej, to był tylko przykład z 'setbit'.
    >> Chodzi o to, żeby w dowolnym makrze można było podstawić port
    >> lub flagę nie generując przy tym osobnego makra dla każdego
    >> przypadku, np.:
    >>
    >> setbit(F_LED_R);
    >> clrbit(F_LED_R);
    >> chgbit(F_LED_R);
    >> if (valbit(F_LED_R))
    >
    > a czemu upierasz się przy makrach? Nie możesz dać inline
    > function?

    Hmm, mogę dać inline ale wydaje mi się, że jestem w tym samym
    punkcie co z makrami.

    static inline void setbit (u8 port, u8 pin)
    {
    port |= 1<<pin;
    }

    No i co dalej? Chciałbym ją tak samo wywołać, np.:

    setbit(F_LED)


    --
    sword


  • 7. Data: 2017-10-19 21:15:46
    Temat: Re: Definiowane portów/flag w C
    Od: sword <n...@p...onet.pl>

    On 2017-10-19 20:17, Sebastian Biały wrote:
    > On 10/19/2017 1:01 PM, sword wrote:
    >> Wtedy w programie nie muszę się już zastanawiać gdzie leży
    >> jaki bit.
    >
    > Nie musisz jesli użyjesz C++. Nie mam stosownego przykładu
    > pod reką w tej chwili ale kilka lat temu mając ochote
    > ukręcić leb idiotom od definicji rejestrow SAM7 narzeźbilem
    > coś takiego i "sprzedałem" kod. Napisanie tego na nowo jest
    > w zasadzie osiągalne.
    >
    > Oczywiście od razu informacja dla wszystkich co podskoczyli
    > na hasło C++ - ten mechanizm nie genaruje ani bajta więcej w
    > kodzie. To metaprogramowanie na szablonach, operatorach itd,
    > na końcu wychodzi to samo tylko pewne i bez głupich pomyłek
    > i wygląda prawie identycznie.

    Ja mam C na sztywno w tym projekcie i nie dam rady przeskoczyć
    na C++.

    --
    sword


  • 8. Data: 2017-10-19 21:19:39
    Temat: Re: Definiowane portów/flag w C
    Od: Sebastian Biały <h...@p...onet.pl>

    On 10/19/2017 9:15 PM, sword wrote:
    > Ja mam C na sztywno w tym projekcie i nie dam rady przeskoczyć
    > na C++.

    Z powodu jakiego? Technicznego czy białkowego?


  • 9. Data: 2017-10-19 21:38:58
    Temat: Re: Definiowane portów/flag w C
    Od: "Grzegorz Niemirowski" <g...@p...onet.pl>

    sword <n...@p...onet.pl> napisał(a):
    > Hmm, mogę dać inline ale wydaje mi się, że jestem w tym samym
    > punkcie co z makrami.
    > static inline void setbit (u8 port, u8 pin)
    > {
    > port |= 1<<pin;
    > }
    > No i co dalej? Chciałbym ją tak samo wywołać, np.:
    > setbit(F_LED)


    Musisz stworzyć coś, co oprócz bitu będzie nisło też informację o porcie,
    np.

    #include <stdio.h>

    #define PINA1 0x01
    #define PINA2 0x02
    #define PINB2 0x02
    #define PINB3 0x03

    #define F_PINA1 (0x0000 | PINA1)
    #define F_PINA2 (0x0000 | PINA2)
    #define F_PINB2 (0x0100 | PINB2)
    #define F_PINB3 (0x0100 | PINB3)

    int porta = 0, portb = 0;

    void setpin(unsigned int fpin);

    int main() {
    setpin(F_PINA1);
    setpin(F_PINA2);
    setpin(F_PINB2);
    setpin(F_PINB3);
    printf("%x %x\n", porta, portb);
    return 0;
    }

    void setpin(unsigned int fpin){
    int port = fpin >> 8;
    int pin = 0x00ff & fpin;
    switch(port) {
    case 0x00:
    porta |= 1 << pin;
    break;
    case 0x01:
    portb |= 1 << pin;
    break;
    }
    }

    --
    Grzegorz Niemirowski
    http://www.grzegorz.net/


  • 10. Data: 2017-10-19 22:17:29
    Temat: Re: Definiowane portów/flag w C
    Od: sword <n...@p...onet.pl>

    On 2017-10-19 21:19, Sebastian Biały wrote:
    > On 10/19/2017 9:15 PM, sword wrote:
    >> Ja mam C na sztywno w tym projekcie i nie dam rady
    >> przeskoczyć
    >> na C++.
    >
    > Z powodu jakiego? Technicznego czy białkowego?

    Jest narzucone z "góry".

    --
    sword

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: