Egyéb: Assembly, Ada...

i2c használata, i2c-parport-light, hogy működik ez

Azért tettem ide ezt a kérdést, mert a "lavinát" az indította el, hogy clockolt soros kommunikációs modult/device -t kellene írnom.
Első lépésben a parallel portot használtam - egyenlőre csak az órajel előállítására koncentrálok, legfőképp a sebesség miatt.
Eszembe jutott, hogy az i2c (de az spi is) hasonlóan egy clockolt soros kommunikáció, amihez vannak kész driverek - nyílt forráskóddal :)
Addig eljutottam, hogy beemeltem az i2c_parport_light modult, de nem tudom "szóra bírni". Device node nem jelenik meg (vagy nem találom). Ráadásul, a forrásból ítélve ahhoz, hogy ez működjön kell az i2c_core és talán más "i2c" modul is (pl. i2c_algo_bit).
Hogy lehet a parportra kötött i2c buszt meghívni - írni, olvasni?
Talán az i2c-tools segít?
Aztán van itt valami libi2c-dev "userspace I2C programming library".
Hol kezdjem?

minimal halokartya driver keszitese

Assemblyben irnek egy minimalis meretu es tudasu halokartya drivert.Olvastam ilyen temaju cikkeket es lattam a linux forrasban a drivert.
En valami sokkal egyszerubbet irnek. Egyetlen tipusra, raw packetekhez. Ehhez kellene alkalmas dokumentacio es/vagy minimal peldakodok. Tudtok ajanlani szakkonyvet/eloadasjegyzetet/irc csatornat?
Koszonom.

[solved] Elsore melyik funkcionalis nyelvet miert?

Sziasztok,

Ha most kezdenetek el megtanulni az elso funkcionalis nyelvet, akkor melyik lenne az, es miert? Pl: x mert konnyu elso funcionalis nyelvnek, y mert elterjedt, z mert hasznos/piackepes etc...

Update:

Latom, vagy rosszul fogalmaztam, vagy a szovegertes nem megy:
Tisztan funkcionalis vagy hibrid nyelvekre lennek kivancsi, pl: Scala, Haskell, Erlang, etc.

avr-gcc inline assembler viselt dolgai

Sziasztok!

Adott AVR8 alatt egy egyszeru problema: ossze kellene szorozni egy 32bites es egy 8bites szamot. Ha csinalok erre egy ilyesmit, hogy


static inline uint32_t mul32x8(uint32_t a,uint8_t b)
{
 return(a*b);
}

akkor ez nagyon lassu lesz. Tobbek kozott azert mert 32x32bites szorzasra alakitja es egy avr-libc konyvtarban implementalt (valami __mul32... jellegu nevvel megaldott) fuggvenyt hiv. Es ez ugye egy RISC architektura alatt (plane 8 biten) koltseges. Marmint mind az a luxus hogy 8bit helyett 32bittel dolgozunk, mind a fuggvenyhivas.

Nosza, irjuk meg asm-ben. Halistennek a linuxos avr-gcc fejleszteseben is tevekenyen ott van az Atmel, a referenciadoksi is nagyon jo, igy szepen el lehet indulni. Ossze is sikerult dobni egy ilyet:


static inline uint32_t mul32x8(uint32_t a,uint8_t b)
{
 uint32_t       prod;

 __asm__ 
  (
        "       mul     %A[a], %[b]     \n\t"
        "       mov     %A[p], r0       \n\t"
        "       mov     %B[p], r1       \n\t"
        "       eor     %C[p], %C[p]    \n\t"
        "       eor     %D[p], %D[p]    \n\t"
        "       mul     %B[a], %[b]     \n\t"
        "       add     %B[p], r0       \n\t"
        "       adc     %C[p], r1       \n\t"
        "       mul     %C[a], %[b]     \n\t"
        "       add     %C[p], r0       \n\t"
        "       adc     %D[p], r1       \n\t"
        "       mul     %D[a], %[b]     \n\t"
        "       add     %D[p], r0       \n\t"

        : [p] "=&d" (prod)
        : [a] "d" (a), [b] "d" (b) 
        :  "r0", "r1", "cc"
  );

 return(prod);
}

Offline debugger szerint is megy, jo kodot is general (avr-objdump -d), elesben is majdnem mukodik, csak neha nem. Akkor viszont valahogy ugy kifagyasztja az MCU-t hogy WDR-ig se sikerul eljutnia :] Akkor nem mukodik (neha), ha ket egymas koveto" szorzas van, kis egyeb aritmetikaval (pl osszeadas). Igy felmerul a lehetoseg, hogy optimalizacio (-O3) soran valamit a parameter-regiszterekkel (lasd [p], [a], [b]) igencsak osszekavar itten.

Szoval a lenyegi kerdes: van-e valakinek tapasztalata hogy gcc inline asm mellett az output es/vagy input parametereknel az egyes regisztereket hogyan erdemes es/vagy ajanlott beallitani? Esetleg pont AVR8 alatt? A "d" itten kvazi hasrautes szeru" volt, de ha pl =&d helyett csak =d-t adok meg outputkent akkor az -O3-as kod mar debugger szinten nem lesz jo. A clobber szekcioban meg az r0, r1 es a flags-on kivul mast csakcsak nem kell megadni (a mul explicite csak az r0,r1-et bantja, a tobbi meg csak a parametereit es a cc-t). De valszeg a kiakada's azert van mert itten rosszul adok meg valamit... Lehet hogy "d" helyett "a" kene? A referencia szepen osszefoglalja az opciokat (r, d, a, l, ...) de hogy ebben az esetben mi a banat baja lehet azt nem tudom...

thx, A

Dosbox + NASM + Protected mode

Sziasztok!

Ossze szeretnek dobni egy programot assembly-ben, ami atkapcsol vedett modba, ott tokol egy kicsit, majd visszalep.
Ehhez telepitettem a dosboxot, nasm-ot (ami jol mukodik).
Ezutan elkezdtem peldakodokat bongeszni, de egyik sem mukodott.
Lefordultak ezzel az utasitassal:

nasm -f bin first.asm -o first.com

Aztan amikor elinditottam, akkor kilepett a dosbox, ennyit mondva:

Aborted (core dumped)
A Dump file-t nem talaltam meg.

Valaki meg tudna dobni egy jol mukodo nasm-ban fordulo koddal, ami atkapcsol vedett modba?

[ megoldva] gpasm ami free

Itt szívok fél napja!


mpasm - ez ingyenes, de sok hibája van
  000009C3            00045 PERIOD_3        equ             P_25600
020D   3009           00048                 movlw           high PERIOD_3

gpasm - ez free és javítja az mpasm hibáit
  000009C3            00045 PERIOD_3        equ             P_25600
020D   3089                  00048          movlw           high PERIOD_3

Most jön az abakusz programozói tanfolyam. :(

Érdekes diagramok a programozási nyelvekről subreddit bejegyzések alapján

A Github-on találtam ezt érdekes projektet, ahol érdekes diagramokat állított elő Tobias Hermann.

Érdemes egy pillantást vetni rá!

Mindenki megnézheti, hogy a kedvenc (utált) programozási nyelveiről miként vélekednek az emberek.

MPASM align problémák

Sziasztok!

Gyűröm az MPASM fordítót PIC18-ra, méghozzá a "Generate absolute code" opcióval.Próbálom következő turpisságokat megvalósítani:
- adatot EEPROM-ba rakni bájtonként.
pl.
Data1 de DefaultValue1
Data2 de DefaultValue2

- adatsort megadni 3 bájtonként
pl.
Data3 dw .1500000&0ffff
db (.1500000>>10)&0ff

A probléma:
Annak ellenére, hogy kifejezetten a PIC18 eszközökön a "de" byte-ot ír le, az align==word, így feltölti még egy nullával. Ugyanúgy a 3 is páratlan, tehát hiába szabdalom szét a 3 bájton lehírható értéket L, H és U részre, szintén feltölti nullával.
Az első problémára a megoldás pl.:
eedata de DefaultValue1, DefaultValue2
Data1 equ eedata
Data2 equ eedata+1 stb.
Erre azért van szükség, mert az adatokat nem csak beleírom az eepromba, hanem hivatkozni is szoktam rájuk. ;)
(No comment)

Megoldás a code_pack, ami csak relokálható esetben használható. Az align direktíva nem létezik.

A kérdés:
Létezik-e kultúrált megoldás byte elhelyezésére?

(Minden olyan válasz, amely arra irányul, hogy írjak relokálható kódot, használjak java-t meg xml-t, vagy apache webszervert - számomra nem elfogadható! :)))

Network Processor (ezchip, broadcom, LSI, stb) programozas?

Sziasztok!

Probalok beletanulni egy uj teruletbe, a network processor programozasba.
Talaltam is egy konyvet a temarol, bar nem tul friss, de az elmeletre jonak tunik.
Nade a gyakorlatban?
Maguk a kutyuk persze nagyon dragak, es nem lehet csak ugy venni egyet probalgatni, de hogy az SDK-t, emulatort nem lehet letolteni, azon azert csodalkozom! (vagy csak nem jottem meg ra hogyan kell, ezert ez a topic.)
Hany java, .net, android, ios* programozo lenne, ha nem lenne ingyen (*:olcson) letoltheto sdk, ide, runtime? Miert jo egy cegnek nem kiadni ezeket az eszkozoket, mikor valojaban a hardware eladasbol elnek, es minel tobben fejlesztenek az o cuccukra, annal tobbet tudnak eladni?

Szerintem sokaknak nagyon tetszene a tema amugy, nagyon alacsony szintu assembly nyelveken kell nagyon tomor programokat irni, hogy a sokgigabites forgalmat fel tudja dolgozni csomagvesztes nelkul. Mint a regi szep idokben :-)