Wiring a assembler

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
caga1
Příspěvky: 5
Registrován: 07 kvě 2023, 22:12
Reputation: 0

Wiring a assembler

Příspěvek od caga1 » 08 kvě 2023, 21:33

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.

peterple
Příspěvky: 156
Registrován: 22 zář 2021, 20:20
Reputation: 0

Re: Wiring a assembler

Příspěvek od peterple » 08 kvě 2023, 23:21

Nepíšeš aký procesor máš na mysli. a to je pri asm dosť podstatné. Tak predpokladajme že nejaké AVR.
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() {

}
výstup

Kód: Vybrat vše

23:05:07.262 -> Bhoj
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

caga1
Příspěvky: 5
Registrován: 07 kvě 2023, 22:12
Reputation: 0

Re: Wiring a assembler

Příspěvek od caga1 » 09 kvě 2023, 13:14

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.

Uživatelský avatar
Caster
Příspěvky: 380
Registrován: 11 zář 2019, 09:02
Reputation: 0

Re: Wiring a assembler

Příspěvek od Caster » 09 kvě 2023, 18:00

Použij standardní knihovnu a funkce pro práci se sériovým portem. Assembler ti s UARTEm v ničem nepomůže.

caga1
Příspěvky: 5
Registrován: 07 kvě 2023, 22:12
Reputation: 0

Re: Wiring a assembler

Příspěvek od caga1 » 09 kvě 2023, 19:44

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 ?

peterple
Příspěvky: 156
Registrován: 22 zář 2021, 20:20
Reputation: 0

Re: Wiring a assembler

Příspěvek od peterple » 09 kvě 2023, 20:26

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ť.

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: Wiring a assembler

Příspěvek od ondraN » 10 kvě 2023, 08:03

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).

Uživatelský avatar
Caster
Příspěvky: 380
Registrován: 11 zář 2019, 09:02
Reputation: 0

Re: Wiring a assembler

Příspěvek od Caster » 10 kvě 2023, 15:53

caga1 píše:
09 kvě 2023, 19:44
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...

Opravdu jste nikdo seriák USB v asm neřešil ?
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.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Google [Bot] a 3 hosti