Vista, odczyt z USB, crash po kilku sekundach

0

Przeniosłem się na Viste i powróciłem do pracy nad programem a tymczasem mam następujący problem w róznym momencie od startu programu (do około 4 sekund)
Nazwa zdarzenia problemu: APPCRASH
Application Name: Centrala1.exe
Application Version: 1.0.0.0
Application Timestamp: 497850ee
Fault Module Name: mscorwks.dll
Fault Module Version: 2.0.50727.1433
Fault Module Timestamp: 471ed580
Exception Code: c0000005
Exception Offset: 00000000001d0a5d
Wersja systemu operacyjnego: 6.0.6000.2.0.0.256.1
Identyfikator ustawień regionalnych: 1045

Nie mam pojęcia co to może być i jak to zinterpretować. Pomocy !

0

Dodam do tego to że zauważyłem problem wiąże się z występowaniem SerialPort1.ReadByte() w wątku pobocznym. Tzn jak nie zczytuje z serial portu tylko z pliku to jest ok. Używam PL 2303 konwerter USB-serial. Na XP bylo ok. Tutaj stery są pod Win Viste niby więc tez nie powinno być problemu :/

0

W internecie znajdziesz mnóstwo wiadomości na ten temat, które mogą wystąpić z różnych powodów.
[1] http://forums.microsoft.com/msdn/ShowPost.aspx?siteid=1&PostID=63223
[2] http://forums.techguy.org/windows-vista-7/601874-exception-code-c0000005.html
[3] http://www.forumtopics.com/busobj/viewtopic.php?p=77239#77239

Edit: jeśli to problem z COM to może należy zainstalować odpowiednie sterowniki pod Vistę

0

Tak jak mówilem - wystarczy ze jest
byte x = Convert.ToByte(serialPort1.ReadByte());
które nic zupelnie nie zmienia bo nie jest to nigdzie dalej zapisywane i juz wywala po róznym czasie. Tymczasem jest jest np
byte x = (byte)1; przykładowo to już sobie działa bez problemu.
Wnosek że jest to związane z portem. Co więcej - zczytywanie działa ale przez rózny czas - czasem szybciej sie zawiesza czasem poźniej ale coś tam zczytuje na początku więc nie jest tak że nie działa, tylko coś tam bruździ :((

0

A więc najbardziej prawdopodobne jest to że źle pobierasz dane z SerialPort-u. Sprawdzasz czy jakieś dane są dostępne przed wczytaniem ? Mały tutorial: http://www.dreamincode.net/forums/showtopic35775.htm

0

Zrobiłem prosty test: program który na timerze robi coś takiego:

private void timer1_Tick(object sender, EventArgs e)
{
while (true)
{
if (serialPort1.BytesToRead > 1)
textBox1.Text = Convert.ToString(serialPort1.ReadByte());
else
break;
}
}

ten sam błąd wywala. Teraz to już ktoś mądry może chyba powiedzieć co jest nie tak.

0

Ok sprawcyzowalem to jeszcze bardziej:
private void timer1_Tick(object sender, EventArgs e)
{
while (true)
{
if (serialPort1.BytesToRead > 1)
textBox1.Text = "Adam"; //jak widac feralnym jest serialPort1.BytesToRead()
else
break;
}
}

wiec o to chodzi - serialPort1.BytesToRead() ....

0

a jednak mam chyba to co trzeba - to nie wina portu. Looknijcie na tą obsługe timera:

private void timer1_Tick(object sender, EventArgs e)
{
bool x = true;
while (true)
{
if (x)
{
textBox1.Text = "adam";//Convert.ToString(serialPort1.ReadByte());
}
else
break;
}

    }

widać że nigdy nie wyjdzie z tej pętli. Ale zamiast zawieszać to daje własnie ten sam dokładnie błąd. Tylko że w mojej aplikacji wątek poboczny działa w pętli właśnie niekończącej się i pewnei dlatego po pewnym czasie windows wywala błąd tak jakby bał się że jest to zawias... (a nie jest to bo jest to działanie celowe gdyż w tej pętli zczytuje z portu). No teraz to już licze na pomoc kogoś doświadczonego - problem został zdefiniowany :)

0

Nie no obsługa timer-a jest genialna ;) Zabierz tę nieskończoną pętlę. Rozumiem że chcesz nasłuchiwać na danym porcie. Więc zegar co jakiś czas wywołuje metodą sprawdzającą. Nie ma sensu umieszczać tam nieskończonej pętli.

0

Jejciu - to jest celowo zrobione żeby wywołać ten błąd. Wiem jak sie obsługuje port itd. Chodzi tylko o ten błąd. Występuje on również w takim wypadku:

private void timer1_Tick(object sender, EventArgs e)
{
int x = 1;
while(true)
{
if (x<100000)
{
x++;
textBox1.Text = x.ToString();//Convert.ToString(serialPort1.ReadByte());
}
else
break;
}

    }

teoretycznie konstrukcja powinan przejść - tymczasem w różnych przypadkach wywala z tym własnei błedem. (w róznych chwilach).

1 użytkowników online, w tym zalogowanych: 0, gości: 1