Řešení některých problémů s HEW
Verze programu HEW se poměrně často mění a u jednotlivých verzí se v detailech liší i postup při vytváření nového projektu. Proto je užitečné znát několik všeobecných pravidel:
CPU Type (typ procesoru): Projekt se vytváří pro procesor řady H8S. Tato řada zahrnuje několik typů CPU (tj procesorových jader, lišících se souborem instrukcí), označovaných např. H8S/2000, H8S/2300 atd. Pro POT je používané jádro H8S/2600.
CPU (verze procesoru): Konkrétní verze mikroprocesorů se dále liší ve vybavení různými periferními obvody. Jednotlivé verze se odlišují posledními dvěma číslicemi v označení, např. H8S/2623, H8S/2633 atd. Pro cvičení z POT nemá toto rozlišení význam a používáme univerzální typ "Other H8S/2600 device".
CPU Mode (režim): Procesor H8S/2600 může pracovat ve dvou režimech - Normal Mode a Advanced Mode. Pro POT je používán Advanced Mode.
Target Device: HEW umožňuje kromě překladu a sestavení programu též jeho ladění na různých typech zařízení (tzv. Target Device) - na simulátoru nebo na skutečném procesoru. Pro POT je používán simulátor. Je nutné zvolit simulátor pro příslušný režim procesoru (tj. Advanced Mode). Rozlišení typu simulátoru je možné podle posledního písmena názvu: H8S/2600A Simulator je pro Advanced Mode, zatímco H8S/2600N Simulator je pro Normal Mode. Pro POT se samozřejmě předpokládá použití H8S/2600A.
Formát souborů: Objektové soubory (relativní moduly) a binární soubory používají jako implicitní (default) formát Elf/Dwarf2_KPIT.
V některých případech se při práci se simulátorem procesoru H8S objevuje problém s nefungujícími simulovanými IO operacemi. Pokud je simulátor správně nastaven, může být příčina potíží v nastavení parametrů pro sestavení programu, jejichž důsledkem je mimo jiné i zdánlivá nefunkčnost simulovaných IO operací.
Při samostatném vytváření projektu v prostředí HEW je sestavovací program konfigurován tak, že mapuje konstanty v datové sekci (tj. .data) bezprostředně za konec kódové sekce. Tento postup má v určitých případech (inicializace proměnných v případě použití skutečného procesoru) opodstatnění, ale pro ladění úloh v předmětu POT je nežádoucí. Situaci lze vyřešit následujícím způsobem:
Pokud je v záložce Link/Library pro nastavení adres sekcí otevřené v okně Build - KPIT GNUH8[ELF] Toolchain ... zvoleno mapování sekce .data (viz obr. 1), postupujeme dále popsaným způsobem:
Obr. 1.
Ve sloupci Group name v seznamu sekcí vybereme sekci .data. Potom tlačítkam Modify... otevřeme okno Modify section group a v něm tlačítkem Advanced okno pro detailní nastavení. V tomto okně zrušíme nastavení Reserve memory for section mapping a tlačítky OK okna postupně zavřeme (viz obr. 2). V důsledku provedené změny by měla zmizet položka v poli Section group mappings, vyznačená na obr. 1. Tím je problém s mapováním sekcí odstraněn.
O účinku popsaného mapování se můžeme přesvědčit tak, že před provedením výše popsané úpravy zkontrolujeme obsah datové sekce obsazené konstantami (například textovými řetězci) výpisem obsahu příslušné části paměti v simulátoru. (Program musí být předtím samozřejmě přeložen a sestaven a zaveden do simulátoru.) Pokud používáme nastavení doporučené pro POT, je začátek datové sekce na adrese 0x00FF4000. Výpisem obsahu paměti na této adrese zjistíme, že konstanty nejsou uloženy na adresách zvolených pro datovou sekci, nýbrž je lze najít bezprostředně za koncem programu. Po provedení popsané změny nastavení linkeru budou konstanty uloženy podle předpokladu přímo v datové sekci.
Důsledkem mapování datové sekce je situace, kdy při simulovaném běhu programu nejsou v datové sekci textové řetězce a parametrické bloky pro simulované IO operace. To se pak projevuje jejich zdánlivou nefunkčností.
Mapování sekcí, které bylo původně pro sestavovací program nastaveno, je používané v případě, kdy je program uložen v nevolatilní paměti (např. Flash) a je spuštěn po připojení napájení. Spolu s kódem programu jsou v paměti Flash i textové řetězce a další konstanty. Po startu procesoru jsou textové řetězce a konstanty zkopírovány inicializační procedurou na správné místo v datové sekci, která je obvykle umístěna v paměti SRAM a její obsah je proto po připojení napájení nedefinovaný. Překladač předpokládá, že před vstupem do vlastního programu budou konstanty už překopírovány na správné místo v datové sekci a proto ve vygenerovaných instrukcích používá pro práci s daty adresy odpovídající jejich uložení v datové sekci, nikoliv v paměti Flash.
Obr. 2.
[Základní vlastnosti HEW] [Instalace prostředí HEW] [Vytvoření a úprava projektu] [Překlad a ladění na simulátoru] [Použití simulovaných I/O operací]
Návrat na hlavní stránku POT.
Poslední změna stránky byla provedena 16.03.2010