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

Obsługa LCD w C na atmega8

mystix 17 Lip 2017 20:05 852 4
  • #1 16593188
    mystix
    Poziom 8  
    Witam, jestem początkujący i w programowaniu i w nC, wiem, że temat stary i w ogóle, ale może ktoś zaspokoi moją ciekawość i rodzącą się wściekłość na LCD. Korzystam ze środowiska atmel studio i książki "AVR, ARM7. Programowanie mikrokontrolerów dla każdego" i stamtąd wziąłem kod na testy który się nie kompiluje. Problemem jest to miejsce:

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


    Jakkolwiek bym nie podstawiał zawsze ilość znaków które przypiszę do zmiennej tablicowej napis jest za mała dla podanej przeze mnie. Czemu nawet jeśli dam dwa znaki np. char napis[2] = "AB"; pojawia się błąd "initializer-string for array of chars is too long [-fpermissive]".
    Poza tym wszystkie przykłady jakie oglądam w internecie nie mają przy bibliotece util/delay.h zdefiniowanego parametru F_CPU i nie rozumiem czemu skoro mi bez tego się nie kompiluje.
    Po wprowadzeniu zmian umożliwiających skompilowanie programu wgranie go powoduje tylko wyświetlenie wszystkich pixeli górnego wiersza wyświetlacza, żadnych liter. Proszę o pomoc bo już jestem zdesperowany.
  • #2 16593237
    Stefan_2000
    Poziom 19  
    mystix napisał:
    Czemu nawet jeśli dam dwa znaki np. char napis[2] = "AB"; pojawia się błąd "initializer-string for array of chars is too long [-fpermissive]".

    Bo napis "AB" ma trzy znaki: 'A', 'B' i znak o kodzie zero oznaczający koniec napisu.
  • #3 16593263
    mystix
    Poziom 8  
    W wielu przykładach piszą w ten sposób, albo jakieś hello world i przypisane mają dokładnie tyle znaków ile ma cały ciąg bez żadnego dodatkowego oznaczającego koniec. Nie wiem czy to błąd wklejających listingi czy co?
    Nie zmienia to faktu, że nawet jak dodam jeden więcej znak do tablicy to dalej nie działa niestety.
  • #4 16593325
    electronics_design

    Poziom 14  
    No niestety nie błąd przepisujących listingi :) widzisz gdyby każdy ciąg znaków był zakończony 0 to nie potrzebny byłby drugi argument funkcji WyswietlLCD prawda? Normalnie wyświetlałbyś napis tak długo aż znak będzie miał wartość 0. Nie wszystkie kompilatory zgłoszą Ci błąd przy podaniu ciągu znaków dłuższego niż zadeklarowany rozmiar tablicy, co więcej jak zaczniesz posługiwać się wskaźnikami typu char* na ciąg znaków to sam będziesz musiał pilnować żeby znana była długość ciągu albo tak jak powinno być - czy jest zakończony wartością 0.
  • #5 16593361
    mystix
    Poziom 8  
    Podanie argumentu w kolejnej funkcji raczej nie ma znaczenia przy błędzie z rozmiarem tablicy, ale ja się nie znam za bardzo dla tego jestem dociekliwy, w każdym razie rozumiem już czem kompilator się czepia (mimo, że nie ogarniam czemu inni pisząc bardzo podobne funkcje nie musieli zwracać uwagi na znak zerowy na końcu). Przedstawię wam też "mój" kod z którym pewnie nie raz się spotkaliście w internetach i proszę o diagnozę, może czegoś nie dopatrzyłem, albo jakiś błąd logiczny się wkradł. Z góry dzięki za pomoc Panowie.

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