@mokrowski
1. A jakie obliczenia mogą wykonać szablony, których nie wykonają makra, i co w moim kodzie można obliczyć jeszcze poza BAUD_CALC ? Mi się od zawsze wydawało że obliczenia w trakcie kompilacji wykonuje kompilator ustawiony na inną flagę niż -O0 niezależnie od tego czy są jakieś szablony czy jest to bezpośrednio w kodzie.
2. W zasadzie mogło by oszczędzić paru makr, ale nie bardzo wiem jak to uzyskać w obecnym kodzie.
3. A którą implementacje masz na myśli ?
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Nie jestem pewien czy obecne biblioteki standardowe libc++, MSVCRT itd. posiadają tą "funkcjonalność" bo wszystko jest zaszyte w skompilowanych dll'kach i nie bardzo można to sprawdzić
.
4. wyjątkowa racja
5. Problem jest taki że takie ATiny co mają wyjątkowo mało ramu raczej nie posiadają drugiego uarta
W zasadzie transmisje blokującą można uzyskać przez ustawienie buforu na 1 bajt (kod obsługi bufora jest współdzielony więc nie ma "puchnięcia" na drugim uarcie). Niestety w obecnym kodzie obsługa takich różniących sie buforów nie obędzie się bez doładowania biblioteki kodem do obsługi tychże.
(jakieś warunki w konstruktorze, potrzebne są zmienne dla rozmiaru bufora/maski, może nawet jakieś dodatkowe metody pracy na tymże buforze, No i jak by wyglądało "dobieranie" się do takiego bufora w przerwaniu
)
7. Biblioteka ta w zamyśle miała służyć do operacji znakowych jakimi są właśnie putstr() putint() itd. (tak jak w wielu innych bibliotekach), których jest tylko 7 (+2 makra) z czego używanych będzie najwyżej 4. Dla tak małej ilości funkcji, praktycznie tego samego zastosowania (operacje znakowe) jakoś niewielki jest sens rozdzielania klasy na podklasy z 'przeklejonymi' kilkoma funkcjami.
No i kwestia zasobów - co z tego że oddzielę bufor od głównej klasy skoro rozwiązanie zachowujące obecny rozmiar kodu nie będzie się niczym różniło od obecnego. (czyli nadal mamy umieszczony w klasie bufor definiowany makrem)
Ale mimo wszystko zewnętrzny bufor który jest rzeczywiście reużywalny (a nie że jest po prostu 'wycięty' z jakiejś konkretnej klasy) dla i2c, usb, adc itd. to dosyć ciekawy pomysł i czekam z niecierpliwością na dalszy cykl poradników
(może jakoś mnie nakierują na właściwą drogę)
A sama biblioteka na obecnym etapie najbardziej by zyskała na przepisaniu jej do C co by zrzuciło kolejne bajty narzutu.
EDIT:
mokrowski napisał(a):
Dość że kod który prezentujesz w mojej ocenie nie spełnia roli wzorcowego a wypowiedź: ,,Powodem popełnienia tej biblioteki jest to iż wiele z ogólnodostępnych bibliotek dedykowanych C++, jest doskonałym przykładem jak NIE NALEŻY tworzyć bibliotek w C++", potraktuję z dużym przymrużeniem oka
Właśnie mi przypomniałeś dlaczego tak a nie inaczej napisałem: jest ich masa i 99% z nich nie spełnia twoich założeń, a jak by tego było mało, są one napisane do obsługi jednego uarta a próba implementacji drugiego skończyła by się ... na przepisaniu CAŁEJ biblioteki od nowa
, czyli jawnie łamią zasadę reużywalności (bo hardcodowanie w C wyjdzie znacznie lepiej).
No i obawiam się że użycie zewnętrznych buforów wymaga dynamicznej alokacji.
EDIT2:
Mimo wszystko dzięki za wszelkie uwagi odnośnie "obiektowości" mojego kodu.
Prawdopodobnie z tym hardcorowym podejściem do optymalizacji przeniosę się do C, a tej bibliotece pozwolę trochę napuchnąć o obiektowość
Tak apropo, to ile flasha zajmuje twoja implementacja (lub celujesz że będzie zajmowała) dla zwykłego "hello worlda" i bardziej rozbudowanych przykładów ?
Teraz potrzebował bym jeszcze zebrać opinie o samym kodzie, jego 'jakości', komentarzach (za dużo, za mało, są miejsca niejasne, albo po prostu brakuje komentarzy z serii 'captain obvious'
) czy nawet sposobie (i brakach) w przedstawieniu tej biblioteki.