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, gcc, Problem z wyświetlaniem ciągów znaków [solved]

duo666 16 Lip 2010 16:50 1314 4
REKLAMA
  • #1 8298918
    duo666
    Poziom 2  
    Witam

    Jestem studentem 2 roku informatyki i wiem co nieco o programowaniu. Jakiś czas temu zacząłem zabawę z mikrokontrolerami. Obecnie próbuję rozgryźć obsługę wyświetlacza LCD pod kontrolerem atmega8. Program piszę w C. Miałem wiele problemów ze zmuszeniem tego cholerstwa do wyświetlenia czegokolwiek. Porad szukałem między innymi tu na forum. W końcu dałem za wygraną, podejrzewałem już że wyświetlacz jest uszkodzony. Spróbowałem jeszcze Bascoma i pod nim o dziwo zadziałało za pierwszym razem. Wrzuciłem więc skompilowany programik wyświetlający "hello world" do AVR Simulator IDE i przyglądając się jakie wartości trafiają do wyświetlacza udało mi się zrozumieć co było nie tak w poprzednim programie. Wersję ostateczną zamieszczam w załączniku.

    Nadal mam jednak problem. Wszystko wydaje się działać prawidłowo, potrafię wyświetlać pojedyncze znaki, jednak funkcja do wyświetlania łańcuchów nie działa prawidłowo. A konkretnie - zasypuje wyświetlacz krzakami. Zacząłem więc kombinować. Kiedy zmodyfikowałem ją w ten sposób:

    void write_text(char *s) { write_char(*s); }


    Prawidłowo wyświetla pierwszy znak. Dopisałem więc inkrementację wskaźnika:

    void write_text(char *s) { write_char(*s); s++; }


    Nadal wszystko w porządku. Jednak kiedy próbuję wyświetlić kolejny znak:

    void write_text(char *s) { write_char(*s); s++; write_char(*s); }


    Zaczyna dziać się magia - oba znaki - i pierwszy i drugi zamieniają się w czarne kwadraty (w symulatorze wiedzę że zamiast prawidłowych kodów ASCII do wyświetlacza trafiają dwie wartości FF).

    Czy ktoś ma jakiś pomysł dlaczego się tak dzieje? Każda odpowiedź będzie mile widziana.
  • REKLAMA
  • REKLAMA
  • REKLAMA
  • Pomocny post
    #4 8299089
    tmf
    VIP Zasłużony dla elektroda
    Kod wydaje się być ok. Najpewniej nie teges jest makefile. Po pierwsze stała F_CPU musi być zdefiniowana w makefile, po drugie jesteś pewien, że kompilujesz na ATMega8? Użyj makefile wygenerowanego przez AVR Studio.

    gaskoin - s++ i potem wyłuskanie przez *s jest tak samo ok jak *s++, więc tu bym się błędów nie dopatrywał.
  • #5 8299397
    duo666
    Poziom 2  
    Problem rozwiązany!

    Rzeczywiście problem był po stronie Makefile. Utworzyłem nowy plik za pomocą MFile z zestawu WinAVR i zadziałało idealnie. Wcześniej używałem jakiejś wersji Makefile znalezionej w necie, która też wydawała się działać, ale jak widać nie do końca.

    Dziękuję wszystkim za pomoc ;)
REKLAMA