architektura programu dla systemów embedded

0

Problem jest następujący:

Mikrokontroler posiada 2 układy peryferyjne umożliwiające komunikację po CAN. Docelowo w aplikacji będzie używany jeden układ (95% pewności). Zastanawiam się w jaki sposób powinienem zrealizować klasę do obsługi CAN. To co przyszło mi do głowy to (interesuje mnie najniższa warstwa oprogramowania):

-> zaimplementować klasę korzystając ze wzorca Singleton dla jednego układu CAN
-> wyodrębnić interfejs, który będą implementować 2 klasy konkretne CAN (w postaci Singleton)
-> zaimplementować bardzo uniwersalną klasę(trudniejsze), i na sztywno w zakresie życia globalnym stworzyć 2 obiekty tego typu (nie ma sensu inicjalizować układ przy każdym stworzeniu klasy, a nawet mogą być przez to błędy), które będą reprezentowały pierwszy i drugi fizyczny układ.

Oczywiście według mnie najlepiej byłoby stworzyć uniwersalną klasę, ale biorąc pod uwagę o ile łatwiej byłoby zaimplementować inne rozwiązania to dość trudno mi się przekonać do tego rozwiązania. Na minus tego rozwiązania idzie również fakt, że nie ma takiej możliwości, żeby projekt używał więcej niż 2ch instancji takiej klasy, a i tak jestem przekonany że jedna będzie wystarczająca.

Niestety osób piszących w C++ dla urządzeń tego typu jest mało, przykładów jeszcze mniej, więc nie mam na czym się wzorować. Proszę o wasze zdanie i opinie na ten temat. Z góry bardzo dziękuję :)

2

Zawsze można podejrzeć jak to jest gdzie indziej zrobione(np. Arduino). Skoro masz wsparcie dla 2 CAN`ów możesz utworzyć 2 klasy(singletony) które będą udostępniały interfejs do komunikacji niskopoziomowej. Potem utworzyć uniwersalną klasę która będzie dawała wyższy poziom abstrakcji do komunikacji.

1

No bez jaj z tym Arduino. -_-

Jakiś chibiOS albo inny NutTx prędzej...

Jaki to uC i jak zrealizowany jest dostęp do CANa?

Na STM32 szedłem w rozw. 3, w klasie przechowywałem wskaźnik do konkretnego peryferiala po prostu, było to o tyle dobre, że fajnie się skalowało przy różnych prockach i niezbyt mnie wtedy obchodziło czy ma on danych peryferiów 3 czy 10. Przy czym headery od ST są o tyle przyjemne, że mają rejestry upakowane w struktury i dostęp jest przez to dość wygodny (i izolowany). Tak dobrze nie ma np. w AVR.

1 użytkowników online, w tym zalogowanych: 0, gości: 1