I/O-porttien käsittely

k00dr

Löytyykö C:n standardikirjastoista mitään keinoa I/O-porttien suoraan käsittelyyn? Jos haluan lukea tai kirjoittaa dataa johonkin tiettyyn I/O-osoitteeseen niin miten se onnistuu C:llä? Haen tässä nyt lähinnä jotain vastaavaa kuin IN- ja OUT-komennot x86-assemblyssa... Osaako kukaan vastata?

7

842

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • phj

      Jos IO-osoite on tiedossa voi määritellä

      /* 8-bit kirjoitus/luku
      x86:ssa lisämääreitä near ja far -> etsi vaikkapa kääntäjän manuaaleista
      */
      volatile char *pIOMem = (char *)0x(Muistiosoite hex);

      Portin luku:
      char mem = *pIOMem;

      Portin kirjoitus:
      *pIOMem = mem;

      Edellinen toimii jos käytössä ei ole käyttöjärjestelmä, joka käyttää Virtual Memoryn kaltaista muistinkäsittelyä.

      Esim. Windows tuntee funktion virtualAlloc, jonka avulla voi varata muistialueita VM:n ohi. Linux:sta löytynee jokin vastaava (?).

      • k00dr

        Juu tuo on jo hyvin lähellä sitä mitä ajan takaa, mutta vielä yksi ongelma: x86-tyyppisissä prosessoreissa on käsittääkseni kaksi rinnakkaista osoiteavaruutta, toinen varsinaista muistia varten ja toinen I/O-portteja varten. Joten miten kerrotaan kääntäjälle että pointterilla pIOMem halutaan viitata nimenomaan I/O-avaruuteen eikä tavalliseen muistiin?


      • phj
        k00dr kirjoitti:

        Juu tuo on jo hyvin lähellä sitä mitä ajan takaa, mutta vielä yksi ongelma: x86-tyyppisissä prosessoreissa on käsittääkseni kaksi rinnakkaista osoiteavaruutta, toinen varsinaista muistia varten ja toinen I/O-portteja varten. Joten miten kerrotaan kääntäjälle että pointterilla pIOMem halutaan viitata nimenomaan I/O-avaruuteen eikä tavalliseen muistiin?

        Taisipa olla mahdoton tehtävä standardi c:lle.

        Tuolla on jotain pientä I/O-avaruuden käsittelystä:

        http://www.ecos.sourceware.org/ml/crossgcc/1999-q1/msg00230.html

        Lopputulos on allaolevan mukainen eli asm-käskyjen ymppääminen c-koodiin.


    • usdhisfdh

      mikä estää käyttämästä inline assemblya porttien käpistelyyn

      • k00dr

        No periaatteessa ei mikään :) Pohdinkin tässä nyt oikeastaan vain sitä, miten matalalla tasolla laitteistoa voi käsitellä pelkän C-kielen voimin, ja onko joissakin tapauksissa assemblyn käyttäminen ainoa vaihtoehto. En siis nyt etsi ratkaisua mihinkään käytännön ongelmaan.


      • on se joka

        kellistää yritykset suoraan porttien manipulointiin.


      • ratakaisu-
        on se joka kirjoitti:

        kellistää yritykset suoraan porttien manipulointiin.

        Jotkut ovat jo ratkaisseet ongelma. Tässä eräs keino.
        http://www.beyondlogic.org/porttalk/porttalk.htm

        Wintoosa on kyllä pirun hankala ympäristö oman laiteohjaimen kirjoittamiselle, en suosittele. Jokin tällainen apusysteemi millä annetaan ohjelmalle oikeudet käsitellä portteja tai valmis DLL jonka kirjastojen avulla voi tehdä osoitusket on parempi.


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Räppäri kuoli vankilassa

      Ei kuulemma ole tapahtunut rikosta. Sama vahinkohan kävi Epsteinille. https://www.hs.fi/suomi/art-2000011840869.html "
      Maailman menoa
      87
      4028
    2. Välillä kyllä tuntuu, että jaat vihjeitä

      Mutta miten niistä voi olla ollenkaan varma? Ja minä saan niistä kimmokkeen luulemaan yhtä sun toista. Eli mitä ajatella
      Ikävä
      24
      2891
    3. No kyllä te luuserit voitte tehdä mitä vaan keskenänne, sitä en ymmärrä miksi pelaat,nainen

      Pisteesi silmissäni, edes ystävätasolla tippui jo tuhannella, kun sain selville pelailusi, olet toisen kanssa, vaikka ol
      Ikävä
      45
      2310
    4. Missä näitte viimeksi?

      Missä näit kaivattua viimeksi ja oliko sähköä ilmassa?
      Ikävä
      34
      1311
    5. Puukotus yöllä

      Oli kaveri hermostunut ja antanut puukosta.
      Sotkamo
      10
      899
    6. Mitä sun kaltainen ihminen tekee tämmöisessä paikassa?

      Et kuulu tänne?
      Ikävä
      131
      875
    7. rakas J siellä jossain

      Niin ikävä sua. -P. Nainen
      Ikävä
      6
      844
    8. Masan touhut etenee

      Punatiilitalon tietotoimiston mukaan Masa on saanut viimein myytyä kämppänsä ja kaavoittaa uudelle lukaalille tonttia pa
      Äänekoski
      12
      811
    9. Naisten ja miesten tasoeroista

      Oletteko huomanneet, että naisissa ylemmän tason naiset ovat sinkkuja, ja miehissä alemman tason incelit? Toimivat paris
      Ikävä
      124
      756
    10. You've been running and

      so has your mind, I'm thinking of you all the time... 💘
      Ikävä
      11
      750
    Aihe