[C++] DLL, wat moet ik includen voor delay_us?

Pagina: 1
Acties:

  • robbertb
  • Registratie: September 2000
  • Niet online
Ik ben bezig met een DLL te schrijven in C++ die ik in andere ontwikkelomgevingen wil gebruiken. Alleen moet ik hiervoor ook een hele kleine pauzes kunnen maken. Ik kan hiervoor delay_us() gebruiken. Maar als ik dat toevoeg aan mijn dll dan krijg ik de melding:
code:
1
delay_us' : undeclared identifier

Dus kennelijk moet ik nog een bibliotheek importeren. Maar welke?
Ik kan het niet vinden op Google/GoT :(

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 01-05 13:23
Wat ik kan vinden op internet is alleen maar zelf geschreven functies. Weet je zeker dat het een C++ functie is?

En zaken zoals sleep werken niet in C++?

  • robbertb
  • Registratie: September 2000
  • Niet online
Postman schreef op 29 oktober 2004 @ 02:29:
Wat ik kan vinden op internet is alleen maar zelf geschreven functies. Weet je zeker dat het een C++ functie is?

En zaken zoals sleep werken niet in C++?
Nou veel ervaring in C++ heb ik niet.. maark wam toch wel wat programmas tegen waarin het stond.
Ik heb gewoon een pauze nodig die op zn kleinst een microseconde kan zijn. Daarvoor leek me delay_us handig

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Volgens mij (maar ik ben ook niet zo'n C++-er) is delay_us alleen beschikbaar onder Linux (en ik ben ook geen die-hard linux-er ;) ), de windows API weet in ieder geval van niks, da's een ding dat (bijna :? ) zeker is. Je zou het zelf kunnen schrijven natuurlijk (of via Google ergens effe "afkijken"...)

Overigens, wel belangrijk om te weten is dit: [rml].oisyn in "hoe hele kleine pauze maken van 1µs..."[/rml]

Ik zou overigens die hele draad eens nalezen, is erg interessant (op her en der het gebruikelijke offtopic geneuzel na ;) ) en de enige juiste oplossing in mijn ogen is dan ook [rml]Knutselsmurf in "hoe hele kleine pauze maken van 1µs..."[/rml]

[ Voor 75% gewijzigd door RobIII op 29-10-2004 03:31 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

RobIII schreef op 29 oktober 2004 @ 03:12:
Ik zou overigens die hele draad eens nalezen, is erg interessant...
Ik vermoed dat ie dat al deed. TS van dit draadje en het draadje waar jij naar refereert is namelijk dezelfde :)

Maar ik moet je gelijk geven: delays van een µs met voldoende nauwkeurigheid in software doen op Windows of whatever non-realtime OS lijkt me toch vrij moeilijk; een stukje extra hardware kan dan misschien helpen.

Weet je trouwens zeker dat je delay_us ergens in een library kunt vinden waarmee je kunt linken? Ik ken de functie in ieder geval niet dus ik denk niet dat ze uit standaard C/C++ afkomstig is. Ik weet niet welke ontwikkelomgeving jij precies gebruikt, maar als ik met google eens ga zoeken op delay_us zie ik dat vaak in headers staan die meestal heel sterk microcontroller gerelateerd zijn...

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15-05 06:45
Even voor de volledigheid: onder non-Windows systemen kun je usleep proberen. Wat ingewikkelder, maar een POSIX-standaard (en dus supported onder UNIX, Linux, MacOS-X, etcetera) is nanosleep. nanonsleep heeft ook een 1000 keer hogere resolutie (nanoseconden i.p.v. microseconden).

Als milliseconden genoeg zijn kun je onder Windows gewoon Sleep gebruiken (erg goede ontwerpkeuze, als je het mij vraagt, want dat is bijna altijd goed genoeg). Hoe je onder Windows hogere resolutie kan halen weet ik niet; misschien iets met QueryPerformanceCounter in een busy loop.

Denk er trouwens aan dat hogere resolutie maar een beperkt nut heeft. Het OS levert alleen garanties over de minimumtijd dat je proces zal wachten. Voor zover ik weet alloceren besturingsystemen in principe hele timeslices van enkele tientallen milliseconden aan processen, dus proberen om minder dan een timeslice te suspenden heeft waarschijnlijk weinig zin. Als je zulke kleine pauses in wil lassen, kun je dat beter binnen je proces regelen (zoals gezegd dus met een busy waiting loop).

  • robbertb
  • Registratie: September 2000
  • Niet online
RobIII schreef op 29 oktober 2004 @ 03:12:
Volgens mij (maar ik ben ook niet zo'n C++-er) is delay_us alleen beschikbaar onder Linux (en ik ben ook geen die-hard linux-er ;) ), de windows API weet in ieder geval van niks, da's een ding dat (bijna :? ) zeker is. Je zou het zelf kunnen schrijven natuurlijk (of via Google ergens effe "afkijken"...)

Overigens, wel belangrijk om te weten is dit: [rml].oisyn in "hoe hele kleine pauze maken van 1µs..."[/rml]

Ik zou overigens die hele draad eens nalezen, is erg interessant (op her en der het gebruikelijke offtopic geneuzel na ;) ) en de enige juiste oplossing in mijn ogen is dan ook [rml]Knutselsmurf in "hoe hele kleine pauze maken van 1µs..."[/rml]
Dat had ik inderdaad al gedaan, maar toch blijf ik erbij dat het moet kunnen en dat een extra chip niet nodig is. Dit omdat er al programmas geschreven zijn in o.a. delphi die kennelijk die pauzes wel kunnen maken.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 08:25

Creepy

Tactical Espionage Splatterer

robbertb schreef op 29 oktober 2004 @ 12:20:
[...]

Dat had ik inderdaad al gedaan, maar toch blijf ik erbij dat het moet kunnen en dat een extra chip niet nodig is. Dit omdat er al programmas geschreven zijn in o.a. delphi die kennelijk die pauzes wel kunnen maken.
Precies zijn die nooit. Pauzes < 10 milliseconden zijn nagenoeg altijd busy loops. Op het moment dat je een sleep/msleep/usleep/whatever doet, en dus je timeslice opgeeft kom je op z'n vroegst 10ms later weer aan de buurt (onder een Windows NT variant that is.).

Met pre-emptive multitasking kan je nooit tot op de microseconde nauwkeurig timen in userspace aangezien de kernel bepaalt welk process wanneer welke tijd krijgt. Daarom heet het pre-emptive multi-tasking ;)

Als je echt ergens zulke timing voor nodig hebt dan zul je met een externe processor o.i.d. moeten gaan werken. Of een realtime OS.

Ik heb wat gedaan met LCD (kassa display's enzo) aansturing via de PC. Daar heb je ook delay's voor nodig van een aantal microseconden. Deze delays deed ik met een loop m.b.v QueryPerformanceCounter in Windows en m.b.v. GetTimeOfDay() onder Linux. Met LCD's is de timing niet zo strak en maakt het niet uit als je delay's wat langer zijn (lees: enkele milliesecs i.p.v. microsec)

[ Voor 4% gewijzigd door Creepy op 29-10-2004 13:13 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • robbertb
  • Registratie: September 2000
  • Niet online
Ik blijf erbij dat een realtime OS of externe pic niet nodig is.
Omdat er, zoals ik al vaker heb gezegd, voor wat ik wil (temp uitlezen door maxim 1 wire chip), er al werkende exe files te downloaden zijn.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
robbertb schreef op 29 oktober 2004 @ 15:54:
Ik blijf erbij dat een realtime OS of externe pic niet nodig is.
Omdat er, zoals ik al vaker heb gezegd, voor wat ik wil (temp uitlezen door maxim 1 wire chip), er al werkende exe files te downloaden zijn.
En dan blijf ik, en anderen denk ik ook, er bij dat die "andere programma's" niet precies timen op de microseconde. Het is al erg vaak gezegd; wellicht komt de timing niet zo nauw en moet je dat gewoon eens gaan proberen? Dat heb ik je namelijk nog niet zien doen.

Kijk, dat je niet sneller dan 1microseconde die signalen achter elkaar mag sturen, da's niet zo moeilijk te voorkomen. Maar om dan precies een microseconde daarna het volgende te versturen... Is het werkelijk zo'n ramp als het iets langer is?

[ Voor 21% gewijzigd door RobIII op 29-10-2004 16:28 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • robbertb
  • Registratie: September 2000
  • Niet online
RobIII schreef op 29 oktober 2004 @ 16:26:
[...]

En dan blijf ik, en anderen denk ik ook, er bij dat die "andere programma's" niet precies timen op de microseconde. Het is al erg vaak gezegd; wellicht komt de timing niet zo nauw en moet je dat gewoon eens gaan proberen? Dat heb ik je namelijk nog niet zien doen.

Kijk, dat je niet sneller dan 1microseconde die signalen achter elkaar mag sturen, da's niet zo moeilijk te voorkomen. Maar om dan precies een microseconde daarna het volgende te versturen... Is het werkelijk zo'n ramp als het iets langer is?
Volgens de specificaties zou het in het begin max een microseconde moeten zijn.
Ik heb het al geprobeerd, maar dan in VB. Ik wil het nu in C proberen aangezien ik nu meer ervaring heb in C wil ik dat weer oppakken.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 08:25

Creepy

Tactical Espionage Splatterer

Precies. Die timings voor dat soort zaken liggen niet zo precies. De delay's bij temp sensors doe je of met een busy loop of met een sleep (die minimaal een aantal millisecs is). Niks aan de hand. Zo doen al die andere progs dat ook

RobIII: die etxra tijd wachten voordat je weer data stuurt is helemaal niet erg zelfs. ;)

Robbertb: nee, die externe pic of een realtime OS is alleen nodig als je voor de volle 100% aan die timings wilt houden. Anders oplossen met een sleep() of een busy loop (net als die andere progs het ook doen.)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 08:25

Creepy

Tactical Espionage Splatterer

robbertb schreef op 29 oktober 2004 @ 19:45:
[...]

Volgens de specificaties zou het in het begin max een microseconde moeten zijn.
Ik heb het al geprobeerd, maar dan in VB. Ik wil het nu in C proberen aangezien ik nu meer ervaring heb in C wil ik dat weer oppakken.
Ik gok dat je bedoelt: MIN. een microseconde. En als het MAX 1 microsec is dan zal er geen minimale tijd zijn en heb je die delay dus niet nodig.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • robbertb
  • Registratie: September 2000
  • Niet online
Creepy schreef op 29 oktober 2004 @ 19:48:
[...]

Ik gok dat je bedoelt: MIN. een microseconde. En als het MAX 1 microsec is dan zal er geen minimale tijd zijn en heb je die delay dus niet nodig.
Nee dat bedoel ik dus niet. In het pdf van de chip staat wat je moet doen om de chhip aan te sturen en bij de initialisatie las ik ergens dat ik in begin een bepaalde waarde moet sturen die slechts 0.25-1 microseconde mag duren. Voor de andere waardes die ik op de poort moet zetten zijn grotere intervallen mogelijk.
Heeft iemand dan een voorbeeldje waarmee ik het beste kan werken?

En in VB had ik dus zoiets al geprobeerd... maar toch was VB te traag.

[ Voor 6% gewijzigd door robbertb op 29-10-2004 22:41 ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 08:25

Creepy

Tactical Espionage Splatterer

robbertb schreef op 29 oktober 2004 @ 22:41:
[...]

Nee dat bedoel ik dus niet. In het pdf van de chip staat wat je moet doen om de chhip aan te sturen en bij de initialisatie las ik ergens dat ik in begin een bepaalde waarde moet sturen die slechts 0.25-1 microseconde mag duren. Voor de andere waardes die ik op de poort moet zetten zijn grotere intervallen mogelijk.
Heeft iemand dan een voorbeeldje waarmee ik het beste kan werken?

En in VB had ik dus zoiets al geprobeerd... maar toch was VB te traag.
Heb je een link naar die specs? En via wat voor poort stuur je dat ding aan.
Dit soort timings zijn wel heel erg strak, en voor een PC met een multitask OS nagenoeg niet haalbaar.

Voorbeelden? Right. Een loopje met QueryPerformance counter is vrij simpel zelf te maken dacht ik zo ;) En volgens mij kan je met een beetje zoeken zelfs voorbeelden op GoT en Google vinden. En een een loop met QueryPerformanceCounter is de enige mogelijkheid die in de buurt van dit soort timings komt.

Edit: Ik heb net de specs van 1 zo'n chip (de DS18S20 1-Wire Digital Thermometer). Hierin kom ik minimale timing waarden van 1microsec. tegen waarbij de laagste maximum waarde 15 microsecs is. Dat is te doen met een QueryPerformanceCounter loop

[ Voor 28% gewijzigd door Creepy op 30-10-2004 00:08 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • robbertb
  • Registratie: September 2000
  • Niet online
Maar als ik die perfermancecounter gebruik, dan kan ik dit zeker net zogoed ook gewoon in VB doen of niet?

Ik zie in onderstaande pdf ook niet meer wat ik eerst wel zag (0,25-1 microsec) staan, zal toen wel ander pfd of oudere versie hebben gehad.
Hier hebben ze het over 10 microsec. Maar zie ik ook in plaatje 1 microsec staan.
PDF van de chip:
http://pdfserv.maxim-ic.com/en/ds/DS1820-DS1820S.pdf

Programma de de chip kan uitlezen:
http://www.elektroniikka.org/thermometer/?page=mainpage

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 08:25

Creepy

Tactical Espionage Splatterer

Die maximaal tien microsecs bij "time to strong pull up" is volgens mij iets wat die chip doet nadat je heb een bepaald commando hebt gestuurt ;) De andere timings zijn nog veel losser.

Of je het in VB gaat halen weet ik niet maar ik gok van wel. In een willekeurig ander gecompileerde taal is het zeker goed te doen. Probeer het gewoon in VB, als het dan echt niet lukt vanwege de timing, probeer het dan nog eens in een andere omgeving.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • robbertb
  • Registratie: September 2000
  • Niet online
Creepy schreef op 30 oktober 2004 @ 12:49:
Die maximaal tien microsecs bij "time to strong pull up" is volgens mij iets wat die chip doet nadat je heb een bepaald commando hebt gestuurt ;) De andere timings zijn nog veel losser.

Of je het in VB gaat halen weet ik niet maar ik gok van wel. In een willekeurig ander gecompileerde taal is het zeker goed te doen. Probeer het gewoon in VB, als het dan echt niet lukt vanwege de timing, probeer het dan nog eens in een andere omgeving.
Heb ff een testje gedaan onder vb:
QueryPerformanceCounter minimum resolution: 1/3579545 sec
Dat is dus 28 microsec en dus toch te lang?

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16:18
Reken erop dat het uitvoeren van QueryPerformanceCounter ook tijd inneemt. En waarschijnlijk meer tijd dan die 1 us die jij wil.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
robbertb schreef op 30 oktober 2004 @ 23:31:
[...]

Heb ff een testje gedaan onder vb:
QueryPerformanceCounter minimum resolution: 1/3579545 sec
Dat is dus 28 microsec en dus toch te lang?
Als je nou gewoon eens effe test wat 'ie met die thermometer doet, ipv zinlose tests uit te voeren, dan wist je al veel meer...

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 08:25

Creepy

Tactical Espionage Splatterer

farlane schreef op 31 oktober 2004 @ 02:42:
Reken erop dat het uitvoeren van QueryPerformanceCounter ook tijd inneemt. En waarschijnlijk meer tijd dan die 1 us die jij wil.
Nah.. 1us wil hij echt niet. Dat is namelijk helemaal niet nodig kijkend naar de specs ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • robbertb
  • Registratie: September 2000
  • Niet online
Creepy schreef op 31 oktober 2004 @ 11:09:
[...]

Nah.. 1us wil hij echt niet. Dat is namelijk helemaal niet nodig kijkend naar de specs ;)
1 us is idd niet nodig.
Pagina: 1