Arduino Polska Forum
Problem z kompilacją własnej biblioteki - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica)
+--- Wątek: Problem z kompilacją własnej biblioteki (/watek-problem-z-kompilacj%C4%85-w%C5%82asnej-biblioteki)



Problem z kompilacją własnej biblioteki - Adix3 - 15-01-2025

Cześć.

Mam problem. Próbuję stworzyć swoją pierwszą bibliotekę do obsługi GPS. Zrobiłem więc dwa pliki GPS.h i GPS.cpp.

W GPS.h mam:


Kod:
class GPS
{
  // PRIVATE VARIABLES
  private:

    HardwareSerial        *_Serial;           
    uint8_t              _PinRx;             
    uint8_t              _PinTx;             

  // PUBLIC METHODS
  public:

    /// @brief Konstruktor klasy GPS.
    GPS(HardwareSerial &Interface, uint8_t PinRx, uint8_t PinTx);
   
    /// @brief Inicjalizacja portu UART do komunikacji z GPS.
    void begin(uint16_t Baudrate = 9600);

};


A w GPS.cpp mam:


Kod:
GPS::GPS(HardwareSerial &Interface, uint8_t PinRx, uint8_t PinTx)
{
  _Serial    = &Interface;                           
  _PinRx      = PinRx;                                 
  _PinTx      = PinTx;                                 
}

void GPS::begin(uint16_t Baudrate)
{
  // Otworzenie portu UART na wskazanych pinach.
  _Serial.end();
  _Serial.begin(Baudrate, SERIAL_8N1, _PinRx, _PinTx);
  while(!(*(_Serial)));
}


Oczywiście pomijam inne istatne kwestie jak dodanie "#ifndef GPS_h" czy #include z bliblioteką.
Stworzyłem sketch i w nim coś takiego:


Kod:
[...]
GPS GPS(Serial2, 23, 19);

void setup() {
  GPS.begin();
}

[...]


Podczas próby kompilacji mam błąd:

c:\Users\Adam\Desktop\LTSketchbook\libraries\GPS\src\GPS.cpp:51:11: error: request for member 'begin' in '((GPS*)this)->GPS::_Serial', which is of pointer type 'HardwareSerial*' (maybe you meant to use '->' ?)
  51 |  _Serial.begin(Baudrate, SERIAL_8N1, _PinRx, _PinTx);
      |          ^~~~~

O co chodzi?

Moja "biblioteka" na razie ma tylko tyle, bo próbuję czy w ogóle idę w dobrym kierunku, ale już na starcie poległem.


RE: Problem z kompilacją własnej biblioteki - kaczakat - 15-01-2025

Zobacz jak są robione inne biblioteki, sam nie pisałem ale kojarzę, że nie możesz tak zmieniać hardware serial, jak jest sprzętowy to po prostu podajesz który i on ma zafiksowane piny RX/TX, jak chcesz podać piny to musisz użyć jakiś SoftSerial.


RE: Problem z kompilacją własnej biblioteki - Adix3 - 15-01-2025

(15-01-2025, 15:36)kaczakat napisał(a): Zobacz jak są robione inne biblioteki, sam nie pisałem ale kojarzę, że nie możesz tak zmieniać hardware serial, jak jest sprzętowy to po prostu podajesz który i on ma zafiksowane piny RX/TX, jak chcesz podać piny to musisz użyć jakiś SoftSerial.


Zapomniałem dodać, że chodzi o ESP32. Tutaj da się zmieniać piny. Ale nie w tym problem raczej.


RE: Problem z kompilacją własnej biblioteki - oscarX - 15-01-2025

(15-01-2025, 09:44)Adix3 napisał(a): Cześć.

Mam problem. Próbuję stworzyć swoją pierwszą bibliotekę do obsługi GPS. Zrobiłem więc dwa pliki GPS.h i GPS.cpp.

W GPS.h mam:


Kod:
class GPS
{
    HardwareSerial        *_Serial;           

A w GPS.cpp mam:


Kod:
  _Serial.end();
  _Serial.begin(Baudrate, SERIAL_8N1, _PinRx, _PinTx);

Podczas próby kompilacji mam błąd:

c:\Users\Adam\Desktop\LTSketchbook\libraries\GPS\src\GPS.cpp:51:11: error: request for member 'begin' in '((GPS*)this)->GPS::_Serial', which is of pointer type 'HardwareSerial*' (maybe you meant to use '->' ?)
  51 |  _Serial.begin(Baudrate, SERIAL_8N1, _PinRx, _PinTx);
      |          ^~~~~

Przecież kompilator wyraźnie napisał - masz dać -> a nie kropkę, _Serial masz jako wskaźnik a nie referencje.
_Serial->end();
_Serial->begin(...)