Jak na S a asm v CCS550

Pavel Hudeček edizon na seznam.cz
Úterý Prosinec 23 19:48:40 CET 2014


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, c
0"?
> > Píše: [E0003] Unexpected trailing operand(s)
>
> Nechyba tam ciarka?
"
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20141223/75e6cbd0/attachment.html>


Další informace o konferenci Hw-list