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



Teraz jest 24 gru 2024, o 17:19


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 ]
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 ]
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 ]
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 ]
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 ]
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 ]
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 1 gość


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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO