@Situs, atmega16 + LCD HD44780, zmontowane na płytce stykowej, testowane przy użyciu analizatora stanów logicznych na termometrach DS18b20. Jestem niemal pewny, że ze stroną sprzętową wszystko jest w porządku.
@janusz17
Przez pisanie wszystkiego samemu rozwijam swoją wiedzę.
Mam pełną wiedzę na temat tego co się dzieje w chwili wywołania danej funkcji.
Mam niemalże pełną kontrolę nad tym co będzie wykonywane i w jaki sposób.
Utrzymuje zgodność z innymi swoimi bibliotekami pod kątem standaryzacji nazewnictwa, komentowania oraz kompilacji selektywnej (warunkowej) wybranych bloków funkcyjnych.
Z tychże powodów uważam, że ma to sens i warto robić to po swojemu, nawet jeżeli początkowo biblioteki takie nie będą tak dobrze zoptymalizowane jak te wykonane przez kogoś innego.
Nie jestem za stosowaniem gotowców na dłuższą metę, choć zawsze stanowią one dobry punkt odniesienia dlatego też dziękuję za podane tutaj przykłady
Może jeszcze coś napiszę, co powinno ułatwić analizę problemu:
Elementy funkcji odpowiedzialne za odczyt pojedynczego adresu urządzenia slave działają dobrze, więc do momentu przepisania zawartości do tablicy ONE_WIRE_rom_tmp wszystko jest ok (w tym przykładzie działa to tylko dla dwóch urządzeń, ale to tymczasowo dla uproszczenia analizy). Po przepisaniu danych do wcześniej wspomnianej tablicy następuje sprawdzenie czy jakikolwiek bajt tablicy "tymczasowej" różni się od tego który został wcześniej zapisany "na stałe", jeżeli ten warunek jest spełniony to zapisuje elementy pod dalsze komórki pamięci. Ten sam blok warunkowy który odpowiada za zapis bajtów adresu do zewnętrznej tablicy, opuszcza pętlę jeżeli ówcześnie zapisany adres pokrywa się z dopiero co odczytanym adresem - jeżeli są takie same to opuszcza funkcję. Albo gdzieś w tym miejscu jest błąd związany z moim rozumowaniem, albo też ma to związek z błędnym odczytem/zapisem komórek w tablicy.
------------------------ [ Dodano po: 11 minutach ]Teraz sobie uświadomiłem, że porównuje nowo odczytany adres jedynie z poprzednim, a iteracje 9,12 czy 146 znacznie przekraczają moją tablicę, która uwzględnia 64 bajty - czyli miejsce dla 8 adresów 64 bitowych. Problemem chyba jest to, że muszę sprawdzać nowy adres ze wszystkimi starymi adresami, bo z zasady dwa kolejne zawsze powinny się różnić. Sprawdzę to