Tuli mieleeni kysyä, että onko Lazaruksessa tukea io-portin luennalle muuta
kuin 8-bittisenä? Tiedän kyllä tämän x := port[0x378]; tavan hoitaa portista luku,
mutta nyt pitäisi lukea 32-bittisiä lukuja portista. Kyllähän tämä tuolla 8-bit tavallakin hoituu, mutta olisi tehokkaampaa saada luetuksi vähän isommissa paloissa. Mitenkä asm-upotus menee?
kuin 8-bittisenä? Tiedän kyllä tämän x := port[0x378]; tavan hoitaa portista luku,
mutta nyt pitäisi lukea 32-bittisiä lukuja portista. Kyllähän tämä tuolla 8-bit tavallakin hoituu, mutta olisi tehokkaampaa saada luetuksi vähän isommissa paloissa. Mitenkä asm-upotus menee?
Vastaukset 16
Vanhimmat
Lukemalla 4 tavua kerrallaan ja pyörittelemällä bittejä...?
Pascal tarjoaa monia mahdollisuuksia pyöritellä bittejä.
Joitakin esimerkkejä löydät:
http://wiki.freepascal.org/Bit_manipulation
Tuo on kömpelöä. Normaalisti on operaattorit >> ja <<
Ehkä kannattaa valita käyttötarkoituksiin sopivampi työkalu.
Noita vastaavia käskyjä on Pascal:ssa SHR ja shl.
>> on nopeempi kirjottaa kuin shr
Mutta jos on mekaaninen kytkin mustilla kytkimillä, shr on nopeampi, lisäksi jos vielä aurinko on hitusen vielä päivän puoella shr on vielä nopeampi, paitsi jos sataa vettä.
Mahtaako lazarukseen mitään asm-koodia saada upoteltua...
Saa katso vaikkapa
http://wiki.freepascal.org/Lazarus_Inline_Assembler
Se miten luetaan riippuu prosessorista. Esim. Free Pascal:ssa on tuettuna noin 200 eri ARM prossua. Lisäksi on esim. Intel 86 johdannaiset ymv. Eri prossuilla voi olla erilainen i/o. Ehkäpä tässä tapauksessa prossu kohtaisen assy koodin upottaminen olisi jokin ratkaisu
Juuri tätä itse asiassa hain. Kun vertaa tuota esimerkin assemblerin tasoa siihen, mitä löytyy esim. linuxin io.h:sta c:ssä, on ero melko järkyttävä. Tästä syystä mm. olen siirtymässä kokonaan pois c:n käytöstä ja kohti Lazarusta. Se nyt vaan sattuu toimimaan useammalla tasolla selkeämmin kuin c. Nytpä saan sen hw-tuen täydennettyä! Ei asm koskaan taida portattavaa ollut - ainakaan luettavana. Helpompi kuitenkin lukea _selkeää_ assembleria sen porttauksen toteuttamiseksi, varsinkin kun toteutettava toiminnallisuus on kuvatta kommenteissa Pascal:lla.
Kuullostaa kyllä silti siltä, että teet jotain väärin. Mikähän laite siellä portissa mahtaa olla? Normaalisti kun tehdään pipe eikä hinkata mitään matalantason juttuja.
Itse rakentamani AVR-kontrolleri, joka ottaa vastaan 32-bittistä dataa siirtorekisterin kautta. Tällä tavalla saan optimoitua tiedonsiirron laitteiden välillä 1 asm-käsky/32bittiä dataa. Lisäksi kun tuohon ottaa DMA:n mukaan, on prosessorikuorma melko vähäinen. Tällä hetkellä se kerää mittausdataa nopeudella 1mbit/s prossukuorman ollessa vanhalla 120MHz penalla n. 35%.
Suorituskyky ei ole yleensä ikinä minkäänlainen ongelma.
Kyllä se silloin on, kun rakennetaan sen varaan, mitä on saatavilla ilman lupaa ostaa mitään uutta. Kontrolleri kustansi 2,40e ja logiikkapiirit siihen päälle kokonaisuudessaan jäi hyvinkin alle kympin. Ajaa asiansa. Korvaa laitteiston, jonka hintalapussa on liian iso luku johtuen nykyisestä hurjasta kehityksen tahdista. Lopputuloksena on onnistuttu rakentamaan lukitusmekanismi hinnoille, jolla pienempiä ongelmia ei enää pystytä ratkaisemaan halvalla. Siispä päivitysrumbasta on luovuttu ainakin vuosikymmeneksi ja tilalle on astunut tekniikan korvaaminen vähän avoimemmalla tekniikalla - ilman turhia välistä vetäjiä. Miksi käyttää tekniikkaa, joka pystyy n. 10ns tarkkuuteen, kun vaadittu tarkkuus on luokkaa 0,1s.
"Kontrolleri kustansi 2,40e ja logiikkapiirit siihen päälle kokonaisuudessaan jäi hyvinkin alle kympin. Ajaa asiansa."
Kerrotko mistä ostit ja mitä? Kiinnostaa.
"Korvaa laitteiston, jonka hintalapussa on liian iso luku johtuen nykyisestä hurjasta kehityksen tahdista."
Ei nyt kuullosta miltään hurjalta kehityksen tahdilta kun on joku vanha Pentium siinä käytössä.
"Lopputuloksena on onnistuttu rakentamaan lukitusmekanismi hinnoille, jolla pienempiä ongelmia ei enää pystytä ratkaisemaan halvalla."
Nykypäivänä tietoteknisten ongelmien ratkaisu on hyvin halpaa kun uuden tietokoneenkin saa muutamalla kympillä ja ohjelmat maksutta.
"Siispä päivitysrumbasta on luovuttu ainakin vuosikymmeneksi"
Miksi niitä pitäisi päivittää?
No näitä tuli käytettyä:
http://www.futurlec.com/ICAtmel.shtml
-tarkemmin sanoen se oli tuo mega 168, eli arduinon serkku
-noissa tinyissä olen myös 2313:sta käyttänyt, se on 0,95 dollarin hinnalla
sopivan halpa - jos ei tarvita AD-muunninta siis. Silti siinä on rs232/spi/i2c, millä pärjää jo pitkälle. Ja jos loppuu nastat, niin näitähän saa laitettua levyllä vaikka kaksi!
Laitemyyjät haluavat myydä tuon penan tilalle jo jotain uudempaa - ei siis onnistu enää ostaa "vanhaan" uutta korttia vaan pitäisi päivittää koko järjestelmä. Ja edelleenkin se 0.1s reagointitaso riittää, eikä uudelle luvattu 10ns tulisi edes käyttöön. Ohjaussofta on tehty aikanaan Delphillä.