Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

bascom czy ma ktoś link do opisu jak używać FLAGI

tomaszdko 21 Lis 2015 23:31 1641 13
  • #1 21 Lis 2015 23:31
    tomaszdko
    Poziom 8  

    chodzi o używanie flag w programach (podprogramach) tak by móc przyśpieszyć działanie ...nie tylko flagi w przerwaniach

    0 13
  • #2 22 Lis 2015 09:07
    ZbeeGin
    Poziom 38  

    Flagi to nic innego jak zmienne, które gdzie indziej modyfikujesz, a gdzie indziej odczytujesz. Tu nie ma żadnej filozofii - proste operacje porównywania wartości w instrukcjach warunkowych i odpowiednie działanie.

    0
  • #3 22 Lis 2015 09:47
    373522
    Użytkownik usunął konto  
  • #4 22 Lis 2015 13:10
    tomaszdko
    Poziom 8  

    Dzięki za odpowiedzi . Panowie tylko że ja należę do ludzi co muszą mieć jakiś prosty przykład praktyczny . Jeśli można to jakiś przykład flagi sprawdzanej w podprogramie.Kiedy ta FLAGA się zmienia , co na nią wpływa .

    Teorię mam opisaną w załączniku , może komuś się przyda.

    0
  • Pomocny post
    #5 22 Lis 2015 19:13
    ASMnauka_
    Poziom 14  

    niveasoft napisał:
    Jeśli wybierasz BIT w celu pozornej oszczędności to kompilator wszystkie flagi bitowe wsadzi do jednego Bajtu.
    Nie ma innej możliwości.
    Bajt składa się z ośmiu Bitów.
    Ale do rzeczy.
    Najprościej to wytłumaczyć następująco.
    Na przykładzie flagi Z.
    bascom czy ma ktoś link do opisu jak używać FLAGI
    Flaga ta wskazuje zerowy wynik działania arytmetycznego , lub logicznego.
    A teraz przykład.
    Jest sobie pętla.
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    I teraz objaśnienie.

    LDI R16,(10) = załaduj do rejestru R16 liczbę 10
    Petla_8_bit: = nazwa etykiety
    SBIW R16,1 = odejmij bezpośrednio stałą od słowa (para rejestrów), stała to 1.
    Przy czym rozkaz SBIW ustawia flagę Z jeśli wynik jest równy zeru, w przeciwnym przypadku zeruje.
    I wreszcie BRNE = skok względny, jeśli nie równe.
    Warunkowe rozgałęzienie programu.
    I właśnie rozkaz BRNE sprawdza flagę Z i jeśli jest ona równa 0 to nastąpi skok do etykiety Petla_8_bit, w przeciwnym razie pętla się zakończy.
    BRNE Petla_8_bit = skocz do etykiety Petla_8_bit jeżeli flaga Z równa się 0
    Wiem, że dla początkującego nie jest to łatwe.
    Ale niestety jako takich flag w Bascomie po prostu nie ma.

    Albo inaczej.
    Deklarujesz dwie stałe
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    I teraz jest pętla nieskończona, w której chcesz się dowiedzieć, czy na przykład zmienna Ogorek jest prawdą, czy fałszem.
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    W pętli sprawdzasz, czy zmienna Ogorek jest prawdą, czy fałszem.
    Jeśli jest prawdą to zakończ program, jeśli nie to nie rób nic.

    I kolejny przykład.
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    Czyli nic nie kupisz, mimo, że warzywa są w sklepie.

    Dodano po 33 [minuty]:

    niveasoft napisał:
    bo wartości Byte nie można Set lub Reset
    ;)
    Postaram się to wytłumaczyć jak najprościej (temat).
    Załóżmy, że Mami wysyła Cię na zakupy.
    Otrzymujesz 100 zł.
    Masz kupić Pomidorów za 20 zł, ogórków za 10 zł, oraz filtr do okapu kuchennego.
    Nie wiesz ile co kosztuje, a co najważniejsze nie wiesz, cz sklepy sprzedające te towary są otwarte.
    Więc pierwszą rzeczą która musisz sprawdzić jest fakt, czy sklep oferujący warzywa i sklep oferujący towar AGD są czynne.
    I właśnie do tego morze się przydać flaga.
    Definiujesz ją tylko jeden raz, jako Prawda, lub Falsz
    Następnie, jeżeli sklep oferujący warzywa jest otwarty i jednocześnie sklep AGD jest czynny to wybierasz, do którego sklepu chcesz sie udać jako pierwszego.
    Ale to dopiero początek wycieczki po zakupy.
    Nie wiesz, czy w danym sklepie jest towar, który Mami jest potrzebny.
    I tu znowu musisz sprawdzić, czy w warzywniaku są ogórki i pomidory, a w
    sklepie AGD jest filtr do okapu.
    Na koniec jeśli oba sklepy są zamknięte to nici z zakupów.
    A jest jeszcze temat złociszy.
    Czy Ci wystarczy na zakupy ?

    Dodano po 39 [minuty]:

    tomaszdko napisał:
    chodzi o używanie flag w programach (podprogramach) tak by móc przyśpieszyć działanie ...nie tylko flagi w przerwaniach

    Zmartwię Cię, niestety jest to nie możliwe bez wstawek ASM.
    Jeśli faktycznie chcesz przyspieszyć działanie programów, musisz nauczyć się Asemblera.
    Odczytywać i modyfikować bezpośrednio w rejestrów\u mikro kontrolera.
    Pierwszy przykład z brzegu to przerwania.
    Zbyt wiele tracisz na odkładaniu na stos.

    0
  • #6 23 Lis 2015 19:05
    ZbeeGin
    Poziom 38  

    ASMnauka_ napisał:
    Zbyt wiele tracisz na odkładaniu na stos.

    To akurat można załatwić jedną klauzulą.

    0
  • #7 24 Lis 2015 09:26
    ASMnauka_
    Poziom 14  

    ZbeeGin napisał:
    To akurat można załatwić jedną klauzulą.

    To wiemy Ty i ja, oraz inni, ale czy wie o tym tomaszdko ?
    Nie jest takie proste dla początkującego używanie Nosave
    Bo i skąd ma wiedzieć które rejestry i gdzie je odkładać na stos za pomocą rozkazu PUSH, jak i ściągać je se stosu za pomocą rozkazu POP
    Tu przykład z Bascoma
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    Niestety jeżeli nie zna choćby podstaw Asemblera nie będzie wiedział do jakich rejestrów została zapisana zmienna Single.

    0
  • #8 24 Lis 2015 11:50
    ZbeeGin
    Poziom 38  

    ASMnauka_ napisał:
    To wiemy Ty i ja, oraz inni, ale czy wie o tym tomaszdko ?

    Ta informacja jest umieszczona w pomocy do programu i łatwo ją znaleźć.

    ASMnauka_ napisał:
    Niestety jeżeli nie zna choćby podstaw Asemblera nie będzie wiedział do jakich rejestrów została zapisana zmienna Single.

    Przykład z modyfikacją zmiennej typu Single w przerwaniu to akurat bardzo zły przykład. I to nie z uwagi na bezpieczeństwo rejestrów tylko na pokazywaniu złych nawyków w programowaniu na wysokim poziomie.

    Jeśli zaś chodzi o same rejestry w przerwaniach to wcale nie trzeba znać assemblera. Wystarczy narzędzie NoSave Tool, które przeanalizuje gotowy program i zaproponuje użycie klauzuli NO SAVE wraz z propozycją gotowych prologów i epilogów przerwań.

    1
  • #9 24 Lis 2015 13:02
    ASMnauka_
    Poziom 14  

    ZbeeGin napisał:
    Przykład z modyfikacją zmiennej typu Single w przerwaniu to akurat bardzo zły przykład. I to nie z uwagi na bezpieczeństwo rejestrów tylko na pokazywaniu złych nawyków w programowaniu na wysokim poziomie.

    Przykład ten skopiowałem z pomocy Bascoma.
    Więc pretensje można mieć jedynie do jego twórcy.
    bascom czy ma ktoś link do opisu jak używać FLAGI
    ZbeeGin napisał:
    Jeśli zaś chodzi o same rejestry w przerwaniach to wcale nie trzeba znać assemblera. Wystarczy narzędzie NoSave Tool, które przeanalizuje gotowy program i zaproponuje użycie klauzuli NO SAVE wraz z propozycją gotowych prologów i epilogów przerwań.
    Co oczywiście prawie całkowicie uwalnia osobę piszącą program od myślenia co i gdzie i jak.
    Moim zdaniem nie na tym polega nauka, by za nas programy robiły wszystko, lub prawie wszystko.
    No ale cóż każdy robi co chce i jak chce.

    0
  • #10 24 Lis 2015 13:54
    373522
    Użytkownik usunął konto  
  • #11 24 Lis 2015 14:35
    ASMnauka_
    Poziom 14  

    niveasoft napisał:
    Program pozbiera wszystkie użyte rejestry i zwolni Cie z uruchamiania tego molocha Atmela ahahahaha :D

    Jeśli pisząc to miałeś na myśli mnie to na szczęście nie muszę, a co najważniejsze nie chcę z tego molocha korzystać.

    0
  • #12 24 Lis 2015 19:30
    tomaszdko
    Poziom 8  

    Witam Panowie

    Dzięki za zainteresowanie i poświęcenie czasu . Panowie macie rację że nie znam ASM i na razie nie chce , co nie znaczy że z czasem tak ale na tą chwile tylko bascom. Interesuje mnie zasada i działanie FLAGI (praktyczna na jakiś przykładach w bascom) . Kolega ASMnauka_ fajnie dał wykład z "ogórkami" i dzięki za to. Napisałem prosty programik na przerwaniu INT0 (zlicza impulsy) a w tym samym czasie ADC (pomiar napięcia)

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    Dzięki użyciu FLAGI "B" program w pętli głównej nie marnuje czasu na LCD i wyświetlanie wyniku zmiennej A . Procesor sprawdzi FLAGE i leci do innej części pętli głównej ( ASMnauka_ o to mi chodziło z "o używanie flag w programach (podprogramach) tak by móc przyśpieszyć działanie"). Umieściłem w poprzedniej odpowiedzi plik pdf . Opisane są tam FLAGI teoretycznie :/ a mnie by bardzo interesowały przykłady praktyczne (łatwiej wchodzi mi do głowy) ... chodzi mi mianowicie o to co jest w załączniku . Mogą być linki lub kod tutaj.
    ps. zrozumcie amatora , który chce więcej niż pisanie programu tylko w pętli głównej a procesor ,który leci instrukcję po instrukcji :) . Dzięki

    0
  • #13 25 Lis 2015 06:00
    emarcus
    Poziom 35  

    tomaszdko napisał:
    Witam Panowie

    Dzięki za zainteresowanie i poświęcenie czasu .

    Dzięki użyciu FLAGI "B" program w pętli głównej nie marnuje czasu na LCD i wyświetlanie wyniku zmiennej A .

    Nie najlepszy to przykład dla przedstawienia konceptu stosowania flag.

    Poniżej masz trochę zmodyfikowany twój przykład reagujący wyświetleniem wyniku V z pomiaru ADC tylko w przypadku jego zmiany.

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod



    Zmieniaj co jakiś czas połozenie suwaka dla ADC(0),
    Obserwuj zmiany w oknie monitora w symulatorze (niebieskie tło) i wynik na LCD.

    e marcus

    0
  • #14 25 Lis 2015 08:11
    ASMnauka_
    Poziom 14  

    Oto kolejny przykład i zarazem zadanie domowe ;)

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    Na tym przykładzie dokonaj zakupów różnych warzyw i sprawdz, czy w którymś ze sklepów nie brakuje na przykład ogórków.
    emarcus ma rację.
    Nie ucz się używać CLS w pętli głównej programu, oraz stosuj Locate celem odświeżenia tylko tych znaków na LCD, które są niezbędne.
    Co prawda w tym przykładzie ja odświeżam całe linie, ale tylko dlatego, że nie chciało mi się liczyć wszystkich znaków.
    Najlepiej będzie jeżeli przetestujesz sobie ten przykład w symulatorze krokami.
    Sprawdz co się stanie, jeśli Pomidor = Pomidor - 3 zastąpisz Pomidor = Pomidor - 1
    Powodzenia w nauce.
    Pozdrawiam

    0
  Szukaj w 5mln produktów