Jak na S a asm v CCS550
Jaroslav Buchta
jaroslav.buchta na hascomp.cz
Úterý Prosinec 23 20:27:07 CET 2014
Assembler pro ARM je opravdu hardcore, asi nikdo nepredpoklada, ze nekdo
bude v assembleru psat vic nez 2 stranky startup kodu ;-) Proste cista
RISC architektura.
Pak zrejme doslo k poznani vychoziho omylu a vznikla sada THUMB, ktera
uz je trosku normalni. Trosku je taky blbe, ze kazda verze jadra ma
ruzne rozsireni instrukcni sady.
Registry a jejich pouziti je taky dost narocne na pochopeni, PC,SP,LR,
ruzne mody...
Preruseni je kapitola sama pro sebe, kazda verze si dela ruzne akce,
ukladani registru, stavu FPU ...
Ale ma to neco do sebe, kdyz se nad tim zamyslite, koncepce, ze kazda
instrukce ma 32b, trva stejne (az na vyjimky) a muze byt podminena neni
tak spatna.
Kazdopadne bych asi presel k normalnimu GNU prekladaci.
Obecne plati, ze je potreba prostuduvat extra popis jadra a extra popis
celeho okoli, kde zas neni zadna informace o jadru... A preruseni se
treba vetsinou nejak konfiguruje jak v jadru, tak v nejake jednotce okolo.
Dne 23. 12. 2014 v 19:48 Pavel Hudeček napsal(a):
> Vlastně ani nevím, jsem z toho jelen...
>
> Už jen ten prasáckej asm. Ještě jsem dokázal pochopit, že asm pro AVR
> má místo MOV několik různých LDx a STx, že když to začalo jako práce
> nějakého studenta, tak si asi chtěl ušetřit práci, aby překaldač
> nemusel analyzovat operandy. Poněkud mě ovšem šokovalo, že stejně je
> na tom ARM, resp. hůř, neboť má místo MOV celekem asi 16 různých názvů
> pro různé kombinace operandů.
>
> Zatím jsem např. nepřišel na to, jak zapíšu obsah banální proměnné do R0.
>
> Na x86 bych použil MOV a překladač by to vyřešil.
>
> Takže: V CCS 550 jsem vytvořil "hello world" projekt, k němu přidal
> include s různými #define na adresy registrů a makrem HWREG. Následně
> jsem z té odkazované asm ukázky vykoukal nastavení všech registrů
> ohledně GPIO a přerušení. Pak jsem přidal ještě interrupt.h a
> interrupt.c ze Starterwaru a použil IntAINTCInit(); a
> IntRegister(SYS_INT_GPIOINT2A, pokusIsr); Ale stále to nefungovalo.
> LEDky blikaly, jak jim velela smyčka na konci mainu, když jsem udělal,
> aby se daly přímo ovládat tlačítky přes čtení portu tlačítek, tak to
> fungovalo, ale přerušení prostě nic...
>
> Nakonec jsem zjisitil, že:
> - V tom interrupt.h/c je pole fnRAMVectors, kam se reistrujou
> přerušení, ale není tam nic, co by řeklo procesoru, že tady je ta
> tabulka vektorů.
> - Odkaz na to fnRAMVectors se vyskytuje i v system.lib z dema ve
> Starterwaru, což jednak samo o sobě nefunguje bez nastavení tuny
> dalších věcí a jednak je to monstrum, který bych do svého projektu
> nerad dával. A nenašel jsem od toho zdroják. Stejne tak není od
> libc.a, co je v tom hello world projektu.
>
> PH
>
> Od: Josef Štengl <ok1ced na nagano.cz>
>
> A překládáte to arm-none-eabi kompilátorem?
>
> Abych řekl pravdu, Keilem se budu zabývat jen když mě za to budou
> platit.
>
> Mimochodem všiml jste si, že ty ... tentonoc používají stejnou
> příponu pro C a header a ASM (.h)?
>
> A ještě mám dojem, že to napsáno v THUMB2. Nikdy jsem THUMB2 kód
> neměl odvahu spustit v přerušení, protože je řečeno, že
> se přepíná do ARM. Ale to je u R ka, u A jsem se to asi nepřepíná,
> pokud si matně vzpomínám z vašeho předchozího dotazu.
>
> Dne 23.12.2014 v 18:56 Pavel Hudeček napsal(a):
> > Díky, nějak mi časem vypadla. Teď už to zas hlásí původní chybu:
> > [E0004] Coprocessor information field must be an absolute constant
> > a to hned 2x za sebou
> >
> > Jenže takhle přesně jsem to zkpíroval ze souboru init.S, který
> je v 3000.trivial-a8.zip
> >
> <http://e2e.ti.com/cfs-file.ashx/__key/communityserver-discussions-components-files/791/3000.trivial_2D00_a8.zip>
> > odkazovaném zde:
> >
> http://e2e.ti.com/support/arm/sitara_arm/f/791/p/360758/1268334#1268334
> >
> > stejně je to i v start.S v io-irq.tar.gz
> >
> <http://e2e.ti.com/cfs-file/__key/communityserver-discussions-components-files/791/io_2D00_irq.tar.gz>
> odkazovaném zde:
> >
> http://e2e.ti.com/support/arm/sitara_arm/f/791/p/389752/1376393#1376393
> >
> > jen mi zcela uniká, proč nikde před tím nevidím vložení adresy
> vektorů do R0. Tam je pro mě navíc naprosou záhadou celá
> > syntaxe, např. to, že je všechno deklarováno stylem "let main()
> -> void" wtf?
> >
> > Od: Milan B. <milan na bastl.sk>
> >
> > On 23. 12. 2014 18:08, Pavel Hudeček wrote:
> > > 3. Co dělám špatně, když mi překladač nepřeloží "MCR p15, 0
> r0, c12, c0"?
> > > Píše: [E0003] Unexpected trailing operand(s)
> >
> > Nechyba tam ciarka?
>
>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
---
This email has been checked for viruses by Avast antivirus software.
http://www.avast.com
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20141223/7ecef00c/attachment.html>
Další informace o konferenci Hw-list