|
Hi folks
Currently I am working on a project for accessing IO cards in realtime under windows XP.
My idea is to create a routine which causes an interrupt every 100 microseconds that calls a callback function. This has to be implemented in kernel-space and with interrupts (instead of polling) to garuantee my timings. I thought of a device driver to realize this and read some articles about creating drivers, since I'm quite new to this.
My question is - how can I implement an interrupt which is caused every 100 microseconds. I believe timing should not be the problem, since already worked with the read time stamp counter. But I couldn't realize it without polling (which causes the system to slowdown).
It would be nice if you have any tips for me, because I couldn't find any article about timer interrupts on this site.
Thanks in advance
|
|
|
|
|
You really can't do this in PC code. Just calling QueryPerformance Counter 10 times, and doing NOTHING else, takes 100 microseconds on a 3GHz machine. A PC's high resolution timer and processor just can't keep up with that kind of interrupt rate. Remember, you're running on a SHARED system. The processor will be very busy at critical times during your interrupt handling. So, yes, the entire machine will slow to a crawl if you attempt this.
It's best to leave work at this rate to a seperate processor on some kind of capture board built to handle this, have it collect and buffer the data, then it can send the data to the PC in chunks and at a rate that won't choke the machine.
No, I don't have any articles to show you how to do it.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Well, I have to disagree with that.
Calling QueryPerformanceCounter once takes about 1.26 microseconds on my machine (2,8 GHz).
Calling Read Time Stamp Counter takes even less: 0.03 microseconds.
You can check for yourself with help of this little tool provided by nvidia for benchmarking high resolution timers:
http://developer.nvidia.com/object/timer_function_performance.html
If such interrupts should really be to fast for the processor, how should he handle transfer rates of about 921600 baud (bits per second)?
I already tested such a solution, anyway it's commercial and I wanted to try to realize it for myself.
I checked those timings with an oscilloscope, where I send data in a 100 microseconds intervall and it works without slowing down the OS.
greetings
|
|
|
|
|
quirk_1a wrote: Calling QueryPerformanceCounter once takes about 1.26 microseconds on my machine (2,8 GHz).
Calling Read Time Stamp Counter takes even less: 0.03 microseconds.
Every system is different. Also, not every motherboard even implements a high-resolution timer. And not every implementation is the same. So yeah, your performance may vary. I told you what the result was on the 3GHz Dell I was using.
That timer can count, but it can't fire interrupts. So you still have to poll for the interval you want. And again, polling for something this fast will slow your machine to a crawl...
BTW: Did you also test sampling the data at that rate? Is your data comming from input ports? Those are notoriously slow for taking forever and a day to execute. Try it before you say you can sample at that rate. This was just the timer code. It didn't do any with sampling and storing the data...
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Well, I'm still waiting for the I/O card to be delivered. That's why I only could test sending data on another card.
As I said, I used a demo-version of a so called real-time extension (I may send you a link, if you want to). I know that Windows XP was not made for real-time applications, but the callback-routine is executed on kernel level. Internally the routine is relocated to system memory to allow execution from the real-time context. Therefore I wouldn't say it's running under Windows XP but rather it's running besides Windows XP.
I will try to test sampling data from an input, as soon as I have the chance to. But what I have tested for now (changing to 1 or 0 every 100us) works - although I can't really believe it myself.
There's an option at the oscilloscope allowing me to record the measurement and there's absolutely no deviation regarding the 100 microseconds interval.
-- modified at 5:10 Monday 13th February, 2006
|
|
|
|
|
100usec is too fast for Windows, it is NOT a real time system which is what you need. Even most versions of Linux could not cope easily with this.
The tigress is here
|
|
|
|
|
Quirk said; “accessing IO cards in realtime under windows XP”
Any type of realtime processing under windows XP is an oxymoron. Or as they say in the US state of Maine; “you can’t get there from here”.
[edit]Removed because "you can't there from here"[/edit]
I'm on-line therefore I am.
JimmyRopes
-- modified at 21:28 Sunday 12th February, 2006
|
|
|
|
|
JimmyRopes wrote: Where the timeout is set to 100ms.
In his original post, he's actually looking for 100 microseconds, or 0.1 milliseconds, so even this wouldn't work for him...
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Oops!
It was late last night [doing some marithon system testing] and I misread the original post.
You are absolutely correct, this will not work for a timer interval of 100 microseconds as the minimum timeout resolution is 1ms and not guaranteed to precisely be even that.
I'm on-line therefore I am.
JimmyRopes
|
|
|
|
|
Hello,
I'm coding a small Virtual Desktop Manager for our project needs.
I use Windows Station (WinSta0) and multiple Desktops. I create those
desktops with standard API (CreateDesktop). There is one problem that
I can't understand. How can I delete desktop that I have created by myself? I have tried CloseDesktop-function but it does not remove desktop.
So, how should I remove desktops that I create myself?
Any ideas?
Cheers!
|
|
|
|
|
You can't. Once a Desktop is created, you can't destroy it. The only way to get rid of it is to restart the machine!
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
But what actually happends if you can't delete Desktop and your PC's running Windows uptime is
long and you create lot's of Desktop because of your needes? Is it so, that when resources are finished your PC running Windows crashes?
This sounds wierd.
Is it possible to create own Window Station and inside it Desktops and then delete
Window Station?
Cheers!
|
|
|
|
|
If you try to create a Desktop with the same name, you'll get a handle to the existing Desktop of that name. Windows won't create a new one. There's a reason why you don't see applications creating their own desktops...
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
-- modified at 8:56 Thursday 9th February, 2006
|
|
|
|
|
Hi, in windows explorer we could know the size of file or the size of folder which containt the file. Does any one know about the size of an empty folder that just created?
|
|
|
|
|
if the folder contains no file, then it weights 0 bytes...
same for files with nothing in them, they weight 0 bytes...
(of course, their reference are stored somewhere the user can't access directly on the hard disk...)
TOXCCT >>> GEII power [toxcct][VisualCalc 2.20][VCalc 3.0 soon...]
|
|
|
|
|
toxcct wrote: same for files with nothing in them, they weight 0 bytes...
I agree with notepad file. But for microsoft word file, when you create a blank documetn and save it without type anything or add any thing to the document you will get your file size is 11kb. Try to test it in your machine.
toxcct wrote: (of course, their reference are stored somewhere the user can't access directly on the hard disk...)
What does reference mean in here?
|
|
|
|
|
i never talked about "empty docs", i talked about "empty files", which is largely different !
save an empty word doc and open it with notepad !!!!
what to you see? hyeroglyphs ?
perfectly normal. Word isn't a plain text editor...
TOXCCT >>> GEII power [toxcct][VisualCalc 2.20][VCalc 3.0 soon...]
|
|
|
|
|
Thank you very much for your information
|
|
|
|
|
Roath Kanel wrote: toxcct wrote:
(of course, their reference are stored somewhere the user can't access directly on the hard disk...)
What does reference mean in here?
The information that says there's a file called XXX in location YYY on the partition. You can't access this without kernel level code, and unless you're building a defrag type tool you'll never need to.
|
|
|
|
|
dan neely wrote: You can't access this without kernel level code
Can you explain or find any resource more deeply about kernel level code?
|
|
|
|
|
It's the lowest level of interal OS code, and is where the core segments of the OS operate. I've never done any programming in it, and you need to use unmanaged code (c/c++) to access it. Sorry I can't be of more help.
|
|
|
|
|
dan neely wrote: You can't access this without kernel level code
that's why i didn't talked more about those nodes of the system partition...
TOXCCT >>> GEII power [toxcct][VisualCalc 2.20][VCalc 3.0 soon...]
|
|
|
|
|
Roath Kanel wrote: What does reference mean in here?
On an old DOS FAT12, FAT16, or FAT32 volume, this is called the File Allocation Table. On an NTFS volume, it's called the MFT, or Master File Table. It's an index of all the files and folders stored in the volume and where they exist on the drive.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Dave Kreskowiak wrote: It's an index of all the files and folders stored in the volume and where they exist on the drive.
Can we preview an index table?
|
|
|
|
|
Roath Kanel wrote: Can we preview an index table?
WHAT?? What does that mean?
You don't know anything about file systems, do you?
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|