Jak na debug kódu uvnitř čipu

Nadpis příliš neporadil vlastní téma tohoto článku, ale lepší se mi vymyslet nepodařilo. Cílem bude uvést jednoduchý způsob, jakým je možné provést připojení GDB (debugger) k běžícímu kódu uvnitř STM32F10x (procesoru).

Úvod článku rovnou prozrazuje nejpokročilejší techniku odhalovaní chyb a to připojením externího debuggeru. Mnohem jednodušší a často využívané techniky přitom jsou

  • blikání LEDkou
  • výpis potřebných informací přes sériový port

Předchozí dvě techniky asi není potřeba nějak extra popisovat, zkrátka se do zdrojového kódu na správná místa rozmístí příslušné hlášky a pak se zkontroluje, kdy která byla vyvolána.

Aby bylo možné vytvořit spojení mezi GDB (debuggovací aplikace) a kódem běžícím v procesoru budou potřeba následující

  • STlink programátor
  • OpenOCD server
  • GDB pro příslušnou architekturu

STlink programátor lze použít buď originál (velmi drahý) nebo jeho kopii z číny. Ať už se rozhodnete pro kteroukoliv variantu, postup a výsledek by měly být totožné.

Pro instalaci OpenOCD serveru postačí zadat příslušný instalační příkaz, podle distribuce.

Binární aplikace GDB by měla být obsažena v příslušném toolchain, se jménem typu arm-none-eabi-gdb.

Jako první se vždy spouští OpenOCD server. Spuštěný server poskytuje přístupové rozhraní dalším prvkům (v našem případě debuggeru GDB). Aby mohlo dojít ke korektnímu navázání komunikace mezi OpenOCD a programátorem STlink je nutné vytvořit korektní konfigurační soubor. Výchozí nastavení OpenOCD hledá soubor jménem openocd.cfg ve složce, ze které je spuštěn. Ukázkový konfigurační soubor níže.

První řádek požaduje načtení konfigurace pro komunikaci přes STlink, druhý řádek požaduje načtení konfigurace příslušné pro rodinu pro rodinu procesorů STM32F10x, třetí a poslední řádek spustí inicializaci serveru.

Další možné konfigurace je možné najít v /usr/share/openocd/scripts/.

Po spuštění serveru by měl být vidět následující výpis

Dalším krokem bude spuštění GDB. Debugger je bezpodmínečně nutné spouštět se zdrojovým programem zadaným jako parametr. Rovněž je nutné, aby zadaný program byl totožný s programem v čipu nahraném.

Po spuštění GDB debuggeru je nutné programu GDB zadat příkaz ke spojení s OpenOCD serverem, vše je detailně vidět na výpisu níže.

Příkaz pro spojení je target extended-remote :3333, kde číslo za dvojtečkou označuje port, na kterém naslouchá OpenOCD server.

Pomocí příkazu b main lze nastavit první breakpoint do funkce main, program po spuštění příkazem run pak vyčká na své spuštění.

S takto nastaveným prostředím je pak možné aplikaci běžící uvnitř procesoru ladit stejně, jako kdyby běžela na lokálním PC. Tento styl práce tak může ušetřit spoustu času při ladění programu.

Mohlo by se vám líbit...

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *