Quote (daneeka10 @ 15 Jun 2015 13:42)
Szoktam látni olyanokat, hogy ilyen-olyan érzékelőkhöz adott "gyári" libraryket pofozgatnak assembly en azt 40x gyorsabb lesz meg ilyenek.
Vagy pl. egyszerű port olvasás atmel cuccokon 10x gyorsabb lesz ha mondjuk valami "digitalRead(pin9)" szerűség helyett (de akár az eggyel hardverközelibb PORT, TRIS stb. helyett is)inline assemblybe tolod.
Meg regen ilyen gazdinfosokkal azon poenkodtunk hogy allashirdetesekben ha valahova oda volt irva hogy assembly akkor azok helyből legalabb 5x annyit kerestek.
Annál hardwareközelibb nincs, amikor beírod, hogy
Code
IN r16, PINC
Az hogy itt nem azt írod, hogy
Code
IN 0x10, 0x13
csak egy szöveges behelyettesítés.
Amelnél meg c-ben minden szívfájdalom nélkül leírhatod, hogy
Code
uint8_t x;
x = PINC;
De ha nagyon durván akarsz programozni, akkor írhatod felőlem gépi kódban is.
Az előbbi részlet gépi kód utasítása
"1011 0AAd dddd AAAA", ahol a számok az IN parancsot jelölik, a "d"-k a regiszter értékét ahová beolvasol, az "A" pedig azt, ahonnan.
Szóval akkor itt a 0x10-es registerbe olvasás 0x13-as helyről (mappelve van szóval ez valójában 0x33, de így rövidítenek, hogy beleférjen minden a 16 bitbe)
Code
1011 0011 0000 0011
Ennél hogy lennél gyorsabb?
Egyébként atmelből nyugodtan kérdezz, dolgozom egy atmeles mikroprocesszor szimuláción PC-re. Már simán lehet rajta az atmegákra írt programokat futtatni, a hex fájlt dolgozza fel.
Csak most éppen átstruktúrálás alatt van, hogy gyorsabban fusson. Meg sok favágó munka is van vele, nincsenek kitöltve az alapértelmezett értékeke meg ilyenek. Az geciunalmas és kurvanagy munka.
Amúgy ilyeneken lehet esetleg ügyeskedni, hogy x-et nem írod ki a memóriába, hanem a regiszterekben tartod, de ezekre általában a fordító is jól optimalizál, szóval nem rakja ő ki oda, ha nem muszáj, de ilyen apró tweakeket meg sem érzel.
Egyébként az avr assembly az elég egyszerű (mivel egy RISC processzor).
Esetleg akkor lehet értelme ilyennel foglalkozni, ha ki akarod gyomlálni a neked nem kellő dolgokat egy zárt forrásból, ahol csak az assembly rész áll rendelkezésedre.
Bár nem tudom ez mennyire lehet általános dolog. Szerintem nem nagyon.
Assemblyt inkább ott tudnék elképzelni, ahol egyedi célprocesszorról van szó, és nemes egyszerűséggel nincs is hozzá fordító, és párezer sorért nem is csinálnak.
This post was edited by CyberPunk666 on Jun 15 2015 06:28am