-
Data: 2019-02-10 23:41:57
Temat: Re: Zagwozdka w C Keil.
Od: Mateusz Viste <m...@n...pamietam> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]On Sun, 10 Feb 2019 22:32:33 +0100, Irek.N. wrote:
> Pytanie do znawców C. Czy zapis taki:
>
> volatile unsigned int DEL_STEP;
>
> void DELAY(unsigned int Czas) {
> DEL_STEP = Czas;
> while(DEL_STEP);
> }
>
> może różnić się wykonaniem od zapisu takiego?
>
> void DELAY(unsigned int Czas) {
> unsigned char DEL_MSB,DEL_LSB;
> DEL_STEP = Czas;
> while(1) {
> DEL_LSB = DEL_STEP/0x100;
> DEL_MSB = DEL_STEP^0x100;
> if (DEL_MSB == 0 & DEL_LSB == 0) return;
> }
> }
O "Keil" nigdy nie słyszałem, ale C obiło mi się już o uszy, wrzucę moje
3 grosze, być może jakkolwiek pomocne :)
Pierwszy wariant wydaje się bardzo sensowny. Kompilator zepsuty? A może
typ int nie jest atomiczny, i kompilator sprawdza najpierw jednego nibbla,
i dopiero jeśli ten okaże się zerowy to zajmie się drugim?
Próbowałeś może zastąpić jakimś sig_atomic_t?
Ten drugi przykład to w ogóle lichy jest, bo pętla ma teoretyczne prawo
zostać przerwana za każdym razem kiedy wartość DEL_STEP zostaje zmieniona
z wartości o zerowym MSB do wartości o zerowym LSB (np. 0x0034 -> 0x1200)
- a to dlatego, że los może złośliwie zechcieć wykonać twoje przerwanie
akurat pomiędzy liniami:
DEL_LSB = DEL_STEP/0x100;
DEL_MSB = DEL_STEP^0x100;
Nazewnictwo jest tu nieco pomieszane, bo DEL_LSB będzie faktycznie
zawierał 8 "ważniejszych" bitów, tj. MSB. A DEL_MSB będzie zawierał 8
"mniej ważnych" bitów - z resztą celowość operacji XOR całkiem mi tu
umyka, tym bardziej że operuje na bitach których DEL_MSB i tak nie
zobaczy (bo jest charem). Może zamiast '^' (xor) miałeś na myśli
'%' (mod)? Też byłoby niepotrzebnie, ale byłbym wtedy w stanie zrozumieć
co autor miał na myśli.
Swoją drogą, trochę dziwnie patrzeć na dzielenie w takiej operacji. Jeśli
kompilator mądry, to zoptymalizuje twoje "/ 0x100" do ">> 8", ale jeśli
na to nie wpadnie... to będzie mało ekologicznie.
Mateusz
Następne wpisy z tego wątku
- 10.02.19 23:49 J.F.
- 10.02.19 23:55 J.F.
- 10.02.19 23:59 Grzegorz Niemirowski
- 11.02.19 00:10 Grzegorz Niemirowski
- 11.02.19 00:11 Irek.N.
- 11.02.19 00:14 Irek.N.
- 11.02.19 00:28 Irek.N.
- 11.02.19 09:27 Mateusz Viste
- 11.02.19 09:32 Mateusz Viste
- 11.02.19 09:43 Grzegorz Niemirowski
- 11.02.19 10:02 Grzegorz Niemirowski
- 11.02.19 11:10 Mateusz Viste
- 11.02.19 11:54 Queequeg
- 11.02.19 11:59 Queequeg
- 11.02.19 12:17 J.F.
Najnowsze wątki z tej grupy
- pradnica krokowa
- Nieustający podziw...
- Coś dusi.
- akumulator napięcie 12.0v
- Podłączenie DMA 8257 do 8085
- pozew za naprawę sprzętu na youtube
- gasik
- Zbieranie danych przez www
- reverse engineering i dodawanie elementów do istniejących zamkniętych produktów- legalne?
- Problem z odczytem karty CF
- 74F vs 74HCT
- Newag ciąg dalszy
- Digikey, SN74CBT3253CD, FST3253, ktoś ma?
- Szukam: czujnik ruchu z możliwością zaączenia na stałe
- kabelek - kynar ?
Najnowsze wątki
- 2025-01-19 Nowa ładowarka Moya a Twizy -)
- 2025-01-18 Power BANK z ładowaniem przelotowym robi PRZERWY
- 2025-01-18 Pomoc dla Filipa ;)
- 2025-01-18 znowu kradno i sie nie dzielo
- 2025-01-18 Zieloni oszuchiści
- 2025-01-18 Zielonka => Specjalista ds. public relations <=
- 2025-01-18 Warszawa => Frontend Developer (JS, React) <=
- 2025-01-18 Warszawa => Software .Net Developer <=
- 2025-01-18 Warszawa => Developer .NET (mid) <=
- 2025-01-18 Katowice => Administrator IT - Systemy Operacyjne i Wirtualizacja <=
- 2025-01-17 Zniknął list gończy za "Frogiem". Frog się nam odnalazł?
- 2025-01-17 Kto wytłumaczy "głupiemu" prezydentowi Dudzie wielką moc prawną "dekretu premiera" TUSKA? [(C)Korneluk (2025)]
- 2025-01-17 Warszawa => Inżynier oprogramowania .Net <=
- 2025-01-17 Natalia z Andrychowa
- 2025-01-17 Gliwice => Business Development Manager - Dział Sieci i Bezpieczeńst