Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[MLAB][PIC18F2550][HI-TECH] - Pytanie dotyczące kompilatora.

maniek1818 26 Paź 2013 17:28 1320 3
  • #1 26 Paź 2013 17:28
    maniek1818
    Poziom 22  

    Witam.
    Od kilku dni zawzięcie piszę programy w C dla mikrokontrolera PIC18F2550. Jako pierwszy program napisałem tradycyjnie obsługę diody LED. Następnie przyjrzałem się pliku wynikowemu tworzonego przez kompilator HI-TECH w darmowej wersji Lite. Mam pytanie co robi następujący zestaw instrukcji:

    Kod: asm
    Zaloguj się, aby zobaczyć kod


    w programie:

    Kod: asm
    Zaloguj się, aby zobaczyć kod


    Program źródłowy w C:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 3
  • #2 26 Paź 2013 18:37
    mickpr
    Poziom 39  

    http://technology.niagarac.on.ca/staff/mboldin/18F_Instruction_Set/MOVFF.html
    Ogólnie mówiąc słowo kluczowe 'interrupt'

    Kod: c
    Zaloguj się, aby zobaczyć kod

    powoduje wygenerowanie nagłówka zapisującego w określonych miejscach pamięci stan rejestrów używanych przez ten dialekt języka "C" do "swoich celów". Powrót z przerwania spowoduje odtworzenie tych rejestrów i umożliwi bezproblemową współpracę z resztą kodu. Gdybyś pisał CAŁY program w assemblerze - mógłbyś sam dbać o to jakie rejestry zapisujesz, a jakich nie zapisujesz. Wtedy ten "prolog" byłby zbędny, ale musiał byś sam pamiętać czego w przerwaniu używasz, a czego nie.

    0
  • #3 28 Paź 2013 09:17
    maniek1818
    Poziom 22  

    Czyli wystarczyłoby zapamiętane zawartości rejestru status oraz W? Jednak w tym przypadku tego nie widzę.

    0
  • #4 28 Paź 2013 09:27
    mickpr
    Poziom 39  

    maniek1818 napisał:
    Czyli wystarczyłoby zapamiętane zawartości rejestru status oraz W? Jednak w tym przypadku tego nie widzę.
    A co ze stosem i używanymi rejestrami?
    Domyślnie (tak jak pisałem) kompilator C dba o zachowanie rejestrów wykorzystywanych przez niego samego. Jest to nieoptymalne, ale uniwersalne.
    Gdy (przykładowo) kod przerwania ma zmienić 1 bit zapamiętywanie wszystkich rejestrów trochę mija się z celem. Można oczywiście "bawić się w assembler", zmienić kompilator lub wziąść szybszy MCU.
    Wybór stoi po stronie programisty.

    0