Zakładam naiwnie, że pytanie jest zadane na wyższym poziomie abstrakcji, niż poprzednicy je potraktowali
Teoretycznie (moje ulubione słowo) można rozważać to zagadnienie bez Waszych Ulubionych (TM) Afałerów i Baskomów
Najogólniej wszystko sprowadza się do
- stworzenia odpowiedniego algorytmu,
- podzielenia go na odpowiednio małe bloki funkcyjne
- zaimplementowaniu ich (na symulatorze, rzeczywistym uC, whatever...)
- przetestowaniu organoleptycznie
- ulepszaniu... (w kółko)
W przypadku implementacji Algorytm będzie 'obudowany' odpowiednimi poleceniami konfiguracyjnymi itp. itd.
Nie zniżając się jednak (na razie) do tak niskiego poziomu, zostańmy jeszcze przy algorytmie.
Najprostsze podejście to algorytm sekwencyjny, synchroniczny.
Polega on na wykonywaniu zaplanowanych czynności po kolei i odwoływaniu się do zasobów wtedy kiedy są potrzebne.
(zasoby to np. czujniki, silniki, etc.)
Z grubsza może to wyglądać tak:
1. odczytaj wskazania czujników
2. określ na podstawie odczytów nowy kierunek
3. wyślij odpowiednie polecenie do silników
4. skocz do punktu 1.
(Oczywiście te punkty są dość ogólne, w rzeczywistej implementacji trzeba by je jeszcze podzielić na mniejsze kroki - ale pewna baza już jest.)
Plusy takiego podejścia to łatwość w implementacji
Minusy: nie da się tak sterować efektywnie robotem, ani tworzyć skomplikowanych algorytmów.
Trochę trudniejszy to algorytm sekwencyjny, asynchroniczny.
Polega on na wykonywaniu zaplanowanych czynności po kolei.
Natomiast zasoby są obsługiwane poza główną pętlą programu, niezależnie od jej biegu (stąd asynchronicznie).
Do odpowiedniego komunikowania się z zasobami wykorzystuje się tzw. system przerwań.
Z grubsza może to wyglądać tak:
1. Sprawdź, czy odczyty z czujników są gotowe
1.1 jeśli tak, odczytaj wskazania czujników
1.2 określ na podstawie ostatnio odczytanych danych nowy kierunek
1.3 wyślij odpowiednie polecenie do silników
2. skocz do punktu 1.
Subtelna różnica, ale umożliwia już robienie ciekawszych rzeczy.
Plusy: efwktywniejsze wykorzystanie zasobów, nadal, dość łatwa implementacja (choć niewątpliwie potrzeba trochę praktyki)
Minusy: nadal jest granica skomplikowania, której nie da się tak przeskoczyć.
Im dalej tym trudniej i tym ciekawiej.
A co dalej?... jakieś proste systemy operacyjne na przykład.
Umiejętność programowania jako takiego pomaga.
A jak przechodzisz do konkretnej implementacji, wiedza o konkretnym uC już jest jednak potrzebna.
I nie musi to być ulubiony Afałer.
Rozpisał bym się, ale tak z doskoku trochę dziś jestem... ;>