Wiring a assembler
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Wiring a assembler
Celý den čtu a koukám na videa a moc moudrý nejsem, tak se zeptám.
Hodilo by se mi nakombinovat program převážně napsaný ve wiring a pár kritických míst napsaných v assembleru.
Pořád se mi nedaří najít tuto kombinaci v IDE vytvořit. Poradte, nebo ukažte mi prosím kus kódu, kde to tak máte.
Třeba jsem stále nevykoukal jak bych se dostal v asm k informaci, kde je alokováno pole, vytvořené ve wiringu.
Hodilo by se mi nakombinovat program převážně napsaný ve wiring a pár kritických míst napsaných v assembleru.
Pořád se mi nedaří najít tuto kombinaci v IDE vytvořit. Poradte, nebo ukažte mi prosím kus kódu, kde to tak máte.
Třeba jsem stále nevykoukal jak bych se dostal v asm k informaci, kde je alokováno pole, vytvořené ve wiringu.
Re: Wiring a assembler
Nepíšeš aký procesor máš na mysli. a to je pri asm dosť podstatné. Tak predpokladajme že nejaké AVR.
Príklad:
výstup
Všetko je popísané v dokumentácii AVR-GCC. Nejaké príklady odkiaľ som to prebral
https://www.nongnu.org/avr-libc/user-ma ... e_asm.html
Príklad:
Kód: Vybrat vše
char pole[]="Ahoj";
void setup() {
Serial.begin(9600);
asm volatile(
"ld __tmp_reg__, %a0 ;vezmi prvy znak v poli" "\n\t"
"inc __tmp_reg__ ;zvys o jedna" "\n\t"
"st %a0, __tmp_reg__ ;vrat spet do pola" "\n\t"
:
: "e" (pole)
);
Serial.println(pole);
}
void loop() {
}
Kód: Vybrat vše
23:05:07.262 -> Bhoj
https://www.nongnu.org/avr-libc/user-ma ... e_asm.html
Re: Wiring a assembler
Díky, to jsem měl představu, že budu moct použít klasický asm. Ještě bych na to mohl z druhé strany.
Mám Leonardo, tedy ATMEGA32U4. Nemá někdo kus kódu, kde by byl vyřešen příjem o odesÍlání bytu po sériovém portu vytvořeném na USB. Teda bez převodníku. v ASM.
Mám Leonardo, tedy ATMEGA32U4. Nemá někdo kus kódu, kde by byl vyřešen příjem o odesÍlání bytu po sériovém portu vytvořeném na USB. Teda bez převodníku. v ASM.
Re: Wiring a assembler
Použij standardní knihovnu a funkce pro práci se sériovým portem. Assembler ti s UARTEm v ničem nepomůže.
Re: Wiring a assembler
To není rada dle představ.
Potřebuju si poslat cca 1000 bytů dat seriákem do ramky procesoru a ty pak z té ramky zpracovat s dalším hardwarem, kde je požadovaná poměrně velká náročnost na čas. Proto potřebuju procesor s víc jak kilobytem ram, a další zpracování v asm. Přeci jen má člověk v asm pod kontrolou co a jak dlouho se vykonává. Navíc potřebuju aspon 22 výstupních pinů, a to mi ATMEGA32u4 nabízí v případě, že ten seriák bude vytvořen z USB, nemůžu si dovolit obsadit 2 vývody TX RX a obslužit je běžně v asm.
Po zapnutí se bude čekat na nasypání dat z PC a pak už bych ostatní obsluhoval v běžném assembleru a zpět do wiring už se vrátit nepotřebuju.
Tedy potřeboval bych:
1/ vědět kam se nadeklarovalo pole s daty, nebo ho deklarovat na konkrétní adresy v ram
2/ dokázat z wiring skočit na konkrétní adresu, kam si uložím assemblerovou část programu.
To co nabízí IDE jako zápis asm je tedy dost odlišné od asm.
Opravdu jste nikdo seriák USB v asm neřešil ?
Potřebuju si poslat cca 1000 bytů dat seriákem do ramky procesoru a ty pak z té ramky zpracovat s dalším hardwarem, kde je požadovaná poměrně velká náročnost na čas. Proto potřebuju procesor s víc jak kilobytem ram, a další zpracování v asm. Přeci jen má člověk v asm pod kontrolou co a jak dlouho se vykonává. Navíc potřebuju aspon 22 výstupních pinů, a to mi ATMEGA32u4 nabízí v případě, že ten seriák bude vytvořen z USB, nemůžu si dovolit obsadit 2 vývody TX RX a obslužit je běžně v asm.
Po zapnutí se bude čekat na nasypání dat z PC a pak už bych ostatní obsluhoval v běžném assembleru a zpět do wiring už se vrátit nepotřebuju.
Tedy potřeboval bych:
1/ vědět kam se nadeklarovalo pole s daty, nebo ho deklarovat na konkrétní adresy v ram
2/ dokázat z wiring skočit na konkrétní adresu, kam si uložím assemblerovou část programu.
To co nabízí IDE jako zápis asm je tedy dost odlišné od asm.
Opravdu jste nikdo seriák USB v asm neřešil ?
Re: Wiring a assembler
Kedže je to postavene na gcc-avr tak to vie linkovať aj .S súbory. Stačí googliť ako na to. Problém je tuším s arduino IDE kde to vraj nejde. Ale kedže je to open source tak všetko ide keď sa chce. Nikdy som to síce nepotreboval ale tu týpek ukazuje ako zmodifikovať IDE aby linkovalo aj asm súbory. Adresy sa dajú normálne importovať cez extern ako je dobrým zvykom.
Posledná kapitola videa je o tom ako to navliecť aby to šlo.
https://youtu.be/h8T3PWauYF4
Potom som videl tušim v poslednom AVR štúdiu aj možnosť importovať arduino projekt. A tam si už asm primixovať môžeš bežne, navyše tam máš aj simulátor a podobné hračky. Tiež som to v živote nepotreboval takže cestu prešlapanú nemám.
Ak len potrebuješ dostať pointer na pole a spustiť svoj kód tak na to je práve ten inline jak vyšitý. Ten príklad čo som postol je presne to, len na konci dáš jmp kam to má pokračovať.
Posledná kapitola videa je o tom ako to navliecť aby to šlo.
https://youtu.be/h8T3PWauYF4
Potom som videl tušim v poslednom AVR štúdiu aj možnosť importovať arduino projekt. A tam si už asm primixovať môžeš bežne, navyše tam máš aj simulátor a podobné hračky. Tiež som to v živote nepotreboval takže cestu prešlapanú nemám.
Ak len potrebuješ dostať pointer na pole a spustiť svoj kód tak na to je práve ten inline jak vyšitý. Ten príklad čo som postol je presne to, len na konci dáš jmp kam to má pokračovať.
Re: Wiring a assembler
Nebo použít nějaký jiný MCU s vyšším výkonem, dostatkem pinů a DMA. Data se budou přesouvat ze sériáku do RAM pomocí DMA a jádro se může zabývat úpravou dat. Pak bohatě stačí napsat to v Cčku a netřeba se drbat s assemblerem. Již delší dobu používám MCU STM32.... a jejich IDE a konfigurátor a naprostá spokojenost. Ale chápu, že přechod na jiné IDE je trochu nekonfortní.
Co se týtá HW, používám moduly Nucleo32 a Nucleo64 pro prototypování. Obsahují i vestavěný programátor/debugger, který se dá pohodlně oddělit. Je možné použít i ruzné arduino "blue pill" a podobné moduly (ale často jsou osazené neoriginálními MCU, což bývá problém).
Co se týtá HW, používám moduly Nucleo32 a Nucleo64 pro prototypování. Obsahují i vestavěný programátor/debugger, který se dá pohodlně oddělit. Je možné použít i ruzné arduino "blue pill" a podobné moduly (ale často jsou osazené neoriginálními MCU, což bývá problém).
Re: Wiring a assembler
Zrovna práce s USB není vůbec jednoduchá. Poslat někam 1 000 bytů je úplné prd. V x64 asm / C++ (Visual Studio) i7 jsem pracoval se souborem 6GB, který obsahoval 40 milionů řádků s GPS souřadnicemi. To je pak o něčem jiném. Mimochodem, jeho načteni naráz do RAMky bylo na 3 volání po 2,5 GB, zpětné hledání trasy bojí (cca 2 mld. hledání) včetně vynesení tras na mapu světa trvalo 3 sekundy.
Pro seriozní práci s MCU musíš použít třeba MPLAB X IDE a XC8/16/32 kompilátor od Microchipu. Arduino IDE je pro amatéry .
Mohlo by ti pomoci Send Data via USB
P.S. Aktuálně jsem řešil problém SPI komunikace s ručním řízením SS pinu ve FreeRTOS viz SAMD21-XPRO RTOS SPI.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti