Hejsan!
Jag har en FriendlyARM mini2440, med Windows CE5 .Net på. Jag har installerat .Net Compact framework på den. Till den har jag skrivit ett program som ska skriva ut text över COMporten.
Till problemet då. Första gången man ska skriva ut något så funkar det någorlunda. Om jag vill skriva ut "Hello World!", så kan den till exempel skriva "Hello WorlHe", Andra gången man ska skriva ut över com-porten så skriver den bara ut första tecknet i kommandot. Jag har programmerat i C#.
Vad kan problemet vara?
Problem med COMPort på FriendlyARM
- Gildebrand
- Inlägg: 1108
- Blev medlem: 8 maj 2009, 21:40:49
- Ort: Falun
Re: Problem med COMPort på FriendlyARM
Jag skulle säga att baudrate:n inte stämmer exakt / oexakt klockkälla.
Hur snabbt kör du och vad har du som tar emot datan i andra änden?
Hur snabbt kör du och vad har du som tar emot datan i andra änden?
Re: Problem med COMPort på FriendlyARM
Problemet kan vara precis vad som helst eftersom vi inte har en aning om hur du kopplat eller hur din kod ser ut.Gildebrand skrev:Vad kan problemet vara?
- Gildebrand
- Inlägg: 1108
- Blev medlem: 8 maj 2009, 21:40:49
- Ort: Falun
Re: Problem med COMPort på FriendlyARM
Det har löst sig. Av någon konstig anledning så körde den aldrig igenom hela koden, och stängde porten efter att den hade skrivit till den, så då vart det knäppt när jag försökte öppna den på nytt. Ny kör jag med porten öppen hela tiden som en liten fullösning.
Re: Problem med COMPort på FriendlyARM
Du stängde säkert porten innan allt var skickat.
> efter att den hade skrivit till den,
Och "den" är säkert inte den fysiska porten utan någon buffert
som någon underliggande rutin sedan läser från. Det var sannolikt den
rutinen som du sparkade undan benen på genom att stänga porten.
> Av någon konstig anledning så körde den aldrig igenom hela koden,
Det var nog du som inte lät den göra det helt enkelt.
> Ny kör jag med porten öppen hela tiden som en liten fullösning.
Är det något annat problem med det ? Varför är det en "fullösning" ?
> efter att den hade skrivit till den,
Och "den" är säkert inte den fysiska porten utan någon buffert
som någon underliggande rutin sedan läser från. Det var sannolikt den
rutinen som du sparkade undan benen på genom att stänga porten.
> Av någon konstig anledning så körde den aldrig igenom hela koden,
Det var nog du som inte lät den göra det helt enkelt.
> Ny kör jag med porten öppen hela tiden som en liten fullösning.
Är det något annat problem med det ? Varför är det en "fullösning" ?
- Gildebrand
- Inlägg: 1108
- Blev medlem: 8 maj 2009, 21:40:49
- Ort: Falun
Re: Problem med COMPort på FriendlyARM
Jag tänker att det är en fullösning eftersom man har porten öppen hela tiden och aldrig stänger den, men det kanske inte gör något.
Jag var inne på det där med buffert ett tag, man tänkte inte på att .Net skulle ha en egen buffert, utan snarare att jag skulle skriva en egen.
Koden som jag körde för att skriva till porten såg ut såhär:
Jag var inne på det där med buffert ett tag, man tänkte inte på att .Net skulle ha en egen buffert, utan snarare att jag skulle skriva en egen.
Koden som jag körde för att skriva till porten såg ut såhär:
Kod: Markera allt
port.Open();
port.Write("Hello World!");
port.Close();
Re: Problem med COMPort på FriendlyARM
> man tänkte inte på att .Net skulle ha en egen buffert,
Det vore mer förvånande om den *inte* buffrade data som ska sändas.
Det skulle vara ganska ineffektivt.
Från :
http://msdn.microsoft.com/en-us/library ... 00%29.aspx
http://msdn.microsoft.com/en-us/library ... 00%29.aspx
http://msdn.microsoft.com/en-us/library ... 00%29.aspx
Om du nu *måste* stänga porten mellan varje skrivning så får du lägga en loop och vänta
på att BytesToWrite blir 0 innan du gör Close på den (porten).
Noera att jag aldrig har skrivit en enda rad i C# och jobbar inte med Microsoft produkter
alls normalt, men ändå tog det max 5 minuter att hitta allt.
Det vore mer förvånande om den *inte* buffrade data som ska sändas.
Det skulle vara ganska ineffektivt.
Från :
http://msdn.microsoft.com/en-us/library ... 00%29.aspx
Se också (BytesToWrite property):The best practice for any application is to wait for some amount of time after calling the Close
method before attempting to call the Open method, as the port may not be closed instantly.
http://msdn.microsoft.com/en-us/library ... 00%29.aspx
Så länge som den inte är 0 så bör man nog inte göra Close på porten.Gets the number of bytes of data in the send buffer.
The send buffer includes the serial driver's send buffer as well as internal buffering in the SerialPort object itself.
http://msdn.microsoft.com/en-us/library ... 00%29.aspx
Så allt finns ju där i klartext...Calling this method closes the SerialPort object and clears both the receive and transmit buffers.
Om du nu *måste* stänga porten mellan varje skrivning så får du lägga en loop och vänta
på att BytesToWrite blir 0 innan du gör Close på den (porten).
Noera att jag aldrig har skrivit en enda rad i C# och jobbar inte med Microsoft produkter
alls normalt, men ändå tog det max 5 minuter att hitta allt.