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

Szybkie pytanko: #define w programowaniu ATmegi8 w języku C

mały_zrw 10 Paź 2009 23:12 1891 7
  • #1 7113549
    mały_zrw
    Poziom 10  
    Mam problem, bo przy wpisywaniu np:

    #define OPOZNIENIE 10

    _delay_ms(OPOZNIENIE);

    Wywala mi bład przy kompilacji.... :/
    Jak mam zmienić tego define'a by zdefiniować go raz a w reszcie programu się on zmieniał. W programie głównym mam kilka poleceń _delay_ms(...) i nie chcę po prostu za każdym razem zmieniać tam wartości a ją definiować na samym początku.
    Używam AVR Studio jako kompilatora i wyrzuca mi błąd:
    X.c:52: error: lvalue required as left operand of assignment

    I czy w ogóle można tak definiować zmienne?
    Bo działa mi komenda:
    int OPOZNIENIE =10;
    ale czy zamiast niej można stosować jakoś tego #define?
  • Pomocny post
    #3 7113682
    kordirko
    Poziom 22  
    mały_zrw napisał:
    Mam problem, bo przy wpisywaniu np:

    X.c:52: error: lvalue required as left operand of assignment

    Ten błąd mówi że po lewej stronie operatora podstawienia = masz coś, co nie jest zmienną i się nie da do tego "czegoś" zapisać wyniku.
    Może używasz #define OPOZNIENIE , a potem w programie próbujesz wpisać coś przez OPOZNIENIE = xxx ?
  • Pomocny post
    #4 7113715
    snow
    Poziom 31  
    Tak jak użyłeś to działa (kompiluje się).
  • #5 7114540
    mały_zrw
    Poziom 10  
    No racja.... kompiluje się :)
    Tyle że jeśli tworzę pętlę to już nie mogę zmieniać tej wartości???
    Bo mam w programie:

    if (!(SZYBCIEJ)) {
    * OPOZNIENIE=OPOZNIENIE-1;
    if(OPOZNIENIE<=8){
    * OPOZNIENIENIE=8;}}

    I jeśli skomentowałem te linijki oznaczone "*" to rzeczywiście program się kompiluje.

    Czyli nie można zastosować w tym przypadku #define i trzeba normalnego int'a wstawić?
    Bo chciałem również wciskając jakiegoś "pśtryczka" :D zmieniać czas opóźnienia. Właśnie SZYBCIEJ odpowiada za zwarcie jakiegoś pinu do masy i tym samym Zmianę wartości OPOZNIENIA. Ale jeśli definiuję OPOZNIENIE poleceniem
    #define OPOZNIENIE 10
    to to już jest na "sztywno" i nie mogę jej nadpisywać??
  • Pomocny post
    #6 7114548
    snow
    Poziom 31  
    #define jest do stałych a nie do zmiennych.
  • #7 7114608
    mały_zrw
    Poziom 10  
    No dobra czyli nie mogę go w ten sposób użyć :cry:
    To po prostu normalnego int`a będę zmuszony zastosować :)

    Dzięki za pomoc....
  • #8 7115015
    BoskiDialer
    Poziom 34  
    Dodatkowo będzie przydatne napisanie prostej funkcji opóźniającej, która n razy wykona _delay_ms(1). _delay_ms jest makrem, nie funkcją a więc wymaga się, aby parametr był stałą - w przeciwnym przypadku opóźnienia jak i kod urosną.
REKLAMA