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

Atmega8 + LCD błędy i brak kompilacji przy wykorzystaniu zmiennej w kilku miejsc

Srutututu93 27 Mar 2017 21:44 849 4
REKLAMA
  • #1 16375709
    Srutututu93
    Poziom 2  
    Witam, mam spory problem i może ktoś z was podpowie mi co robię źle. Chciałbym jednocześnie wyświetlać wartość zmiennej, wpływać na jej wartość po przez wciśnięcie przycisku, robić na niej operacje matematyczne oraz wpływać nią na częstotliwość mrugania diody. Gdy kod jest następujący (pierwszy kod), kompiluję się i działa, natomiast gdy w miejscu _delay_ms(300); zamiast 300 będę chciał użyć wartości zmiennej (drugi kod) np _delay_ms(y); lub w funkcji "czekaj" _delay_ms(x); program nie kompiluję się i wyskakują takie monity:

    implicit declaration of function 'itoa' [-Wimplicit-function-declaration]

    oraz

    pointer targets in passing argument 1 of 'LCD_WriteText' differ in signedness [-Wpointer-sign]

    procesor to atmega8 a środowisko to Eclipse mars

    pierwszy kod:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod




    drugi kod:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod



    Proszę o pomoc męczę się już dużo czasu jak temu zaradzić i nie wiem, liczę na to że to coś błachego oc zym nie wiem lub zapomniałem :)
  • REKLAMA
  • Pomocny post
    #2 16375785
    tronics
    Poziom 38  
    Panie, jakie błędy. Toż to są warningi. Kompilować się powinno o ile nie jest załączona opcja "treat warnings as errors". Po pierwsze primo implicit declaration jest, bo masz zakomentowane stdlib gdzie jest prototyp itoa(). Po drugie primo (specjalnie tak piszę, bo to powiązane) jakbyś zerknął na prototyp to wiedziałbyś, że zwraca *char. Najwidoczniej twoja funkcja obsługi LCD oczekuje unsigned char. I w tym przypadku to w zasadzie nie ma większego znaczenia.
  • REKLAMA
  • REKLAMA
  • #4 16385198
    Srutututu93
    Poziom 2  
    Dziękuję bardzo za odpowiedzi, zakomentowanie to przypadek, tak czy siak wyskakują błędy te same dlatego nie wiedziałem co jest a prób robiłem na prawdę sporo dlatego pisałem bo podejrzewałem jakiś banał którego nie widzę ;)

    Co do używania zmiennej w funkcji _delay_ms() jako argumentu nie wiedziałem, często z tego korzystałem i było w porządku, zatem dziękuję bardzo za wskazówkę.

    Rozwiązałem problem rezygnując ze zmiennej jako argument _delay_ms(), wykorzystując do tego pętle for(),

    Bardzo dziękuję za okazaną pomoc, program działa jak zamierzałem

    Pozdrawiam serdecznie :)
  • #5 16386079
    tronics
    Poziom 38  
    Używanie zmiennej jako argumentu dla _delay_ms() nie jest błędem dlatego programy które kolega wcześniej pisał działały. Niemniej jeśli sprawdziłby kolega wynik kompilacji to powinno być zgodnie z tym co na blogu mikrokontrolery zostało opisane - jak dobrze kojarzę samo wciągnięcie float to już około 3kB flash zjedzone. Dla 8KB mikrokontrolera i wsadu zajmującego kilka kB to prawie niezauważalne, ale co gdyby kolegi program zajmował już ponad 5?
    Jedna z upierdliwych rzeczy eclipse jaką zapamiętałem, to że zaznaczone warningi i błędy nie usuwały się z listingu z boku po poprawieniu, a dopiero zapisaniu zmian w kodzie. Dodatkowo z jakimi opcjami kolega kompiluje? -std=c99? Można spróbować std=gnu11
REKLAMA