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

[BASCOM][AVR] - Jak stosować aliasy w pętlach i if'ach

smithpl 04 Paź 2012 15:51 1821 12
REKLAMA
  • #1 11376643
    smithpl
    Poziom 15  
    Posty: 186
    Kolejne pytanie programistyczne.

    W związku z tym iż wyjścia PIND.x nie są po kolei zastosowałem Alias dla ułatwienia programowania:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Teraz chciałbym móc pracować na tych aliasach tak jak na pinach tylko nie wiem jak to zrobić bo nie mogę przypisać zmiennych:

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 11376813
    Fredy
    Poziom 27  
    Posty: 915
    Pomógł: 117
    Ocena: 28
    Jeśli przedstawiasz kompilatorowi takie cos:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    to od tego momentu każdy napotkany tekst "nazwa1" zostanie zamieniony na Portd.6

    Jeśli zatem napiszesz
    Kod: text
    Zaloguj się, aby zobaczyć kod
    to zostanie to przetłumaczone na
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Czyli set Portd.6 i set nazwa1 jest tożsama.
  • REKLAMA
  • #3 11376819
    Konto nie istnieje
    Poziom 1  
  • #4 11376826
    smithpl
    Poziom 15  
    Posty: 186
    Fredy ale zerknij na to co napisałem.

    Mi chodzi o to aby generować tą nazwe np. w pętli.
    Wiem ze moge wstawić aliasy i ich używać
    ale tutaj potrzebuje zbudować taką nazwę. Biorę nazwa i musze dokleić wartośc zmiennej I aby powstało nazwa1, nazwa2 itp.
    I to mi nie działa, z ręki wpisując nazwe aliasu to wiem że działa.

    Zeby było jasne o co chodzi

    chcę zrobić 1 pętlę for w której program sprawdza parametry i w zależności od tego jaką wartość przybierze I takie wyjście ma zostać załączone.
    Nie chcę robić 100 linii kodu aby każdą zależność sprawdzić skoro zależności są takie same dla każdej zmiennej.

    I teraz latamy po pinach od 0 do 7

    for i = 0 to 7
    if pina.i = 0 then ' uzytkownik wcisnal guzik
    set nazwa(tutaj i) ' i tu chcialbym zbudowac alias np. nazwa1 ktory zalaczy powiazane znim wyjscie
    End If
    next
  • #5 11376844
    Fredy
    Poziom 27  
    Posty: 915
    Pomógł: 117
    Ocena: 28
    smithpl napisał:
    Fredy ale zerknij na to co napisałem.

    Mi chodzi o to aby generować tą nazwe np. w pętli.
    Wiem ze moge wstawić aliasy i ich używać
    ale tutaj potrzebuje zbudować taką nazwę. Biorę nazwa i musze dokleić wartośc zmiennej I aby powstało nazwa1, nazwa2 itp.
    I to mi nie działa, z ręki wpisując nazwe aliasu to wiem że działa.



    to za pomocą aliasów nie zrobisz.
    Spróbuj może tak:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #6 11376853
    smithpl
    Poziom 15  
    Posty: 186
    no wlasnie :-(
    problem ze nie moge bo nie sa po kolei :-(
  • #7 11376923
    Konto nie istnieje
    Poziom 1  
  • #8 11376939
    Mundi1970
    Poziom 24  
    Posty: 342
    Pomógł: 96
    Ocena: 133
    Można tak :)

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #9 11376945
    smithpl
    Poziom 15  
    Posty: 186
    ATMEGA16

    no bo w sumie nie wiem jak to zrobić aby nie było brzydko
    niestety nie da sie inaczej bo 2 kanały sprzętowego PWM mam na innych pinach

    Zastanawiałem się jeszcze czy może wywoływać funkcję
    I zrobić 4 funkcję.
    Kod: text
    Zaloguj się, aby zobaczyć kod



    tylko teraz jak zlozyc nazwe funkcji :-)
  • Pomocny post
    #10 11376950
    Fredy
    Poziom 27  
    Posty: 915
    Pomógł: 117
    Ocena: 28
    Zrób sobie funkcję konwertującą ,której argumentem będzie numer pinu a wartością pin który jest rzeczywisty.
  • #11 11376954
    smithpl
    Poziom 15  
    Posty: 186
    A jakiś przykład?
    bo nie bardzo rozumiem.

    i jak taką funkcję wywoływać ?
  • #12 11377023
    Konto nie istnieje
    Poziom 1  
  • #13 11377530
    Fredy
    Poziom 27  
    Posty: 915
    Pomógł: 117
    Ocena: 28
    Dawno w Bascomie nie pisałem. Najprymitywniej to można zrobić na zmiennych globalnych używając podprogramu.
    A więc masz zmienną Xp w której masz numer pinu na którym chcesz operować. Zmienna Xk to będzie już wartość skorygowana.

    Robisz podprogram:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    następnie w programie w dowolnym miejscu gdzie chcesz przemiatać piny, do zmiennej Xp wysyłasz wartość taką jak powinna być, następnie wywołujesz konwerter, a dalej już operujesz na zmiennej Xk

    To przemiatanie co wyżej zrealizujesz więc w taki sposób

    Kod: text
    Zaloguj się, aby zobaczyć kod

Podsumowanie tematu

✨ W dyskusji poruszono problem używania aliasów w języku BASCOM dla mikrokontrolerów AVR, szczególnie w kontekście pętli i instrukcji warunkowych. Użytkownik chciałby dynamicznie generować nazwy aliasów w pętli, co okazało się trudne do zrealizowania. Odpowiedzi sugerowały różne podejścia, w tym użycie tablicy do przechowywania numerów bitów oraz konwersji pinów za pomocą funkcji. Proponowano także wykorzystanie zmiennych globalnych i podprogramów do uproszczenia kodu. Wskazano, że bezpośrednie użycie aliasów w pętli nie jest możliwe, a zamiast tego można operować na rzeczywistych pinach.
Wygenerowane przez model językowy.
REKLAMA