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



Teraz jest 12 gru 2024, o 00:40


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 1 lip 2016, o 12:21 
Offline
Nowy

Dołączył(a): 19 kwi 2016
Posty: 21
Pomógł: 0

Witam ostatnio mam problem tego typu, że gdy chcę użyć makr z książki to wyrzuca mi błędy.


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


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


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.



Błędy:
13:17:54 **** Incremental Build of configuration Release for project Projekt_z_glowy ****
make all
'Building file: ../przerwanie.c'
'Invoking: AVR Compiler'
avr-gcc -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega8 -DF_CPU=8000000UL -MMD -MP -MF"przerwanie.d" -MT"przerwanie.o" -c -o "przerwanie.o" "../przerwanie.c"
In file included from ../przerwanie.c:2:0:
../przerwanie.c: In function 'ini':
../definicje.h:31:18: error: pasting "DDR" and "(" does not give a valid preprocessing token
#define SDDR(x) (DDR##x)
^
../definicje.h:30:16: note: in expansion of macro 'SDDR'
#define DDR(x) SDDR(x)
^
../przerwanie.c:6:2: note: in expansion of macro 'DDR'
DDR(P_CYFR) |= (A | B | C | D | E | F | G | DOT );
^
../przerwanie.c:6:2: warning: implicit declaration of function 'DDR' [-Wimplicit-function-declaration]
../przerwanie.c:6:14: error: lvalue required as left operand of assignment
DDR(P_CYFR) |= (A | B | C | D | E | F | G | DOT );
^
In file included from ../przerwanie.c:2:0:
../definicje.h:25:19: error: pasting "PORT" and "(" does not give a valid preprocessing token
#define SPORT(x) (PORT##x)
^
../definicje.h:24:17: note: in expansion of macro 'SPORT'
#define PORT(x) SPORT(x)
^
../przerwanie.c:7:2: note: in expansion of macro 'PORT'
PORT(P_CYFR) &=~ (A | B | C | D | E | F | G | DOT );
^
../przerwanie.c:7:2: warning: implicit declaration of function 'PORT' [-Wimplicit-function-declaration]
../przerwanie.c:7:15: error: lvalue required as left operand of assignment
PORT(P_CYFR) &=~ (A | B | C | D | E | F | G | DOT );
^
In file included from ../przerwanie.c:2:0:
../definicje.h:31:18: error: pasting "DDR" and "(" does not give a valid preprocessing token
#define SDDR(x) (DDR##x)
^
../definicje.h:30:16: note: in expansion of macro 'SDDR'
#define DDR(x) SDDR(x)
^
../przerwanie.c:9:2: note: in expansion of macro 'DDR'
DDR(P_ANOD) |= (A1 | A2 | A3 | A4);
^
../przerwanie.c:9:14: error: lvalue required as left operand of assignment
DDR(P_ANOD) |= (A1 | A2 | A3 | A4);
^
In file included from ../przerwanie.c:2:0:
../definicje.h:25:19: error: pasting "PORT" and "(" does not give a valid preprocessing token
#define SPORT(x) (PORT##x)
^
../definicje.h:24:17: note: in expansion of macro 'SPORT'
#define PORT(x) SPORT(x)
^
../przerwanie.c:10:2: note: in expansion of macro 'PORT'
PORT(P_ANOD) |= (A1 | A2 | A3 | A4);
^
../przerwanie.c:10:15: error: lvalue required as left operand of assignment
PORT(P_ANOD) |= (A1 | A2 | A3 | A4);
^
make: *** [przerwanie.o] Błąd 1

Wie ktoś czym to jest spowodowane?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2016, o 13:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1164
Lokalizacja: Kraków
Pomógł: 93

A czy po słowie #include nie powinno być spacji? Pliki main.c i przerwanie.c



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2016, o 13:44 
Offline
Nowy

Dołączył(a): 19 kwi 2016
Posty: 21
Pomógł: 0

Dodałem spacje i nic to nie zmienia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2016, o 16:20 
Offline
Użytkownik

Dołączył(a): 18 kwi 2013
Posty: 181
Lokalizacja: Kraków
Pomógł: 30

Makra działają dobrze, tylko zrobiłeś w kodzie lekki galimatias. Najpierw definiujesz:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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


czyli ostatecznie w nazwie portu zostaje podstawiona wartość np. (1<<2) zamiast litery C i (1<<3) zamiast litery D. To samo dzieje się przy podstawianiu do DDR().
Poprostu inaczej oznacz segmenty. Użyj małych liter albo dodaj przed nimi podkreślnik: _A, _B....


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2016, o 17:21 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27315
Lokalizacja: Szczecin
Pomógł: 1041

janusz17 napisał(a):
Makra działają dobrze, tylko zrobiłeś w kodzie lekki galimatias.


Bo jak autor wątku myśli dlaczego w Bluebooku są nazwy

SEG_A, SEG_B itd a nie jakieś jednoliterowe kikuty A, B itp ???

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2020, o 00:11 
Offline
Nowy

Dołączył(a): 12 kwi 2015
Posty: 2
Pomógł: 0

Witam , mam podobny problem,compilator twierdzi ze nie zdeklarowalem nazwy RESET2

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


Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2020, o 00:15 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27315
Lokalizacja: Szczecin
Pomógł: 1041

Najlepiej w ogóle nie używać takich makr

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2020, o 07:57 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2587
Pomógł: 128

Brak jednego argumentu?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2020, o 22:25 
Offline
Nowy

Dołączył(a): 12 kwi 2015
Posty: 2
Pomógł: 0

Witam panie Mirku;
z calym szacunkiem rozumiem ze ma pan pelne rece roboty i czasu brak dla wszytkich
entuzjastow ale w BB pisal pan o makrach upraszczajacych dostep do portow,
wiec zapytalem,
a tu tak na nie :) ...
ale zrozumialem przeslanie...chyba przez lenistwo zawracam glowe zamiast poszukac :) ,
i tu dla innych zanim zapytaja :

//forum.atnel.pl/post974.html#p974
i
//mirekk36.blogspot.com/2011/12/jezyk-c-makra-upraszczajace-dostep-do.html
i tak na marginesie kolego micki,
chwile to trwalo ale znalazlem idac panskim tropem ,
sam sie pograzylem przy deklaracji podalem pin nie deklarujac portu :D,
brak jednego argumentu wygenerowal blad :)))



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2020, o 23:17 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2587
Pomógł: 128

No i pięknie! O to chodziło - wędka, nie ryba ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 paź 2020, o 10:39 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27315
Lokalizacja: Szczecin
Pomógł: 1041

mario.ie napisał(a):
ale zrozumialem przeslanie...chyba przez lenistwo zawracam glowe zamiast poszukac

Wcale to nie było moim przesłaniem .... tu kolega troszkę popłynął w domysłach niestety, a nawet mocno popłynął.

To, że w Bluebooku pokazywałem takie makra to było przede wszystkim po to żeby pokazać możliwości preprocesora i lepiej nauczyć czytelnika jak można z tego korzystać .... krótko mówiąc w celach dydaktycznych.

Na dzień dzisiejszy nie przez żadne zapracowanie tylko normalnie i otwartym tekstem odradzam stosowanie takich makr, a jak widzę że ktoś tak sobie to tłumaczy jak kolega - to nawet nie będę wyjaśniał dlaczego, powiem tylko że i tak ...i tak sam z nich za jakiś czas zrezygnujesz i sam zobaczysz dlaczego ... później będzie trzeba przerabiać różne swoje kody - szczególnie te starsze gdzie będziesz miał naćkane tych makr. Ale dobrze ucz się na własnych błędach - może dłużej zajmie, ale za to nikt ci tego nie odbierze ;) ... tak czy inaczej powodzenia !

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



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: 11 ] 

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