Využítí ARM GCC vývojového retezce

| Kategorie: Diplomové, bakalářské práce  | Tento dokument chci!

Předmětem této práce je studium stávajícího vývojového řetězce pro mikroprocesor LPC23xx v předmětu MPOA. Hlavním cílem je zkoumání možností realizace nového vývojového řetězce, postaveného na GCC. Výstupy této práce jsou ukázkové aplikace s mikroprocesorem LPC2378 a GCC. Součástí vysledků jsou i návody pro studenty, jak tyto ukázkové aplikace implementovat. Ukázky zahrnují základní aplikace, RTOS aEthernet.

Vydal: FEKT VUT Brno Autor: Jan Ledvina

Strana 26 z 93

Vámi hledaný text obsahuje tato stránku dokumentu který není autorem určen k veřejnému šíření.

Jak získat tento dokument?






Poznámky redaktora
důsledku tedy přesuny paměti rozsahu 0xFFFF Fxxx nejsou přesuny paměti flash. Naopak rozsah 0xFFFF F000 až 0xFFFF FFFF není standardní paměť ale jedná speciální registry, které jsou přístupny společné paměťové sběrnici. Jako teoretický koncept chyby bylo předpokládáno, že . Poznámka nutno uvědomit, paměťový rozsah 0x0000 0000 až 0x0007 FFFF technologicky pamět flash. Zde však pro další pochopení nutné vědět alespoň následující: - Pokud vytvořím funkci jazyce její jméno principiálně stejné jako její adresa (pomineme-li optimalizace, jako např. 0x0000 0020 0x0000 0120 0xFFFF FF00 Tento výsledek (0xFFFF FF00) pak použije jako ukazatel paměti zkopíruje data této adresy (0xFFFF FF00) PC. Chyba tak vzniká ISR (Interupt service routine), tedy části kódu pro obsluhu přerušení. Jakmile jádro obdrží signál IRQ, dojde skoku adresu, která je interním vektoru přerušení jádra pevně nadefinovaná jako 0x0000 0018. Z tohoto důvodu dojde vykonání instrukce další dva takty.: in-line) - Pokud chci zjistit adresu některé funkce, lze použít operátory jazyka (&, *) long x; x (long)&main; //ulozi adresu funkce main promene x - Pokud chci funkci zavolat, mohu použít klasické volání nebo zjistit adresu funkce a předat MCU Poznámka ISR nepoužívat proměnné static!!! Poznámka ISR musí být překládáno pomocí instrukční sady ARM, Thumb !!! Pro ověření správnosti funkce, která zavádí přerušení bylo třeba ověřit, zda dochází k správnému plnění registrů VIC. Poznámka Většina programátorů, kteří pracují zejména úrovňově vyššími jazyky, nemá přesnou představu, jakým způsobem probíhá volání funkcí předávání nebo vrácení hodnot. Vykonáním této instrukce tedy MCU skočí adresu, která uložena registru VectAddrX (2) příslušného přerušení. Proto třeba použít zde popsané řešení. Postupně bylo zjištěno, všechny registry jsou naplněny správně.19 přišlo „přepne“ přepínač (multiplexor) (1) příslušné polohy nahraje údaj příslušného registru (2) registru jádra (4). Naopak přesuny rozsahu 0x0000 0000 až 0x0007 FFFF byly přesuny paměti flash. tuto chvíli však nebude obsah 0x0000 0018, ale 0x0000 0020 !!! Vykonání instrukce doslova relizuje toto: vezme aktuální hodnotu (Program Counter) odečte konstantu 0x0120 režimu modulo 32bit. Tento registr jádra leží pevně známé adrese 0xFFFF FF00. této adrese uložena instrukce: 0x0000 0018 LDR PC, [PC, #-0x0120] ;IRQ request Zde však podstatné uvědomit si, jádro ARM7 používá stupňový pipelining. Jak již bylo zmíněno, této adrese již leží data VIC, která mohou ukazovat kamkoli paměťovém rozsahu MCU