Arduino Polska Forum

Pełna wersja: Problem z kompilacją własnej biblioteki
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
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.
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.
(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.
(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(...)