CH32V003
Miroslav Mraz
mrazik na volny.cz
Neděle Březen 3 09:53:23 CET 2024
Ano. U toho STM mi vadilo spíš to, že jádro je přizpůsobeno, aby se to
celé dalo udělat v C, assembler není nutný. Tak proč to tak není.
U CH32V003 je to složitější. Tam musíte v assembleru nastavit SP, GP a
některé CSR procesoru, aby se jádro chovalo jak chcete. V CH32V003_fun
to bylo blbě, protože autoři nechali rutinu pro nastavení hodin jádra
volat uživatele až v main(). Tedy až po zavolání statických
konstruktorů. To by mohlo dělat problémy.
Napsal jsem to v C++, protože inline assembler umožní použít raw-string,
což je čitelnější a takové nějak hezčí. Ale jinak je ten assembler
RISC-V dost záhada, proč jsou ty .option tak jak jsou, netuším a ani to
nechci zkoumat.
Jediný negativní postřeh je, že clang/llvm tohle neumí, nezná extenzi E
(zřejmě není kanonická). Ale lidi to programují v rustu, vzal jsem odtud
SVD, takže to třeba nějak ohnuli, nevím.
Mrazík
On 02. 03. 24 22:45, Petr Labaj wrote:
> Jen pro ujištění, že si rozumíme.
> Mám na mysli startup, který po resetu nastaví oscilátory, PLL, děličky atd.
> A v praxi tento modul taky většinou obsahuje tabulku vektorů na pevných
> adresách, defaultně nastavenou pro všechny IRQ zatím na nějaký "kód
> smrti" (nějakou nekonečnou smyčku).
> Tedy to, co se třeba u STM jmenuje nějak jako startup_stm32f0xx.s.
>
> PL
>
Další informace o konferenci Hw-list