GCC pro mikrokontroléry H8S/26xx


Úvod

V souvislosti s množícími se problémy s instalací vývojového prostředí HEW pro mikrokontroléry Hitachi (problémy patrně nepůsobí samotný HEW ale spíše způsob jeho použití v UL404) je od 5.4.2002 v UL404 pro mikrokontroléry Hitachi instalován překladač gcc. Jeho použití se týkají následující poznámky.

Umístění souborů

Překladač gcc je na všech počítačích umístěn v adresáři c:\EVB2633\cygnus . V adresáři demo je ukázkový příklad vypracovaný J. Dohnalem. Tento příklad demonstruje základní techniky psaní programů pro H8S/26xx.

Překlad a sestavení programu

  1. V adresáři demo je soubor gnupro.bat, který je vhodné spustit před použitím překladače. Soubor nastaví cestu PATH k souborům překladače.
  2. Soubor makefile v tomtéž adresáři naznačuje způsob sestavení programu. Kromě vlastních programových modulů je nutné k programu přidat inicializační modul startup.o a modul pro přesměrování přerušení vect.o . Oba soubory (autor opět J.D.) jsou též v adresáři demo. Umístění programu v paměti vývojového modulu EVB2633F je nutné přesně rozvrhnout s ohledem na mapu adresního prostoru. Proto je vhodné použít sestavovací skript evb2633.ld, který je též k dispozici.
  3. Jazyk C pro překladač gcc má některé syntaktické odchylky od IAR C používaného v HEW:

Ladění

Výstupem překladače je soubor .out ve formátu COFF. Pro zavedení programu do paměti vývojového modulu a jeho ladění lze použít standardní program Hitachi_Debugging_Interface_[EVB2633], který je součástí Hitachi_Embeded_Workshop. (Menu File - Load Program - Browse, nastavit COFF files (*.out) atd. ).

Obsluha přerušení

Při práci s přerušeními je nutné respektovat následující skutečnosti:

  1. Mikrokontroléry H8S/26xx používají pro obsluhu přerušení vektory uložené na dolních adresách paměti. Ve vývojovém modulu EVB2633F je tento paměťový prostor pokryt interní pamětí Flash, ve které je standardní monitor HDI-M.
  2. Aplikační programy jsou zaváděny do vnější paměti RAM, která začíná na adrese 200 000h. Monitor HDI-M nastavuje standardně přerušovací vektory na hodnotu <adresa_vektoru> + 200000h, tj. na začátek vnější paměti RAM. Při obsluze přerušení proto procesor vyvolá podprogram na adrese <adresa_vektoru> + 200000h. Vhodné je na tuto adresu vložit instrukci skoku (jmp) na vstupní bod obslužného programu přerušení.
  3. V ukázkovém programu je pro tyto účely použit modul vect.o, (viz též zdrojovou formu vect.s) který musí být linkerem umístěn na adresu 200000h. Pro jednotlivá přerušení jsou v tomto modulu skoky na implicitní obslužný program _int_error. Samostatný obslužný program mají pouze přerušení TGI0A a IRQ0 (viz soubor hlavni.c).

Pro správnou obsluhu přerušení je proto nutné udělat následující:

  1. Definovat obslužnou proceduru, např. pro proceduru s názvem "i_service":

void i_service(void) __attribute__ ((interrupt_handler));
void i_service(void) {

. . .

}          .

  1. Upravit soubor vect.s tak, že na pozici odpovídající danému přerušovacímu vektoru nahradíme původní cílovou adresu ve skokové instrukci:

jmp    @_i_service     .

  1. Program přeložíme a sestavíme s použitím linkovacího skriptu evb2633.ld .

 

Obr. 1    Situace při obsluze přerušení


K dispozici je následující:

Rozšiřující desky pro EVB2633F:


Poslední změna stránky byla provedena 09.04.2002