Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

ARM (Thumb-2) i polecenie IT

Myrek1 29 Jan 2008 22:32 3660 13
Computer Controls
  • #1
    Myrek1
    Level 23  
    Czy może ktoś mi wytłumaczyć jak działa instrukcja warunkowa IT w asm dla ARMów? Siedzę nad tym i nie mogę do niczego dojść. Z dokumentacji też nic nie rozumiem. Kompilator to uVision.
    Mam np coś takiego:

    Code:
    ITTE NE
    
       ANDNE r0,r0,r1
       ADDSNE r2,r2,#1
       MOVEQ r2,r3
       ITT AL
       ADDAL r0,r0,r1
       SUBAL r2,r2,#1
       ADD r0,r0,r1
       IT NE
       ANDNE r0,r0,r1


    Wiem co oznaczają znaczniki NE czy AL, ale nie rozumiem ich zastosowania i warunków wykonania poszczególnych instrukcji.
    Mam jeszcze coś takiego:

    Code:
    ITE PL
    
       movpl r4,r0
       movmi r4,r1

    Tu jest połączenie PL z MI, tego to już w ogóle nie rozumiem.
  • Computer Controls
  • #2
    michalko12
    MCUs specialist
    Może trochę przeterminowane, ale może inni skorzystają.



    ITxyz <cond>

    Instrukcja tworzy blok warunkowy składający sie z maksymalnie 4 instrukcji występujących po tej instrukcji. To z ilu instrukcji składa sie blok warunkowy decyduje składnia instrukcji IT:

    IT <cond> - tylko jedna instrukcja
    ITx <cond> - dwie instrukcje
    ITxy <cond> - trzy instrukcje
    ITxyz <cond> - cztery instrukcje

    'x' , 'y' , 'z' to informacja dla procesora z ilu instrukcji składa sie blok oraz jak ma sie zachować. Za 'x', 'y' i 'z' wstawia się 'T' lub 'E'

    'x' - zachowanie w przypadku drugiej instrukcji w bloku
    'y' - trzeciej
    'z' - czwartej

    ITT
    ITTE
    ITETE
    ITTTT
    ITEEE itd.

    Kluczowym elementem tej instrukcji jest pole <cond>. W zależności od tego czy warunek opisany polem <cond> jest spełniony lub nie poszczególne instrukcje w bloku zostaną wykonane. Jeśli warunek jest spełniony zostaną wykonane tylko te instrukcje które mają w mnemoniku przypisaną literę 'T' oraz pierwsza instrukcja w bloku, jeśli warunek nie jest spełniony zostaną wykonane tylko te instrukcje które mają przypisana literę 'E' (nie ma możliwości ustawienia 'E' dla pierwszej instrukcji).

    Przykład:

    Code:
    ITETE EQ
    
    AND r0,r0,r1 
    ADDS r2,r2,#1
    MOV r2,r3
    ADDS r2,r2,#1


    Jeśli warunek EQ jest spełniony (czyli znacznik Z==1) zostaną poddane wykonaniu tylko pierwsza i trzecia instrukcja.
    Jeśli warunek EQ nie jest spełniony (czyli znacznik Z==0) zostaną poddane wykonaniu tylko druga i czwarta instrukcja.

    Na instrukcje umieszczone w bloku IT sa nałożone pewne restrykcje. Jeśli instrukcja ma jakieś ograniczenia co do stosowanie w bloku IT to jest to umieszczone w jej opisie.
    Quote:
    Mam jeszcze coś takiego:

    Code:
    Kod:
    
    ITE PL
       movpl r4,r0
       movmi r4,r1


    Tu jest połączenie PL z MI, tego to już w ogóle nie rozumiem.


    Jeśli warunek PL jest spełniony zostanie wykonana pierwsza instrukcja, a jeśli niespełniony to druga.
  • Computer Controls
  • #3
    Freddie Chopin
    MCUs specialist
    no to jak juz wskrzeszamy, to ja polecam ze swojej strony ta dokumentacje od ARMa:

    http://www.arm.com/miscPDFs/14128.pdf

    jest to ARM Architecure Reference Manual (nie mylic z Technical ....) - 1138 ( [; ) stron opisu zachowania jadra i spore opisy instrukcji.

    0x41 0x56 0x45!!
  • #4
    slomo
    Level 17  
    Podany przez ciebie przykład pierwszy jest moim zdaniem nie prawidłowy.Po instrukcji IT pierwsza linia powinna miec taki sam warunek jak w instrukcji IT na co wskazuje litera T w IT natomiast w twoim przykładzie warunkiem jest EQ(Equal) a w pierwszej instrukcji mamy warunek przeciwny czyli NE(Not equal).

    pz
  • #5
    michalko12
    MCUs specialist
    slomo wrote:
    Podany przez ciebie przykład pierwszy jest moim zdaniem nie prawidłowy.Po instrukcji IT pierwsza linia powinna miec taki sam warunek jak w instrukcji IT na co wskazuje litera T w IT natomiast w twoim przykładzie warunkiem jest EQ(Equal) a w pierwszej instrukcji mamy warunek przeciwny czyli NE(Not equal).

    pz


    Obsuwa poprzez kopiuj/wklej bez wnikania w działanie :wink:
    Dobrze że ktoś czuwa. (Poprawiam)

    Dodano po 6 [minuty]:

    Freddie Chopin wrote:
    no to jak juz wskrzeszamy, to ja polecam ze swojej strony ta dokumentacje od ARMa:

    http://www.arm.com/miscPDFs/14128.pdf

    jest to ARM Architecure Reference Manual (nie mylic z Technical ....) - 1138 ( [; ) stron opisu zachowania jadra i spore opisy instrukcji.

    0x41 0x56 0x45!!


    A ja za strony ARMa polecam plik DDI0405B_arm_v7m_architecture_app_level_reference_manual.pdf
    Żeby go pobrać trzeba sie zarejestrować.
  • #7
    michalko12
    MCUs specialist
    Freddie Chopin wrote:
    a co w nim ciekawego mozna znalezc?

    0x41 0x56 0x45!!
    Quote:
    This manual documents an abridged version of the Microcontroller profile associated with version 7 of the
    ARM Architecture (ARMv7-M). For short-form definitions of all the ARMv7 profiles see page A1-1.
    The manual consists of three parts:
    Part A
    The application level programming model and memory model information along with the
    instruction set as visible to the application programmer.
    This is the information required to program applications or to develop the toolchain
    components (compiler, linker, assembler and disassembler) excluding the debugger. For
    ARMv7-M, this is almost entirely a subset of material common to the other two profiles.
    Instruction set details that differ between profiles are clearly stated.
    Note
    All ARMv7 profiles support a common procedure calling standard, the ARM Architecture
    Procedure Calling Standard (AAPCS).
    Part B
    A summary of the system level programming model including the system level support
    instructions required for system correctness. Part B is designed to be read in conjunction
    with a device Technical Reference Manual (TRM).
    The system level supports the ARMv7-M exception model. It also provides features for
    configuration and control of processor resources and management of memory access rights.
    Related details from a TRM are required to port an operating system (OS) and/or develop
    system support software.
    This part is profile specific. ARMv7-M introduces a new programmers’ model and as such
    has some fundamental differences at the system level from the other profiles. As ARMv7-M
    is a memory-mapped architecture, the system memory map is documented here.
    Part C
    A summary of the ARMv7-M debug features. Part C is designed to be read in conjunction
    with the debug details in a device Technical Reference Manual (TRM), and ARMv7-M
    debug tool user manuals.
    ARMv7-M supports the following types of debug:
    • halting debug and the related debug state
    • exception-based monitor debug
    • non-invasive support for event generation and signalling of the events to an external
    agent.
    This part is profile specific and includes several debug features unique within the ARMv7
    architecture to the Microcontroller profile


    Ten dokument plus Technical Reference Manual to jest wszystko co potrzeba żeby poznać Cotrexy
  • #9
    slomo
    Level 17  
    W podanym przez ciebie dokumencie nie sa zawarte informacje na temat architektury arm7v tylko dla poprzednich do v6.To samo sie tyczy listy instrukcji.Wspomniany w tym watku THUMB-2 zostal przedstawiony dopiero w architekturze v7 i informacje na ten temat i innych nowosci mozna znalezc w DDI0405B_arm_v7m_architecture_app_level_reference_manual.pdf

    pz
  • #10
    michalko12
    MCUs specialist
    Freddie Chopin wrote:
    jesli dobrze rozumiem, to jest on w pewnym sensie skrocona wersja tego Arch. Ref. Man. dla wszystkich ARMow?

    0x41 0x56 0x45!!


    Źle rozumiesz.
    To jest ponad 500 stronicowe rozszerzenie opisujące architekturę ARMv7-M.
    To co ty podałes tyczy sie architektur ARMv4, ARMv4T, ARMv5T, (ARMv5TExP), ARMv5TE, ARMv5TEJ, ARMv6.
  • #11
    Freddie Chopin
    MCUs specialist
    ok kumam [; dopiero ostatnio wpadlem na ten wielki dokument i nawet nie staralem sie ogarnac co w nim ogolnie jest, tylko szukalem tego co mi akurat bylo potrzebne chwilowo [;

    swoja droga Cortexy maja naprawde kosmiczna moc, ale jeszcze maja bardzo male wsparcie niestety no i zdecydowanie trudniej je kupic niz 'zwykle' ARMy. szkoda, ale moze niedlugo sie to zmieni.

    0x41 0x56 0x45!!
  • #12
    michalko12
    MCUs specialist
    Freddie Chopin wrote:
    ok kumam [; dopiero ostatnio wpadlem na ten wielki dokument i nawet nie staralem sie ogarnac co w nim ogolnie jest, tylko szukalem tego co mi akurat bylo potrzebne chwilowo [;

    swoja droga Cortexy maja naprawde kosmiczna moc, ale jeszcze maja bardzo male wsparcie niestety no i zdecydowanie trudniej je kupic niz 'zwykle' ARMy. szkoda, ale moze niedlugo sie to zmieni.


    Znowu sie mylisz. Wsparcie jest juz pełne, jest juz dwóch producentów Cortexów M3 - Luminary Micro i ST, niedługo pojawia sie też NXP. TI też wzięło sie za Cortexy ale mocniejszą wersję. Praktycznie wszystkie środowiska obsługuja już Thumb2, nawet niedawno pojawiła sie testowa wersja WINARMa obsługująca Thumb2. Cortexy STM32 możesz dostac w Kamami.pl a Luminary Micro w WG i Marthelu. Nie wspomne juz o bardzo tanich zestawach do nauki tych procesorów.
  • #13
    Freddie Chopin
    MCUs specialist
    wsparcie bedzie pelne, jak bedzie to w pelni obslugiwane przez calego darmowego toolchaina, a nie tylko kompilator, potrzeba jeszcze debuggerow, a do nich wsparcia ze strony OpenOCD i tak dalej. pozatym przez wsparcie rozumiem tez ilosc materialow dostepnych na dany temat w necie.

    0x41 0x56 0x45!!
  • #14
    michalko12
    MCUs specialist
    Freddie Chopin wrote:
    wsparcie bedzie pelne, jak bedzie to w pelni obslugiwane przez calego darmowego toolchaina, a nie tylko kompilator, potrzeba jeszcze debuggerow, a do nich wsparcia ze strony OpenOCD i tak dalej. pozatym przez wsparcie rozumiem tez ilosc materialow dostepnych na dany temat w necie.

    0x41 0x56 0x45!!

    OpenOCD już to obsługuje pod Eclipsem, dokumentacji jest tyle że ciężko przyczepić się. Wchodzisz na strone Luminary Micro, rejestrujesz się i ściągasz wszystkie informacje, dodatkowo DriverLib i tam masz już wszystko.