Jak mówiłeś o observerze to zastanawiałem się czy użyjesz malloca 🙂 Jak nie chę używać malloca (a w embedded nie chcę) to robię sobie enum ze slotami gdzie moge coś podpiąć: enum PeriodicTasksSlots { SLOT_1MS_0, SLOT_1MS_1, SLOT_1MS_2, SLOTS_1MS_LENGTH }; periodic_subscribe_1ms(SLOT_1MS_0, myFirstHandler); periodic_subscribe_1ms(SLOT_1MS_1, mySecondHandler); periodic_subscribe_1ms(SLOT_1MS_2, myThirdHandler); co myślisz o tym? ma taką wadę, że można nadpisać jakiś callback
No właśnie, bo i tak publisher trzyma listę callbacków. Ta lista może być zaimplementowana w postaci zwykłej tablicy bez malloców. Prawie zawsze kombinacja tablic, wskaźników i struktur umożliwi pominięcie malloca. W Twoim rozwiązaniu poszczególne moduły muszą wiedzieć, które sloty mogą użyć. Nie widzę takiej potrzeby - slotami powinien zarządzać publisher. Jeżeli faktycznie potrzebujesz gdzieś ID, to możesz je zwracać z funkcji. Ale w tym wypadku to chyba nie będzie potrzebne.
Faktycznie. Przeszukałem całe archiwum i nie ma obserwera w filmach. Był tylko na live'ach i w kursach. Tutaj masz w takim razie linka do nagrania z live, gdzie pokazuję przykład: ruclips.net/video/J7kk5T8dWA4/видео.html Jak by timestampy były źle - o obserwerze jest od około 1h28m do 1h42m
Najlepiej by było zrobić unit testy i sprawdzić przypadki brzegowe :) Ale to dojdzie dopiero później. Unit testy nawet znalazły gdzieś nulla w callbacku i był segmentation fault. Ale to spoiler z kilku odcinków do przodu :D Co do sprawdzania przy subskrybowaniu callbacka - zobacz, że jak sprawdzam w momencie wywołania, to nie ma znaczenia, czy ktoś dodał nulla czy nie. Poza tym po inicjalizacji cała tablica jest wypełniona nullami i też się muszę przed tym bronić. Tak wydawało mi się najprościej, ale faktycznie może są jakieś przypadki brzegowe i może da się to lepiej zaimplementować.
Jak mówiłeś o observerze to zastanawiałem się czy użyjesz malloca 🙂
Jak nie chę używać malloca (a w embedded nie chcę) to robię sobie enum ze slotami gdzie moge coś podpiąć:
enum PeriodicTasksSlots {
SLOT_1MS_0,
SLOT_1MS_1,
SLOT_1MS_2,
SLOTS_1MS_LENGTH
};
periodic_subscribe_1ms(SLOT_1MS_0, myFirstHandler);
periodic_subscribe_1ms(SLOT_1MS_1, mySecondHandler);
periodic_subscribe_1ms(SLOT_1MS_2, myThirdHandler);
co myślisz o tym? ma taką wadę, że można nadpisać jakiś callback
No właśnie, bo i tak publisher trzyma listę callbacków. Ta lista może być zaimplementowana w postaci zwykłej tablicy bez malloców. Prawie zawsze kombinacja tablic, wskaźników i struktur umożliwi pominięcie malloca. W Twoim rozwiązaniu poszczególne moduły muszą wiedzieć, które sloty mogą użyć. Nie widzę takiej potrzeby - slotami powinien zarządzać publisher. Jeżeli faktycznie potrzebujesz gdzieś ID, to możesz je zwracać z funkcji. Ale w tym wypadku to chyba nie będzie potrzebne.
Nie mogę znaleźć linku do filmu o observerze. Można prosić o wrzutkę?
Faktycznie. Przeszukałem całe archiwum i nie ma obserwera w filmach. Był tylko na live'ach i w kursach. Tutaj masz w takim razie linka do nagrania z live, gdzie pokazuję przykład:
ruclips.net/video/J7kk5T8dWA4/видео.html
Jak by timestampy były źle - o obserwerze jest od około 1h28m do 1h42m
chyba warto dać jakiegoś asserta przy rejestracji/subskrybcji co by nie był nullem zamiast w momencie wywołania zarejstrowanych metod.
Najlepiej by było zrobić unit testy i sprawdzić przypadki brzegowe :) Ale to dojdzie dopiero później. Unit testy nawet znalazły gdzieś nulla w callbacku i był segmentation fault. Ale to spoiler z kilku odcinków do przodu :D
Co do sprawdzania przy subskrybowaniu callbacka - zobacz, że jak sprawdzam w momencie wywołania, to nie ma znaczenia, czy ktoś dodał nulla czy nie. Poza tym po inicjalizacji cała tablica jest wypełniona nullami i też się muszę przed tym bronić. Tak wydawało mi się najprościej, ale faktycznie może są jakieś przypadki brzegowe i może da się to lepiej zaimplementować.