eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaZagwozdka w C Keil.Zagwozdka w C Keil.
  • Data: 2019-02-10 22:32:33
    Temat: Zagwozdka w C Keil.
    Od: "Irek.N." <t...@j...taki.jest.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    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;
    }
    }

    Znalazłem błąd w starym kodzie. Ze zdziwieniem odkryłem, że w komendzie
    while(DEL_STEP); kompilator sprawdza tylko LSB zmiennej. Oczywiście
    generuje to kłopoty, gdy DEL_STEP przekracza wartość 255.
    Przepisanie jak niżej rozwiązuje problem, ale nie kumam powodu jego
    wystąpienia. Sprawdziłem optymalizacje, to nie to, po prostu kod jest
    generowany źle. Ktoś ma pomysł dlaczego kompilator uprościł, a może ja
    czegoś nie zauważam?

    Miłego.
    Irek.N.
    ps. DEL_STEP jest modyfikowana w przerwaniu, inaczej procedura nie miała
    by sensu.


Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: