Description

SVD (System View Description) Viewer.

Aplikace, která asi nebude nikdy dokončena. Prvotním úkolem bylo ze SVD souboru vygenerovat C++ hlavičku, protože ty které mívají výrobci jsou každá pes jiná ves, jsou určené pro čisté C a z mnohých důvodů mi prostě nevyhovovaly. Nejprve vznikla aplikace v Qt (2017), která sice něco dělala, ale postupem času se ukázalo, že to nejde dělat ad hoc, pro soubory SVD existuje ARM standard CMSIS, takže jako druhý pokus jsem začal psát kostru programu, která už není závislá na externích knihovnách, stačí C++ STL. Mimo jiné i pro to, aby to šlo použít v emscripten, tedy pro web. Dále jsem zvolil vícefázový postup parsování SVD souboru, dělat to celé najednou je cesta do pekel. V první fázi se XML formát zkonvertuje do stromu, který je poněkud lépe zpracovatelný, protože použitá knihovna tinyXml je sice jednoduchá, ale prochází jednotlivé prvky poněkud podivně. Ve druhé fázi se prvky XML převedou podle standardu CMSIS, což je nejsložitější část práce, která zdaleka není hotova. Zatím nepotřebuji parsovat CPU a neumím rozebrat prvky typu cluster, jsou složitě strukturované. Sice je někteří výrobci používají, ale zřejmě jen pro velmi složité prvky, normální čipy s jádrem Cortex-Mx tohle nemívají. V průběhu převodu se provádějí kontroly standardu - používají se regulární výrazy i výčty, poměrně dloho to trvá. V další fázi se provede poslední převod na strukturu popisující paměť čipu v hierarchii Device → Peripheral → Register → Field → Enumeration. To pak lze vypsat v libovolném tvaru zděděnou třídou, která má přístup k datům (friend). Bohužel výrobci k tomu přistupují zřejmě velmi laxně, takže třeba některé prvky ve skupině mají stejná jména (typicky NXP), takže tato jména nejdou v C/C++ hlavičkovém souboru použít. Takových problémů je tam spousta, takže tohle nemůže být nikdy úplně hotové a funkční pro jakýkoli SVD soubor.

HTML verze - viz shora - celkem zachovává popis, tak jak ho výrobce vytvořil. Kdyby do toho výrobci dali poněkud více komentářů (v tom je zase NXP z těch lepších, STM horší), bylo by to něco jako RM. Nicméně výpis registrů mi připadá přehlednější, barevné značení přístupu je

Color description
UNACCESSED READ ONLY WRITE ONLY READ WRITE

A všechna barevná pole jsou klikací, takže pokud na ně klikneme myší, zobrazí se bližší popis (pokud existuje). Já moc neumím formátovat webové stránky, takže tohle běží na Firefoxu, co to udělá jinde, netuším, ale vrtat se v tom už nebudu. Tabulka registrů je 32-bitová, samo sebou se na stránku nevejde a oproti zvyklostem se bity zobrazují zleva od nuly. Připadá mi to přirozenější, většina informace je v nižších bitech - a ty jsou viditelné bez posuvu. Je to výsledek kompromisu - pole tabulky je lépe mít ekvidistantní, ale zase se tam nevejdou celé názvy, protože některé jsou příšerně dlouhé. Přitom na to lze kliknout a to už se zobrazí celé.

Jako vzorek, který se zobrazí defaultně je použit soubor ARM_Sample.svd. Zde je veliká sbírka SVD popisů různých výrobců i když je většinou možné soubor získat přímo od výrobce. Bývají umístěny dost nelogicky - např. STM je (dnes, 10.10.2022) má někde pod CAD Resources.

Tím malým tlačítkem Convert lze vyvolat dialog, který umožní podstrčit do programu lokální soubor, ten se pak okamžitě převede (pokud se to povede). Původní záměr byl nechat v této webové aplikaci i generátor C++ hlaviček. Ne, že by to nešlo, ale připadá mi to zbytečné. Kdo má zájem to použít, stáhne si zdrojáky a přeloží si to jako nativní aplikaci. Ostatně generovaná hlavička má své mouchy a ne každému bude vyhovovat.

Celé je to popsáno zde. Mají tam i podobnou aplikaci SVDConv, je to mnohem rozsáhlejší systém než tento hobby projekt, ale jen pro Windows. Zde není cílem to napodobit, ale udělat si to po svém. A naučit se něco nového.