Solved

"Blue Screen Of Death" Hardware or Software?

Posted on 2008-10-18
3
492 Views
Last Modified: 2010-04-21
Hope I don't get to verbose, but I want to be clear:
I'm writing an app in VB.Net, and declaring/using separate threads that monitor a serial port for both input or output. It works fine - until I get the "Blue Screen Of Death" with the message  "IRQ_NOT_LESS_OR_EQUAL". Of course, I suspected a thread problem - so I took the code for the thread (a simple loop) and wrote it into a standalone test app. After a while, the test app crashes also (with no separate threads).

The thread code is a simple 'Do" loop. It calls MySerialPort.Receive, which is synchronous, so it wait's till it gets a character. It appends the character to a string in a buffer array. When a <cr> is read in, the completed string is used as a parameter in an Event call (I have rem'd out the RaiseEvent in the test code, just to make sure that it wasn't part of the problem.) The code can run non-stop for 10-60 minutes, then the BSOD occurs.

The HeartBeatTimerFlag get's set with every line that is read in. There is a 500 mS timer that will trigger a start signal to the equipment this is controlling if no lines appear for .5 seconds.

Also, the serial port isn't a regular com port - it's a Keyspan USB serial port at COM3, no handshaking, 115200 baud.

I have attached the entire loop for you to see - can someone tell me why the BSOD is occuring? THANKS!!


Private Sub GetData()
        Do
            Application.DoEvents()
            If MySerialPort.BytesToRead <> 0 Then
                Dim returnData As String = Chr(MySerialPort.ReadByte)  
                B = InStr(returnData, vbCr)
                If B <> 0 Then
                    'got a cr, line is done
                    ReceiveApplicationQueue(ReceiveApplicationQueuePointer) = ReceiveApplicationQueue(ReceiveApplicationQueuePointer) & Strings.Left(returnData, B)
                    HeartBeatTimerFlag = True
                    Debug.WriteLine(ReceiveApplicationQueue(ReceiveApplicationQueuePointer))
                    'RaiseEvent GotApplicationString(ReceiveApplicationQueue(ReceiveApplicationQueuePointer))
                    ReceiveApplicationQueue(ReceiveApplicationQueuePointer) = ""
                    ReceiveApplicationQueuePointer = (ReceiveApplicationQueuePointer + 1) Mod 500
                    ReceiveApplicationQueue(ReceiveApplicationQueuePointer) = Strings.Right(returnData, Len(returnData) - B)
                    returnData = ""
                Else
                    ReceiveApplicationQueue(ReceiveApplicationQueuePointer) = ReceiveApplicationQueue(ReceiveApplicationQueuePointer) & returnData
                End If
            End If
        Loop
 
    End Sub

Open in new window

0
Comment
Question by:LongDave
  • 2
3 Comments
 

Author Comment

by:LongDave
ID: 22750797
I forgot to add that the "Application.DoEvents" was not in this loop in the threaded version. I just added it into the standalone so that I wouldn't lock up anything. Incidentally, this is using VB.NET in VS 2005. Thanks!
0
 
LVL 18

Accepted Solution

by:
Priest04 earned 500 total points
ID: 22752205
Well, the error can be both hardware and software, so its hard to say it. Could be the driver is not good. What you could do to eliminate hardware is to try it on different PC. If no BSOD, then its a software problem.

Maybe you should try setting a lower speed, like 9600, for testing purposes.
0
 

Author Closing Comment

by:LongDave
ID: 31507503
It wasn't the software - apparently the old driver for the USB-Serial converter did not work too well with XP-SP3. When the software is plugged into a computer with a 'real' com port, it worked fine.
0

Featured Post

Free Tool: Postgres Monitoring System

A PHP and Perl based system to collect and display usage statistics from PostgreSQL databases.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Store results in vb.net 3 24
export data table to excel in vb.net 10 36
VB.NET 2008 Publish Error 2 34
Get month and date in a format 4 31
You can of course define an array to hold data that is of a particular type like an array of Strings to hold customer names or an array of Doubles to hold customer sales, but what do you do if you want to coordinate that data? This article describes…
When we want to run, execute or repeat a statement multiple times, a loop is necessary. This article covers the two types of loops in Python: the while loop and the for loop.
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…
The viewer will learn how to pass data into a function in C++. This is one step further in using functions. Instead of only printing text onto the console, the function will be able to perform calculations with argumentents given by the user.

856 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question