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

Attiny13 w C – przypisanie X=Y+5 nie działa, X równa Y zamiast Y+5

Pijopic 12 Gru 2007 15:15 1150 6
REKLAMA
  • #1 4579828
    Pijopic
    Poziom 17  
    Posty: 235
    Pomógł: 10
    Ocena: 2
    Witam
    Problem dotyczy Attiny13 - jak w C dodac konkretna wartosc do zmiennej np: X=Y+5. Jak bym nie kombinowal zawsze wszystko ladnie sie kompiluje ale efektu dodawania brak i X = Y a nie Y + 5.
    Co prawda rozwiazanie problemu znalazlem inna droga ale ciekawi mnie dlaczego tak sie dzieje ze w Atmegach nie mialem nigdy tego typu problemu, a tu nijak nie idzie dodac nic??
    Pozdrawaim
  • REKLAMA
  • #2 4579992
    Ch.M.
    Poziom 27  
    Posty: 1009
    Pomógł: 62
    Ocena: 15
    Może przerzuć sie na ASM i nie będzie problemów ;)
    Mega od tiny różni się tylko sprzętowym mnożeniem. Podejrzyj co Ci kompilator wyrzucił, może tutaj jest problem, a może coś źle deklarujesz (za mało bajtów na zmienne)
    Pozdrawiam
  • REKLAMA
  • #3 4580054
    Pijopic
    Poziom 17  
    Posty: 235
    Pomógł: 10
    Ocena: 2
    Nie zaczynajmy dyskusji nad wyrzszoscia swiat Bozego Narodzenia nad swietami Wielkanocy :) - na co dzien pracuje w asmie, a w C dla rozrywki :) Co nie znaczy, ze nie znam podstaw i napewno deklaracje i incjalizacje zmiennych sa OK, nic poza zakres nie wychodzi.
    Pozdrawiam
  • #4 4580086
    Ch.M.
    Poziom 27  
    Posty: 1009
    Pomógł: 62
    Ocena: 15
    W takim razie sprawdz kod, może gcc próbuje używać komend nieobsługiwanych przez tiny... nic mi nie przychodzi do głowy :/
  • REKLAMA
  • #5 4580151
    Pijopic
    Poziom 17  
    Posty: 235
    Pomógł: 10
    Ocena: 2
    To moze zadam inaczej pytanie - w niektorych modelach Attiny nie ma ramu, w 13 jest, ale czy mozliwe jest ze mimo to kompilator nie uwzglednia tego i z tad problem?? I trzeba pisac program w C tak jak by go nie bylo??
    Pozdrawiam
  • REKLAMA
  • #6 4581122
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    Pijopic napisał:
    To moze zadam inaczej pytanie - w niektorych modelach Attiny nie ma ramu, w 13 jest, ale czy mozliwe jest ze mimo to kompilator nie uwzglednia tego i z tad problem?? I trzeba pisac program w C tak jak by go nie bylo??
    Pozdrawiam

    A czy będę bezczelny ;) , jeśli zapytam co to za tajemniczy kompilator i jak wyglądają opcje kompilacji :?: Np. AVR-GCC potrafi nieźle zamieszać , jak się "włączy" optymalizację.Najlepsza metoda diagnostyczna , to jak wyżej wymieniona , polegająca na podejrzeniu wygenerowanego kodu w asm.

    Piotrek
  • #7 4581336
    Pijopic
    Poziom 17  
    Posty: 235
    Pomógł: 10
    Ocena: 2
    Bedziesz :P A tak powaznie to oczywiscie gcc z tym ze ustawienia optymalizacji zawsze sprawdzam na poczatku po tym jak swego czasu mi namieszaly tak, ze z tydzien bledu szukalem ktorego nie bylo:D A wracajac do tematu dodawania to czy jest wogole dopuszczalna w C taka forma dodawania jak podalem??

    To moze na konkretnym przykladzie:
    
    W_ADC=W_ADCL1+W_ADCL2;
    

    Czy taka operacja jest dozwolona ?? U mnie nie dziala prawidlowo choc blad zaden nie wyskakuje...

Podsumowanie tematu

LABEL_AI_GENERATED
Problem dotyczy przypisania wartości w języku C na mikrokontrolerze Attiny13, gdzie operacja dodawania np. X = Y + 5 kompiluje się bez błędów, lecz w efekcie X przyjmuje wartość Y zamiast Y+5. Dyskusja wskazuje na możliwe przyczyny, takie jak ograniczenia sprzętowe mikrokontrolera, specyfika kompilatora AVR-GCC oraz potencjalne problemy z optymalizacją kodu. Użytkownik potwierdza poprawność deklaracji i inicjalizacji zmiennych, a także stosowanie standardowej składni C. Sugerowane jest sprawdzenie wygenerowanego kodu asemblerowego, gdyż kompilator może używać instrukcji nieobsługiwanych przez Attiny13 lub nieprawidłowo zarządzać pamięcią RAM. Pojawia się pytanie, czy w niektórych modelach Attiny, mimo obecności RAM, kompilator może ignorować jego wykorzystanie, co wymusza pisanie kodu w C tak, jakby RAM nie było. Przykładowa operacja W_ADC = W_ADCL1 + W_ADCL2 jest poddana wątpliwości co do poprawności działania na tym mikrokontrolerze. Ogólnie zalecane jest analizowanie wygenerowanego kodu asemblerowego oraz dokładne sprawdzenie opcji kompilacji, zwłaszcza optymalizacji, które mogą wpływać na nieprawidłowe działanie prostych operacji arytmetycznych.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA