Použití vývojového prostředí HEW 4.04 a překladače GCC pro vývojový modul Renesas EVB H8S/2633F

 


1.    Úvod

Tento návod popisuje některé důležité postupy a nastavení, které je nutné respektovat při použití vývojového prostředí HEW 4.04 a překladačů GNU k vývoji aplikací pro vývojový modul Renesas EVB H8S/2633F. Předpokládá se všeobecná orientace v prostředí HEW 4.04, znalost architektury vývojového modulu EVB H8S/2633F, procesoru H8S/2633F a znalost použití ladicího nástroje HDI, který je součástí instalace staršího vývojového prostředí HEW 1.

Některé informace, které se týkají instalace vývojového prostředí a překladačů a organizace projektů v HEW lze použít návody pro předmět POT. Na rozdíl od uvedených návodů budeme však dále předpokládat vytváření aplikací pro skutečný procesor, nikoliv pro simulátor.

Pro řešení školních úloh na EVB H8S/2633F je k dispozici též starší vývojové prostředí HEW 1 a překladačem ICCH8 firmy IAR. Protože se jedná o školní verzi překladače, je maximální velikost kódu vygenerovaného překladačem omezena na cca. 4 kB, což vyhovuje pouze pro velmi jednoduché úlohy.

Důvodem pro použití překladače GCC je především jeho dostupnost, spolehlivost a možnost generování výstupního kódu s neomezenou velikostí. Jistou nevýhodou je skutečnost, že firma Kpit v nových verzích nepodporuje výstupní formát COFF, který bylo možné použít ve spolupráci s HDI k ladění programu v symbolické podobě.


2.    Vytvoření projektu

Před vytvořením prvního projektu je nutné založit pracovní prostor (tzv. workspace) příkazem File - New Workspace. V již založeném pracovním prostoru lze další projekty vytvářet příkazem Project - Insert Project. Nastavení některých parametrů nově vytvářeného projektu jsou na následujících obrázcích:

 

Obr. 1:    Založení nového projektu

 

Z nabídek v panelu Project Types vybereme C Application.

 

Obr. 2:    Volba typu procesoru

 

V dalších panelech zvolíme typ procesorového jádra 2600 a konkrétní typ procesoru 2633F.

 

Obr. 3:    Nastavení módu procesoru

 

Režim činnosti procesoru musí být Advanced.

 

Obr. 4:    Volba cílového zařízení (Target System)

 

Pro ladění programů na skutečném procesoru zvolíme cílové zařízení (target) H8S/2600 HMon a dokončíme zakládání projektu. V projektu vytvořeném popsaným postupem je automaticky zahrnuto několik zdrojových souborů:

 

Obr. 5:    Soubory automaticky vložené do projektu

 

Jejich význam je následující:


3.    Konfigurace překladačů a linkeru

3.1.    Konfigurace překladačů

Konfiguraci překladačů C a assembleru a konfiguraci linkeru lze nastavit v oknech otevřených příkazem Build - Compiler... , Build - Assembler... nebo Build - Linker...  . Implicitně nastavená konfigurace překladače vyhovuje pro překlad souborů, které jsou uloženy v adresáři projektu. Při použití složitější struktury adresářů je nutné příslušně doplnit cesty k souborům .h v záložce Source okna, které se otevře příkazem Build - Compiler...  . V záložce List lze dále vybrat volbu pro generování protokolu o překladu (Generate list file). Pro řešení nejasností, týkajících se způsobu překladu, lze povolit vkládání přeloženého programu do listingového souboru (Include assembly) a současně zakázat listing ladicích informací (Omit debugging directives). Listingové soubory jednotlivých modulů jsou po překladu uloženy v adresáři Debug daného projektu.

3.2.    Konfigurace linkeru

V konfiguračním okně linkeru je vhodné v záložce Output překontrolovat, je-li nastaven Output format na Both (Default and S-Record).

Obr. 6:    Kontrola výstupního formátu

 

Dále je nutné nastavit adresy pro umístění jednotlivých sekcí v adresním prostoru. V záložce Sections je zobrazeno aktuální nastavení pro jednotlivé sekce. Nastavení lze pomocí tlačítka Modify upravit tak, aby vyhovovalo pro danou konfiguraci pamětí, připojených k mikrokontroléru.

Obr. 7:    Nastavení adres sekcí

 

Pro umístění jednotlivých sekcí je nutné respektovat velikost a umístění vnější a vnitřní paměti RAM a další omezující skutečnosti (umístění přerušovacích vektorů atd.). Velikost, poloha v adresním prostoru a využití jednotlivých typů pamětí je znázorněno na následujícím obrázku.

Obr. 8:    Mapa adresního prostoru EVB H8S/2633F

 

Pro vývojový modul EVB H8S/2633F je možné použít některé z následujících umístění jednotlivých sekcí:

a)    Sekce  .vects

Sekce .vects obsahuje přerušovací vektory pro obsluhu přerušení. Normálně by sekce .vects měla ležet na adrese 0x00000000. Při ladění aplikací prostřednictvím debuggeru HDI je v paměti Flash mikrokontroléru trvale nahrán monitor MON6, který přesměrovává přerušovací vektory na adresu 0x00200000+adresa_vektoru (viz též popis starší verze překladače gcc a popis obsluhy přerušení v EVB H8S/2633F). Sekci .vects je proto nutné uložit vždy na adresu 0x00200000.

b)    Sekce  .text, .data, .stack

Tyto sekce mohou být podle potřeby uloženy v externí nebo v interní paměti SRAM. Přitom je nutné uvážit rychlost přístupu do jednotlivých pamětí (čtení/zápis z interní paměti se provede v 1 taktu hodin, zatímco z externí paměti se stejná operace provede ve 3 taktech hodin) a dostupnou kapacitu pamětí (externí SRAM cca. 254 kB, interní SRAM cca. 16 kB).

Některá vhodná nastavení polohy jednotlivých sekcí jsou v následující tabulce:

Tab.1:    Některá z možných nastavení adres sekcí

Popis nastavení .text .data .stack*)
 Kód programu i data v externí SRAM.
 Kód max. 127 kB, data + stack max. 127 kB
00200400 00220000 0023FB00
 Kód v externí SRAM, data a stack v interní SRAM.
 Kód max. 254 kB, data + stack max. 16 kB
00200400 FFFFB000 FFFFEFF0
 Kód i data v interní SRAM.
 Kód max. 8 kB, data + stack max. 8 kB.
FFFFB000 FFFFD000 FFFFEFF0

*)   Stack se u H8S zvětšuje "shora dolu", tj. směrem k nižším adresám.

 

3.3.    Výstupní soubory

Při popsaném nastavení produkuje linker výstupní binární soubor ve formátu Motorola S-record (soubor s příponou .s) a současně též ve formátu ELF (soubor s příponou .x). Oba výstupní soubory jsou v adresáři Debug daného projektu.

Pro zavedení do vývojového zařízení programem HDI lze použít libovolný z obou výstupních souborů. Pro čtení formátu ELF však musí být HDI doplněn potřebným programovým modulem (dostupným na stránkách firmy Kpit).


4.    Obsluha přerušení

a)    Přerušení při použití monitoru MON6

Procesor H8S používá při obsluze přerušení přerušovací vektory, které jsou uložené na adresách 0x00000000 - 0x000003FF. Protože tato oblast je pokryta interní pamětí Flash, ve které je trvale uložen ladicí monitor MON6, není možné přerušovací vektory měnit podle potřeby jednotlivých aplikací. Přerušovací vektory jsou proto pevně naprogramovány tak, že směřují na adresu 0x00200000+adresa_vektoru. Například vektor pro obsluhu přerušení INT0, který leží na adrese 0x00000040 je nastaven na adresu 0x00200040 atd. Prakticky to znamená, že při přerušení INT0 procesor spustí obslužný program na adrese 0x00200040. Protože jednotlivé přerušovací vektory mají délku 4 byty, jsou se stejným odstupem uspořádány i vstupní body jednotlivých obslužných programů. Má-li tedy IRQ0 vstupní bod na adrese 0x00200040, je další bezprostředně následující vstupní bod na adrese 0x00200044, další na 0x00200048 atd. Proto je vhodné na adresy jednotlivých vstupních bodů umístit skokové instrukce (dlouhé maximálně 4 byty), které přenesou výpočet do obslužné procedury přerušení umístěné na libovolném místě v adresním prostoru (viz obrázek).

Obr. 9:    Přerušovací vektory a obsluha přerušení

 

b)    Vytvoření sekce .vects

Překladač GCC v dané konfiguraci nepodporuje automatické vytváření sekce .vects, která obsahuje přerušovací vektory. Vytvoření této sekce je proto úkolem programátora. Při vytvoření projektu v prostředí HEW jsou do projektu automaticky zahrnuty soubory vects.c, inthandler.c a inthandler.h, které obsahují potřebné části kódu. Kód však nepředpokládá práci s monitorem MON6 a vytváří sekci .vects pro standardní uložení na adrese 0x00000000. Při práci s monitorem MON6 je nutné vytvořit vlastní sekci .vects, která neobsahuje adresy vstupních bodů obslužných procedur přerušení, nýbrž instrukce skoku do obslužných procedur (viz výše).

Řešení je proto následující:
Z projektu odstraníme soubory vects.c, inthandler.c a inthandler.h a nahradíme je vlastním souborem, který obsahuje řadu instrukcí skoku do obslužných procedur. Instrukce skoku musí být v sekci s názvem .vects, kterou umístíme na adresu 0x00200000. Jako vzor lze použít přiložený ukázkový soubor. Většina obslužných procedur s výjimkou přerušení CMI1A je v něm nahrazena prázdnou procedurou s názvem int_error.

Procedura pro obsluhu přerušení musí být ukončena instrukcí RTE, nikoliv instrukcí RTS obvyklou u běžných procedur. Musí proto být specifikována jako obslužná procedura přerušení atributem __attribute__ ((interrupt_handler)) . Ukázku obslužné procedury a též proceduru int_error lze najít v přiloženém souboru ISR_example.c .

c)    Povolení přerušení

Pro jednodušší aplikace lze vystačit s přerušovacím režimem Mode_0, ve kterém se globální povolení přerušení provádí nastavení bitu I v registru CCR na hodnotu 0. Protože GCC nemá pro manipulaci s registrem CCR potřebné funkce, lze je nahradit inline instrukcí pro vynulování bytu I vloženou do zdrojového kódu programu. Pro povolení přerušení má inline instrukce tvar

        asm("andc #127,ccr" ::) ;         .

Podobně lze zakázat přerušení instrukcí

        asm("orc #128,ccr" ::) ;        .

 


Poznámka
:
První dva přerušovací vektory a tedy též první dvě skokové instrukce v souboru vects.s odpovídají adresám pro spuštění procesoru po hardwarovém a softwarovém resetu. Obě směřují na symbolickou adresu start, která je v inicializačním souboru start.asm .
 

 


Poslední změna stránky byla provedena 08.12.2008


Ä