ASM a Arduino

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Odpovědět
Struhadlo
Příspěvky: 3
Registrován: 04 čer 2019, 14:03
Reputation: 0

ASM a Arduino

Příspěvek od Struhadlo » 04 čer 2019, 14:24

Ahoj všem,

řeším takový problém. Pomocí mega2560 potřebuju v určitých situacích číst provoz na 16 bitové sběrnici jiného 8-bitového zařízení (s procesorem Z80). Rychlost by měla stačit, ale potřebuju tuto část kódu pro mega2560 kvůli kritickému časování (přesnost cca na 100-200 ns) napsat v ASM. Je nějaká možnost část programu pro Arduino napsat v ASM? Nebo klidně i celý, s ASM nemám problém.

AstroMiK
Příspěvky: 191
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: ASM a Arduino

Příspěvek od AstroMiK » 04 čer 2019, 18:25

Já v tom teda vůbec neumím, ale v jedné knihovně jsem viděl třeba tohle:


Kód: Vybrat vše

void static inline Signal_OUT(const uint8_t *signal, uint8_t ad2, uint8_t ad1, uint8_t ad0)
{
asm volatile(	
        "eor r18, r18   ;    r18<-0"              "\n\t"
        "eor r19, r19   ;    r19<-0"              "\n\t"
        "1:"                                      "\n\t"
        "add r18, %0    ;       1 cycle"          "\n\t"     // r18 = r18 + %0???
        "adc r19, %1    ;       1 cycle"          "\n\t"     // r19 = r19+ %1??? s přenosem
        "adc %A3, %2    ;       1 cycle"          "\n\t"     // ????
        "lpm            ;       3 cycles"         "\n\t"     // Load Program Memory  (R0 ‹(Z))
        "out %4, __tmp_reg__  ; 1 cycle"          "\n\t"     // nastavení vystupu na binarni hodnotu z pameti
        "sbis %5, 2     ;       1 cycle if no skip"     "\n\t"    // test preruseni smycky
        "rjmp 1b        ;       2 cycles. Total 10 cycles"   "\n\t"   // skok na zacatek smycky
        :
        :"r" (ad0),"r" (ad1),"r" (ad2),"e" (signal),"I" (_SFR_IO_ADDR(PORTA)), "I" (_SFR_IO_ADDR(SPCR))
        :"r18", "r19" 
        );
}

Struhadlo
Příspěvky: 3
Registrován: 04 čer 2019, 14:03
Reputation: 0

Re: ASM a Arduino

Příspěvek od Struhadlo » 05 čer 2019, 13:11

Jojojo, to je přesně to co jsem chtěl. Ten zápis ASM je teda megastrašidelný. Nutnost psát každý příkaz sólo do uvozovek, a ukončovat každý příkaz znaky "\n" je fakt prasečina :) Měly by na tom ještě zamakat. Díky AstroMiKu!

gilhad
Příspěvky: 301
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: ASM a Arduino

Příspěvek od gilhad » 05 čer 2019, 17:10

No, nemusíš tam psát každý příkaz solo, protože to preprocesor stejně spojí do jednoho dlouhého řetězce, ale je to tak přehlednější. (všimni si, že si to autor zarovnal odsazením, aby jó bylo vidět, že nikde nezapoměl přechod na další řádek = oddělení asm instrukcí, stejně jako si zarovnal komentáře v tom asm (aby se mu při výpisu asm ukázaly ve výpisu, jinak by je mohl nechat i v tom céčku))

Co se týká sekvence nový řádek tabelátor, tak tu vyžaduje pro oddělení instrukcí assembler, nikoli céčko. Pokud tvůj assembler umožňuje oddělovat jinak, můžeš to použít.

zbysek
Site Admin
Příspěvky: 114
Registrován: 22 úno 2017, 15:18
Reputation: 0

Re: ASM a Arduino

Příspěvek od zbysek » 05 čer 2019, 17:49

Programovat Arduino čistě v ASM jde a píšou o tom třeba tady: https://medium.com/jungletronics/meetin ... 0386652309

Struhadlo
Příspěvky: 3
Registrován: 04 čer 2019, 14:03
Reputation: 0

Re: ASM a Arduino

Příspěvek od Struhadlo » 05 čer 2019, 22:10

Takhle nepohodlný zápis jsem viděl jen tu... a každý příkaz musí být v solo uvozovkách, jinak mi to nebralo. Jak jsem si vyzkoušel, stejně nepohodlný je i v Atmel Studio 7 (pokud editujete C projekt). Ale já to chápu, projekt je v C, a ten ASM je tam jen nouzově "naroubován". Jinak pokud v Atmel Studio 7 založíte projekt v ASM a ne v C, je editace vpořádku. Pokud půjde vytvořit projekt pro Arduino v Atmel Studio 7 (C i ASM), budu ho používat, protože je tam mimo jiné možnost krokování. Já mám ale pocit že to tak jednoduché nebude...

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host