Skocz do zawartości

[STM32] Jak napisać makro dla I2C?


Pomocna odpowiedź

Napisano

Witam

Piszę bibliotekę do wyświetlacza i chciałbym napisać makro typu:

#define OLED_WriteCMD(com)	HAL_I2C_Mem_Write(&hi2c1, I2C_ADDR, 0x00, 1, (com), 1, 200)

Wyrzuca mi tu 2 błędy:

1. hi2c1 nie zdeklarowane. Jest zdeklarowane ale w pliku main.c

2. wartość com nie jest wskaźnikiem, a wartością. Jak mogę to obejść nie deklarując wcześniej zmiennej z tą wartością?

1. Wystarczy dodać deklarację (ale nie definicję) zmiennej hi2c1, czyli:

extern I2C_HandleTypeDef hi2c1;

Jednak to rozwiązanie mocno ogranicza zastosowanie makra, będzie działać tylko z tym interfejsem. Znacznie lepiej dodać hi2c1 jako parametr makra, czyli:

#define OLED_WriteCMD(i2c, com)    HAL_I2C_Mem_Write(&i2c, I2C_ADDR, 0x00, 1, (com), 1, 200)

2. Oczywiście że można. Wystarczy stworzyć makro będące blokiem kodu, w nim utworzyć zmienną i jej adres przekazać dalej. Więcej o takich sztuczkach podpowie wujek google, przykładowo: http://stackoverflow.com/questions/8764733/can-a-c-macro-contain-temporary-variables

  • Lubię! 1

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...