logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[atmega8][c] optymalizacja -Os psuje kod?

modymat 24 Gru 2011 12:51 974 3
REKLAMA
  • #1 10298850
    modymat
    Poziom 13  
    Witajcie,
    mam następujący problem.
    Napisałem dość rozległy program i aby zmieścił mi się na flash atmegi muszę korzystać z optymalizacji. Jednak przy optymalizacji psuje mi się obsługa klawiatury matrycowej.

    Przedstawię uproszczony kod i samą obsługę klawiatury, żeby nie zaciemniać sytuacji:
    Oto kod obsługi klawiatury, wciśnięcie klawisza powoduje wyświetlenie na ekran informacji o tym, który klawisz został wciśnięty:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Kiedy nie dodaję przy kompilacji -Os to problemu nie ma, każdy z przycisków jest poprawnie rozpoznawany i wyprowadza na ekran poprawną wartość.

    Jeśli jednak dodaję podczas kompilacji -Os to wiersz pierwszy nie działa poprawnie. Mianowicie w tym wierszu pierwsze dwa przyciski odpowiadają kolejno drugiemu i trzeciemu, natomiast przyciski trzeci i czwarty nie działają w ogóle.

    Jak sobie poradzić z taką sytuacją, aby cała klawiatura działała jak należy?
  • REKLAMA
  • Pomocny post
    #2 10298886
    Brutus_gsm
    Poziom 25  
    Po ustawieniu portu w rejestrze PORTx musisz odczekać przynajmniej jeden takt zegara przed sprawdzaniem rejestru PINx. Możesz dodać intrukcję assemblera NOP.
  • REKLAMA
  • Pomocny post
    #3 10298889
    tmf
    VIP Zasłużony dla elektroda
    Pomiędzy zmianą stanu portu B, a pierwszym odczytem portu PIN wstaw koniecznie nop - problemem nie jest twój program, lecz synchronizator portów w procesorze, który wprowadza pewne opóźnienie. Przejrzyj notę katalogową dokładnie.
  • #4 10298949
    modymat
    Poziom 13  
    Dzięki wielkie za pomoc, dostawienie asm("nop") rozwiązało problem. Pozdrawiam
REKLAMA