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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 9 kwi 2025, o 06:56


    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

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

    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łę

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    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