Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 26 kwi 2024, o 10:01


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 4 maja 2016, o 00:37 
Offline
Użytkownik

Dołączył(a): 08 lut 2015
Posty: 132
Pomógł: 4

Zmagam się z problemem zapisu bufora do pliku tekstowego. W metodzie "serialPort1_DataReceived" mam delegata do zapisu danych z bufora:
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Dane z AVR wysyłam co 1 ms z prędkością 38400 bps. W jaki sposób mogę zapisywać ten bufor do tablicy tak aby nie gubić danych?
Zauważyłem, że od momentu odbioru do momentu zapisu do pliku bufor jest znowu zapełniony. Dane, które wysyłam mają postać np. "123\n". Czytałem, że zapis do pliku można zralizować w osobnym wątku sprawdzając stan bufora. Niestety nie mam pojęcia jak się za to zabrać. Mógłbym prosić o przykładowy kod jak wywołać taki wątek zapisu i sprawdzania stanu bufora ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 maja 2016, o 09:12 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 57
Pomógł: 5

dobrym rozwiązaniem było by zastosowanie co najmniej dwóch buforów:
-pierwszy bufor główny był by tym twoim buforem, na którym pracujesz
-drugi większy bufor pomocniczy, do niego na bieżąco były by kopiowane dane z bufora głównego, tak aby był w stanie pomieścić kilka ramek. Kopiowanie między obszarami pamięci jest dużo szybsze niż zapis do pliku. Gdy już się uzbiera więcej danych w buforze pomocniczym uruchamiasz wątek (np za pomocą semafora), który zrzuci to do pliku.

To jest oczywiście pomysł od którego bym zaczął, ewentualnie można użyć kolejki do przechowywania kolejnych ramek, które nie zostały jeszcze obsłużone.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 maja 2016, o 12:25 
Offline
Użytkownik

Dołączył(a): 08 lut 2015
Posty: 132
Pomógł: 4

Tak u mnie wygląda odbiór :
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

A tak metoda zapisująca do pliku:
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Ale niestety plik jest wciąż pusty, a dane po uart nadchodzą. Co robię źle ?

------------------------ [ Dodano po: 11 minutach ]

W dbugerze widać, że do bufora nadlatują dane, ale nie zapisują się do pliku.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 maja 2016, o 14:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

stringi zapisujesz np tak po kawałku z uzyciem klasy StreamWriter.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



mozesz też zastosować zapis ciurkiem z użyciem klasy FileStream

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


warto tez zerknąc do msdn gdzie :
https://msdn.microsoft.com/pl-pl/library/8bh11f1k.aspx


co łątwo dostosować do swoich potrzeb

możesz też zainteresować się klasą File np:

void File.WriteAllLines(string path, string[] tab)

to metoda statyczna pozwalająca na zapis stringów z tablicy , np tak:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


metod jest sporo ... i rozwiązań :)


Autor postu otrzymał pochwałę

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO