Skocz do zawartości

Biblioteka z API dla kilku rodzin uP


Chev

Pomocna odpowiedź

Dzień dobry, 

Chciałbym zrealizować dwa projekty, gdzie jeden będzie zbudowany w oparciu o procesor STM32, a drugi ESP32. Pomimo, że oba projekty zupełnie się różnią to łączyć je będą niektóre funkcjonalności jak obsługa diod czy buzzera. Chciałbym napisać taką bibliotekę, którą będę mógł sobie rozwijać o kolejne procesory (o ile się pojawią). Piszę w C++. Pytanie moje jest o zasadę pisania takiej biblioteki. Osobiście mam pomysł na to taki (dla ustalenia uwagi obsługa buzzera):

1. Tworzymy klasę wirtualną z metodami wirtualnymi, które będą stanowić API.  

2. Tworzymy klasę, osobno dla ESP i STM. Dziedziczymy wszystkie metody z poprzednio utworzonej klasy wirtualnej. 

3. Tworzymy plik nagłówkowy z makro (if define) dla ESP i STM, gdzie przez preprocesor wybrany zostanie plik nagłówkowy dla klasy dla ESP lub STM.


W taki sposób będę mógł rozwijać swoje API na różnych platformach i korzystać z tych samych metod (implementacja może trochę się różnić w zależności od chipu)

Czy taki plan działania ma sens? Do tej pory nie pisałem takiej biblioteki na różne chipy, a bardzo ułatwiłoby mi to pracę. Dziękuję z góry za pomoc.

Link do komentarza
Share on other sites

Wersje są różne. C++ jest trochę ograniczony jeżeli chodzi o dziedziczenie względem Javy czy C# (zwłaszcza nowszych wersji C#). Ogólnie moje podejście to zwykle stworzenie klasy abstrakcyjnej z metodami bazowymi i abstrakcyjnymi, a następnie dziedziczenie z niej poprzez dzieci.

W tym przypadku struktura klas, której bym najpewniej wyglądałaby podobnie do tego:

  1. MCU.cpp
    1. ESP.cpp
      1. ESP32.cpp
      2. ESP8266.cpp
    2. STM.cpp
      1. STM32L4XX.cpp
        1. STM32L432.cpp
      2. STM32F1XX.cpp
        1. STM32F103.cpp
        2. STM32F107.cpp
    3. AVR.cpp
      1. ATMega8.cpp
      2. ATMega328.cpp
      3. ATMega2560.cpp

Ale to moje preferencje 😉

STM'y różnią się architekturą nawet wśród swojej rodziny (głównie chodzi o adresy przerwań).

Edytowano przez H1M4W4R1
Link do komentarza
Share on other sites

Dnia 1.11.2022 o 22:27, H1M4W4R1 napisał:

Wersje są różne. C++ jest trochę ograniczony jeżeli chodzi o dziedziczenie względem Javy czy C# (zwłaszcza nowszych wersji C#). Ogólnie moje podejście to zwykle stworzenie klasy abstrakcyjnej z metodami bazowymi i abstrakcyjnymi, a następnie dziedziczenie z niej poprzez dzieci.

W tym przypadku struktura klas, której bym najpewniej wyglądałaby podobnie do tego:

  1. MCU.cpp
    1. ESP.cpp
      1. ESP32.cpp
      2. ESP8266.cpp
    2. STM.cpp
      1. STM32L4XX.cpp
        1. STM32L432.cpp
      2. STM32F1XX.cpp
        1. STM32F103.cpp
        2. STM32F107.cpp
    3. AVR.cpp
      1. ATMega8.cpp
      2. ATMega328.cpp
      3. ATMega2560.cpp

Ale to moje preferencje 😉

W zasadzie mam bardzo podobny pomysł, tylko nie mogłem się jakoś wysłowić. Dziękuję za odpowiedź.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.