Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 22 lip 2025, o 19:25


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
    Autor Wiadomość
    PostNapisane: 30 cze 2013, o 14:23 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 cze 2013
    Posty: 60
    Pomógł: 0

    Witam.
    Od ponad 2 godzin staram się rozwiązać ten problem, jednak bez skutku...
    Na podstawie niebieskiej książki napisałem program dotyczący multipleksowania, jednak gdy chcę skompilować program pojawia się błąd. Mianowicie w pliku d_led.c dokładniej przy tym zapisie:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Treść komunikatu: array subscript has type 'char'

    Poniżej zamieszczę kody poszczególnych plików, aby można było ew. dojść o co biega.

    Kod pliku main.c:

    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Kod pliku d_led.c

    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Kod pliku nagłówkowego d_led.h

    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Jeśli ktoś mógłby mnie naprowadzić na błąd byłbym niezmiernie wdzięczny, ponieważ jestem całkowicie początkującym programistą języka C dla AVR.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 cze 2013, o 14:30 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 19 lut 2013
    Posty: 223
    Zbananowany użytkownik

    Pomógł: 21

    1. Przede wszystkim to błędy podajemy z zakładki console.
    2. Nie definiuj zmiennych w plikach nagłówkowych - chodzi o cyfry[].
    3. Jeżeli umieszczasz coś w PROGMEM to dodaj "const" - w WinAVR nie ma to znaczenia, ale AtmelToolchain syczy i warczy na brak tego parametru.

    _________________
    Nie pisz komentarzy - dobry kod komentuje się sam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 cze 2013, o 14:36 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 cze 2013
    Posty: 60
    Pomógł: 0

    barney napisał(a):
    1. Przede wszystkim to błędy podajemy z zakładki console.
    2. Nie definiuj zmiennych w plikach nagłówkowych - chodzi o cyfry[].
    3. Jeżeli umieszczasz coś w PROGMEM to dodaj "const" - w WinAVR nie ma to znaczenia, ale AtmelToolchain syczy i warczy na brak tego parametru.


    Pytanie do pkt. 2:
    Skoro mam nie umieszczać definicji tej zmiennej w pliku nagłówkowym to gdzie mogę ją umieścić? W pliku d_led.c jako zmienną globalną?

    Pytanie do pkt.3:
    Czyli ma to wyglądać następująco
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 cze 2013, o 14:42 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 19 lut 2013
    Posty: 223
    Zbananowany użytkownik

    Pomógł: 21

    3. Tak.
    2. Z formalnego punktu widzenia jest absolutnie obojętne w którym pliku .c zdefiniujesz zmienną (globalną). Ważne jest aby odniesienie się do niej poprzedzała deklaracja (np. poprzez dołączenie pliku nagłówkowego ją zawierającą).

    _________________
    Nie pisz komentarzy - dobry kod komentuje się sam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 cze 2013, o 14:58 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 cze 2013
    Posty: 60
    Pomógł: 0

    Błąd nadal występuje, ehh... coś robię źle.

    Zastosowałem się (mam taką nadzieję) do Twoich wskazówek, oto kody poszczególnych plików:

    main.c

    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    d_led.c

    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    d_led.h

    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Problem nadal ten sam...
    Proszę o pomoc :(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 cze 2013, o 15:06 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 19 lut 2013
    Posty: 223
    Zbananowany użytkownik

    Pomógł: 21

    Nie skopiowałeś kodu błędu z konsoli.
    Spróbuj zarzutować indeksy tablicy na typ bez znaku ("unsigned char" albo "uint8_t").

    _________________
    Nie pisz komentarzy - dobry kod komentuje się sam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 cze 2013, o 15:14 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 cze 2013
    Posty: 60
    Pomógł: 0

    Oto zapis z konsoli podczas kompilowania, widoczne błędy w pliku d_led.c jednak ku mojemu zdziwieniu po skompilowaniu wszystko działa, ale błędy nadal występują (to chyba nie błędy, ale ostrzeżenia).

    Kod:
    **** Build of configuration Release for project Mulitpleksowanie ****

    make all
    Building file: ../d_led.c
    Invoking: AVR Compiler
    avr-gcc -Wall -Os -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega32 -DF_CPU=16000000UL -MMD -MP -MF"d_led.d" -MT"d_led.d" -c -o"d_led.o" "../d_led.c"
    ../d_led.c: In function '__vector_10':
    ../d_led.c:67: warning: array subscript has type 'char'
    ../d_led.c:69: warning: array subscript has type 'char'
    ../d_led.c:71: warning: array subscript has type 'char'
    ../d_led.c:73: warning: array subscript has type 'char'
    Finished building: ../d_led.c
     
    Building target: Mulitpleksowanie.elf
    Invoking: AVR C Linker
    avr-gcc -Wl,-Map,Mulitpleksowanie.map -mmcu=atmega32 -o"Mulitpleksowanie.elf"  ./d_led.o ./main.o   
    Finished building target: Mulitpleksowanie.elf
     
    Invoking: AVR Create Extended Listing
    avr-objdump -h -S Mulitpleksowanie.elf  >"Mulitpleksowanie.lss"
    Finished building: Mulitpleksowanie.lss
     
    Create Flash image (ihex format)
    avr-objcopy -R .eeprom -O ihex Mulitpleksowanie.elf  "Mulitpleksowanie.hex"
    Finished building: Mulitpleksowanie.hex
     
    Create eeprom image (ihex format)
    avr-objcopy -j .eeprom --no-change-warnings --change-section-lma .eeprom=0 -O ihex Mulitpleksowanie.elf  "Mulitpleksowanie.eep"
    Finished building: Mulitpleksowanie.eep
     
    Invoking: Print Size
    avr-size --format=avr --mcu=atmega32 Mulitpleksowanie.elf
    AVR Memory Usage
    ----------------
    Device: atmega32

    Program:     390 bytes (1.2% Full)
    (.text + .data + .bootloader)

    Data:          6 bytes (0.3% Full)
    (.data + .bss + .noinit)


    Finished building: sizedummy


    BŁĄD JUŻ ZNIKNĄŁ! Dzięki za pomoc. ;)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 cze 2013, o 15:23 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 19 lut 2013
    Posty: 223
    Zbananowany użytkownik

    Pomógł: 21

    To nie błąd, a ostrzeżenie. Ostrzeżenia można ignorować, ale zazwyczaj oznaczają one, że kompilator wolałby, żebyśmy potwierdzili, że wiemy co robimy. Dobrze jest dążyć do braku ostrzeżeń.
    Informacje o ostrzeżeniu znikną jeżeli ponownie zbudujemy projekt bez jakiejkolwiek jego zmiany.
    Jeżeli zrobisz "make clean" to po ponownej kompilacji znowu będziesz miał te ostrzeżenia. Sprawdzałeś czy rzutowanie na typ bez znaku rozwiązuje problem?

    _________________
    Nie pisz komentarzy - dobry kod komentuje się sam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 19 gości


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO