RTV forum PL | NewsGroups PL

Jak zdefiniować jednoznaczne makra dla portów i flag w C, aby uniknąć błędów?

Definiowane portów/flag w C

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak zdefiniować jednoznaczne makra dla portów i flag w C, aby uniknąć błędów?

Goto page Previous  1, 2

sword
Guest

Fri Oct 20, 2017 11:57 am   



On 2017-10-19 21:38, Grzegorz Niemirowski wrote:
Quote:
Musisz stworzyć coś, co oprócz bitu będzie nisło też
informację o porcie, np.

Fajny przykład ale do pracy z bitami to za dużo kodu.

--
sword

sword
Guest

Fri Oct 20, 2017 12:21 pm   



On 2017-10-20 11:53, Janusz wrote:
Quote:
Ja to robię tak wpierw definicje makr

Dzięki, o to mi chodziło :)


--
sword

Adam Wysocki
Guest

Fri Oct 20, 2017 3:17 pm   



sword <nick@poczta.onet.pl> wrote:

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

Niekoniecznie.

Quote:
static inline void setbit (u8 port, u8 pin)

Nie wiem na jaką platformę piszesz, ale na AVR port nie ma typu u8
(uint8).

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

setbit(F_LED)

Spróbuj tak:

[gof@pi /tmp]$ cat test.c
#include <inttypes.h>
#include <avr/io.h>

// bez nawiasów, żeby nie rozwinęło się tylko do jednego argumentu
#define MAKE(port, bit) &port, _BV(bit)

// podejście z MAKE
#define LED1 MAKE(PORTB, 3)
#define BUZZER1 MAKE(PORTC, 0)

// podejście bez MAKE - bez nawiasów!
#define LED2 &PORTB, _BV(3)
#define BUZZER2 &PORTC, _BV(0)

static inline void setbit(volatile uint8_t *port, uint8_t mask)
{
*port |= mask;
}

int main(void)
{
setbit(LED1);
setbit(BUZZER1);
setbit(LED2);
setbit(BUZZER2);

return 0;
}
[gof@pi /tmp]$ avr-gcc -mmcu=atmega8 -Wall -Wextra test.c
[gof@pi /tmp]$

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

Goto page Previous  1, 2

elektroda NewsGroups Forum Index - Elektronika Polska - Jak zdefiniować jednoznaczne makra dla portów i flag w C, aby uniknąć błędów?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map