Huipputarkka ajastin?

Performancetimer suck

Pitäisi tehdä ohjelma joka ajaa koodinpätkän 100 mikrosekunnin välein eikä saa missata kertaakaan. Mahdollista winkkarilla?

14

967

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • sdaaads

      visual basic 2010 - timer objektilla hoituu

      • nn....

        Tehokkaimmillaankin Visual Basic kurat taitavat kyetä vain yhteen millisekuntiin. Sama tosin koskee muitakin ohjelmointikieliä, alustoista puhumattakaan. Keksin jo tavan hyödyntää koodia, jos sellainen olisi mahdollista luoda.


    • VB sucks big time

      NT-käyttiksissä (XP, Vista, Seiska...) säikeiden ajanvarausmekanismin vuoksi, Windows CE:ssä onnistuisi.

    • t5h45h

      Eikös Toosassa ajovuorot ole millisekunnin luokkaa? Asettamalla säikeelle korkeimman prioriteetin reaaliaikaisuus tietysti paranee, mutta loppuviimeksi ajurit voivat senkin blokata.

    • Anonyymi

      Ei ole! Windows tahmaa ja nykii, tuosta ei tule mitään, vaan 100% kuormitus ja iso windows paska!

      • Anonyymi

        Sinun pääsi on paska.


    • Anonyymi

      Taitaisi vaatia reaaliaikajärjestelmän onnistuakseen - mikään työpöytä-käyttöön tehty ei taida kelvata. Timer-keskeytykset on yleensäkin HW-keskeytyksiä, mutta eivät kuitenkaan maksimi-prioriteettia ja niitä voi olla pinossa useampi palveltavaksi samalla ajanhetkellä joten ei melko varmasti onnistu, mikäli tulee yksikään korkeamman prioriteetin keskeytys väliin. Toisekseen, jotkin keskeytysajurit tuottavat 100ms:n vasteajan ts. käyttöjärjestelmä voi pitää noinkin pitkän tauon muiden keskeytysten palvelussa. Eli käyttöjärjestelmää pitäisi kirjoittaa uudestaan saadakseen tuon toimimaan.
      Jotain yksinkertaista saattaa pystyä tekemään, kuten kasvattaa laskuria tai ottaa ad-muuntimelta sample talteen.
      Vaihtoehto: Kiellä keskeytykset ja aja busy-loopissa timer-pollia esim. cpu:n kellosykli-laskurilla jos sellainen on tarjolla.

    • Anonyymi

      Tuollaisessa käytetään reaaliaikajärjestelmää, ei Windowsia.

      Halvin ilmainen mikä ehkä voisi sopia tähän olisi Debian ja valitsee siitä päälle -rt kernelin. Sillä ehkä onnistuu 100mikrosekunnin tarkkuus kun aikakriittiselle jutulle varaa oman CPU-ytimen ja muistin mitä mikään muu ei sotke. En tiedä miten keskeytykset saa suljettua pois tuosta mutta tutkimalla selvää.

      Mutta, se ei ole turvallisuuskriittisiiin juttuihin että tästä puuttuu tarvittavat sertifioinnit. Ne mitkä sopivat turvallisuuskriittisiin juttuihin maksavat sitten paljon mutta tuo Debianin reaaliaikakerneli riittää kyllä pörssiroboteille.

      • Anonyymi

        Debianilla ei onnistu mikään, täysi paska.


    • Anonyymi

      Windowsissa on hires timer mutta vaatii yhde parametrin muuttamisen jotta päästään suurempaan resoluutioon.

      Asiasta riippuen aikakriittisiä juttuja ei yleensä tehdä yleiskäyttiksillä kuten Wondows tai Unix/Linux vaan jollain sulautetulla missä on joko realiaikakäyttis tai ei käyttistä ollenkaan. Nuo sitten juttelee yleiskoneen kanssa vaikka USB:llä.

      • Anonyymi

        Tuollaista 0.1ms ajastuasta on tullut tehtyä mm. 8bittisellä arduinolla mikä lukee AD-muunninta ja laskeskelee signaalista kaikenlaista. Toki 32-bittisellä arduinolla tai vaikka NodeMCU:lla potkua on enemmän.


    • Anonyymi

      Tuo on 10 kHz:n taajuutta vastaava lukema. Aikanaan äänikortilla pystyi saamaan keskeytyksen sen oikein konfiguroituaan tuossa tahdissa ja AD-muuntimelta arvon talteen. Tarkka keskeytystaajuus riippuu lähinnä äänikortista - pystyykö äänipiiri sitä käyttämään. Keskeytystä voi sitten käyttää haluamallaan tavalla - ei ole pakko ottaa sampleja talteen vaan voi käyttää korttia ajastimena omalle keskeytykselle. Osa äänikorteista jatkaa hommaa jopa non-stop moodissa eli keskeytyksiä tulee siihen asti kunnes ne estetään. Nykyiset äänikortit, joille annetaan digitointitaajuus ja puskuri talletusta varten eivät tällaiseen toimintaan kylläkään kelpaa - pitää olla esim. vanha sound blaster yms. joka kykenee pelkkään digitointiin.

    • Anonyymi

      voisit käyttää DMA-direct memory access, laskuria lukemassa muistinpäivitys arvoakin eli milloin DMA-0 on missäkin muistiosoitteessa menossa.

      itse... kun ehkä voisin parantaa erästä ASM-koodia, yritän etsiä Intelin hyväksytyt sekä Microsoftin että minkälaisia prosessorin rekistereitä tukevat aivan suoraan _asm - koodilla inline in C, Visual Studio.

      Ja pitää muistaa laittaa merkki c-kääntäjälle tai olkoon vaikka MFC-koodia, niin joku assembly-pätkä että_ DO Not optimize this is volatile assembly code.

    • Anonyymi

      heitän jonkin koodin pätkän pastean, eli miten assemblyllä kohdellaan keskusyksikön rekistereitä, vanha versio tuista, mutta niin: näin esim:
      Minn koodia:

      _asm {
      // push ds
      mov eax,jaettava
      mov ebx,jakaja
      mov ecx,howmany
      mov edx,0
      lds esi,dbuf
      mov edi,0
      mov tempword,0
      jmp first
      mainloop:
      // --------------------------
      //mov tempword,0
      push eax
      mov eax,[esi-4]
      mov tempword,eax
      pop eax
      // --------------------------
      first:
      push ecx
      // montako kierrosta
      mov ecx,777
      mainloopw:
      push ecx
      loop0:
      cmp eax,ebx
      jnc over2
      push ecx
      mov edx,10
      mul edx
      pop ecx
      cmp eax,0
      jnz over3
      mov eax,7
      over3:
      jmp loop0
      over2:
      push eax
      mov edx,0
      loop1:
      cmp eax,ebx
      jc over4
      sub eax,ebx
      inc dx
      jmp loop1
      over4:
      pop eax


      push eax
      mov eax,0
      mov ecx,edx
      multiply:
      add eax,ebx
      loop multiply
      mov ecx,eax
      pop eax
      sub eax,ecx
      cmp edi,0
      jp over0
      sub ebx,edx
      jmp over1
      over0:
      add ebx,edx
      over1:
      cmp eax,0
      jnz over5
      add eax,edx
      over5:
      pop ecx

      push ecx
      shl cx,1
      push eax
      mov eax,edx
      cmp eax,ecx
      jnc overdiv
      div ecx
      overdiv:
      xor tempword,eax
      pop eax
      pop ecx

      inc edi

      loop mainloopw

      push eax
      mov eax,tempword
      mov [esi],eax
      inc esi
      inc esi
      inc esi
      inc esi
      pop eax

      pop ecx

      dec ecx
      cmp ecx,0
      jnz mainloop
      // pop ds

      mov jaettava,eax
      mov jakaja,ebx
      }

      return 0;
      }

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

    Luetuimmat keskustelut

    1. Saisinpa halata sinua joka päivä

      ja kertoa miten paljon sinusta välitän. Vaikka olisi jommalla kummalla huono päivä, väsynyt päivä tai kiireinen päivä, a
      Ikävä
      67
      7560
    2. Nykymiehet odottaa, että nainen lähestyy?

      Perus luonnonlaki menee päinvastoin! Oletko nähnyt luontodokkaria jossa naaraat juoksee uroksien perässä??? 🦁🫎🦍🐒🦦�
      Ikävä
      242
      6468
    3. Me työeläkeläiset äänestämme SDP:tä

      SDP on luonut koko työeläkejärjestelmän, jonka hedelmistä saamme nyt nauttia. Kansaneläkelaitos on Maalaisliiton tekele,
      Maailman menoa
      87
      4624
    4. Kolmen tuiki tavallisen demariahdistelijan nimet julki

      Nyt tiedetään ketkä kolme oli niissä niin tavanomaisissa demarin jokapäiväisissä askareissa avustajia ahdistelemassa. K
      Maailman menoa
      109
      3838
    5. Eikö tunnukin kamalalta, kun en

      anna periksi vaikka parhaasi olet tehnyt antaaksesi täystyrmäyksen? Ja kyllähän minä monta iskua olen saanut ja maannut
      Ikävä
      67
      3141
    6. Sannahan laski sähkön ALV:n 10 prosenttiin, Riikka runnoi 25,5 %:iin

      Tässäkin nähdään kumpi on Suomen kansan puolella, ja kumpi omaa vastaan. Putinistipersuille Suomen kansa tulee aina vii
      Maailman menoa
      74
      2976
    7. Kansalaispalkka ja maksuton joukkoliikenne

      Noilla pienillä parannuksilla saadaan Suomesta taas hitusen parempi paikka peruskansalaiselle, joka elää ekologisesti ja
      Maailman menoa
      129
      2672
    8. SDP:n selitykset ontuu pahasti - "On käsitelty heti, mutta kukaan ei tiedä"

      Kokoomuslaiset pistää taas demareita nippuun. Tuppuraisen mukaan mukaan SDP:n useat ahdistelutapaukset on käsitelty het
      Maailman menoa
      34
      2118
    9. Antti Lindtman: "Ainahan kaikenlaisia huhuja liikkuu"

      Näin hän siis vastaa SDP:n häirintäkohuun, väistelee vastuutaan Juttuhan on niin, että Lindtman ja Tuppurainen on tasan
      Maailman menoa
      62
      1957
    10. Muistattekos kun kaupassa piti pyytää tavarat myyjältä

      Edes kahvipakettia ei saanut itse valita, vaan myyjä nouti sen hyllystä tiskille. Jos osti jauhelihaa, niin se jauhettii
      Maailman menoa
      259
      1892
    Aihe