logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Mega32] [Mega32][bascom][rs-485] - Jak wysłać pustą ramkę bez błędów?

a_noob 21 Gru 2012 16:58 1473 4
REKLAMA
  • #1 11681225
    a_noob
    Poziom 23  
    Witam

    Jestem w trakcie zgrywania ze sobą kilku uc po rs-485, wszystko szło pięknie, dane szły po lini do celu bez problemów, ale... kiedy przyszło mi wysłać pustą ramkę zaczęły sie problemy. Może najpierw program:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    W takiej formie wszystko działa poprawnie, jednak gdy do tablicy Dane(1) gdziekolwiek wpiszę wartość 0, wysyłanie zmiennej Dane_a_t typu string kończy się na tym znaku i reszta jest ignorowana. Gdy zamieniłem komendę Print na Printbin i wysłałem same tablice Adres(1) oraz Dane(1), program postanawia w tym miejscu zakończyć współpracę, wysyła kilka przypadkowych znaków i wisi.

    Czy ktoś może mnie oświecić czemu string nie może mieć pustego znaku, lub czemu printbin wszystko wiesza? Siedzę nad tym od samego rana i zaczynam siwieć....
  • REKLAMA
  • Pomocny post
    #2 11681457
    Mundi1970
    Poziom 24  
    Cytat:
    Czy ktoś może mnie oświecić czemu string nie może mieć pustego znaku...

    Ponieważ pusty znak (zero) oznacza koniec łańcucha, np:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Cytat:
    ...czemu printbin wszystko wiesza?

    A próbowałeś w taki sposób wykorzystać Printbin?:

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #3 11683266
    a_noob
    Poziom 23  
    Mundi1970 napisał:

    Ponieważ pusty znak (zero) oznacza koniec łańcucha

    No tak, to już zauważyłem i mnie to wnerwia! Nie po to definiuję taką długość zmiennej żeby mi sie sama skracała, a jak bym chciał wysłać mniej to bym to określił przy wysyłaniu...

    Mundi1970 napisał:

    A próbowałeś w taki sposób wykorzystać Printbin?:

    Kod: text
    Zaloguj się, aby zobaczyć kod

    Tak, myślę że wszystko co możliwe z helpa już przerabiałem, teoretycznie bez określenia liczby bajtów tablice powinny być wysłane w całości :/ ale to i tak nic nie zmienia, bo po prostu zawsze up się wiesza na komendzie printbin... Ma ktoś jakieś pomysły jak to przeskoczyć?
  • REKLAMA
  • Pomocny post
    #4 11683551
    Mundi1970
    Poziom 24  
    Cytat:
    Ma ktoś jakieś pomysły jak to przeskoczyć?

    Zainstalować najnowszą wersje BASCOM'a (2.0.7.6.001) :).

    Tak z ciekawości uruchomiłem program na swoim zestawie, dane odbierał terminal. Za pierwszym razem skompilowałem program wersją 2.0.7.5.003, program wysyłał jedną ramkę (printbin) i stanął. Przy drugiej próbie użyłem BASCOM'a 2.0.7.6.001 i ramki zostały wysłane prawidłowo. W pliku History.txt jest odpowiedź dlaczego tak się dzieje ;):
    
    2.0.7.6.001
    
    - printbin with RS485 : the level was set twice. but the status flag was checked twice too. this will result in an endless loop.
      previously, the printbin lib function changed the level, but when sending multiple items, it is better to do that once.
      So now printbin abc ; def ; klm will set the level , then will send 3 variables, and then will check the status and reset the level.
  • #5 11683637
    a_noob
    Poziom 23  
    Często obwiniałem bascom'a, instalowałem nowszego i kombinowałem dalej... zawsze okazywało się żę to moja głupota a nie program :D tym razem z miejsca stwierdziłem że to ja... no i na upartego to jednak ja, bascom sam się nie zainstaluje ;)

    Wszystko chodzi pięknie.

    Dzięki wielkie! Życzę Ci nowego debugera pod choinkę!

    Temat zamknięty!
REKLAMA