Skocz do zawartości

Biblioteka z API dla kilku rodzin uP


Pomocna odpowiedź

Napisano

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.

(edytowany)

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
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ź.

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...