Jak na S a asm v CCS550
Josef Štengl
ok1ced na nagano.cz
Úterý Prosinec 23 21:11:23 CET 2014
Mě tedy přijde praštěná spíše THUMB, ARM se mi vyloženě líbí. No ano, vím, zavání to masochizmem :-)
Thumb vznikla protože ARM spotřeboval spoustu paměti - M ka mají pouze THUMB. Ale je trochu na úkor rychlosti.
Gnu překladač není hned potřeba. TI není tak hrozný a umožnuje GNU syntaxi a některé buildin fce. Tak je případný přechod
snažší, když se používá od začátku. A pro převod z TI assembleru do syntaxe srozumitelná pro GCC existuje skriptík přímo
od TI.
I když pravdou je s C99 implementací má TI ještě drobátko potíže ...
Dne 23.12.2014 v 20:27 Jaroslav Buchta napsal(a):
> 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 bywww.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>
>
>
> --------------------------------------------------------------------------------------------------------------------------
> <http://www.avast.com/>
>
> This email has been checked for viruses by Avast antivirus software.
> www.avast.com <http://www.avast.com/>
>
>
>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
Další informace o konferenci Hw-list