Przeczytaj mojego posta wyżej. Jeśli chcesz sobie brnąć dalej w pola bitowe, to proszę bardzo. Traktuj moje posty jako ostrzeżenie dla szerszej publiczności, która na podstawie dwóch spojrzeń będzie sobie sama mogła zdecydować czy woli kod który używa jednego bajtu mniej i zajmuje więcej flash (a do tego najeżony jest problemami data race), czy może zrobi to normalnie. W tym konkretnym przypadku zysk z użycia pól bitowych jest żaden, ponieważ prawdziwa różnica uwidoczniłaby się dopiero po dodaniu odpowiednich sekcji krytycznych (tak żeby kod miał szansę być poprawny), choć nawet bez nich kod jest większy.
Dodano po 3 [minuty]:
Piotrus_999 napisał: Przy okazji pokazuje błąd logiki autora, który sądzi ze użycie modulo sprowadzi sprawę do jakiejś atomowej operacji.
Chyba niestety Ty nie rozumiesz... Przy dwóch osobnych zestawach zmiennych te operacje nie muszą być atomowe. Problem R-M-W (w takim rozumieniu o jakim tu piszemy (*)) nie występuje. Tak więc Ty również popełniasz błąd logiczny. Jeśli taki kod z polami bitowymi napisałeś i Ci działał, to tylko pogratulować szczęścia - w końcu w totolotka też można wygrać, no nie? No chyba że całkiem przypadkiem obydwa pola bitowe miały 8 bitów (; W każdym innym przypadku w końcu trafisz na błąd tego kodu i tyle.
Zresztą w ogóle nie wiem po co się ze mną kłócisz i czemu od razu tak konfrontacyjnie. Spokojnie i (chyba) dogłębnie napisałem Ci w czym problem, a Ty od razu ostro że czegoś nie rozumiem... Może nam wytłumacz w takim razie, bo nie zwykłem brać niczego na wiarę - jeśli udowodnisz nam poprawność swojego kodu, to będzie super sytuacja, bo każdy się czegoś nauczy.
(*) - dostęp do zmiennych dalej musi być atomowy w znaczeniu zapisu/odczytu, tzn. że np. na 8-bitowym AVRze zmienna musi być odczytywalna/zapisywalna jednym rozkazem, niemniej jednak ilość czasu jaka upłynie od czasu odczytu do zapisu zmodyfikowanej wartości nie ma znaczenia.
Dodano po 5 [minuty]:
Piotrus_999 napisał: I tak przy okazji autor zwraca jako artosc 32 bitowa zamiast 16 co świadczy o tym ze raczej myślał np o ARMach. Tam różnica zanika
Różnica rozmiaru? Co ciekawe jest jeszcze większa (11 vs 14 dla push i 16 vs 18 dla pop, funkcje po drobnych poprawkach). Problem z dostępem do pól bitowych zostaje dokładnie taki sam jak był - dalej jest to data race.