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



Teraz jest 2 gru 2024, o 17:42


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 26 wrz 2014, o 02:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 maja 2014
Posty: 317
Pomógł: 19

Chodzi Tobie Weles o błędne działanie samego Eclipse'a? -(w sensie że nie wykrywa zaincludowanych funkcji jak ma to np. pakiet Borlanda 6, czy tam Embarcadero),
czy o to jak wykonuje się samo dzielenie programu w c (projektu) w taki sposób, aby kod main można było przejrzeć nie używając scroll'a?

Jeśli to drugie, to najbardziej konkretna odpowiedź jest zawarta w bluebook'u Pana Mirka. W skrócie ja wykonałbym to tak, że do plików *.h (nagłówkowych) które już masz porobiłbym im odpowiednie pliki *.c, np. do drv_gate.h dorobiłbym drv_gate.c
Dalej te pliki kolejnych modułów, np. drv_gate.h, drv_gate.c, drv_heat_water.h, drv_heat_water.c załączasz normalnie do głównego pliku main.c jak to robiłeś do tej pory. Komplilator widząc plik nagłówkowy (*.h) szuka jego pliku z kodem (*.c). Zasada jest taka, że w plikach *.h trzymasz deklaracje zmiennych i funkcji, a w pliku *.c odpowiadające im definicje zmiennych i funkcji. Plik main.c "widzi" to wszystko, z tym, że jeśli jakaś zmienna ma być globalna w całym projekcie to powinna być poprzedzona dyrektywą extern. Nie wiem, czy dość jasno to opisałem... Najwyżej dopiszę.
Jeśli chodzi o ustawianie środowiska Eclipse, to na tym forum są ludzie którzy dużo lepiej potrafią to wytłumaczyć. Ja jeszcze za słabo znam Eclipse...

Tak poza tym widziałem Twój projekt inteligentnego domu. Jestem pod wielkim, pozytywnym wrażeniem! 8-) :shock: :shock: :shock: 8-)

Pozdrawiam z Pomorza! ;) Jarek


Autor postu otrzymał pochwałę

_________________
"O sygnałach bez całek" Czesław Frąc



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 wrz 2014, o 09:26 
Offline
Użytkownik

Dołączył(a): 05 lut 2013
Posty: 302
Pomógł: 19

Ojej!
Dawno nie widzialem takiego kodu w C. Owszem bedzie to dzialac jako tako. Ale jak widac 'nowsze' interpretacje zasady dzialania #include sobie z tym nie radza, bo nie powinno sie stosowac w taki sposob includow.

Traktujesz includy na zasadzie:
- o, a ten fragment kodu przerzuce sobie do innego pliku, zeby mi sie wygodniej czytalo
a nalezy je traktowac jako biblioteki zawierajace konkretne funkcje i definicje.

Mysle ze powinienes troche sie cofnac i odswiezyc podstawy jezyka C.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 wrz 2014, o 09:36 
Offline
Użytkownik

Dołączył(a): 05 lut 2013
Posty: 302
Pomógł: 19

elganckiego sposobu nie ma bo, nie jest to zalecany sposob kodowania.

Sprobuj tak:
- zmien nazwe pliku na systemie (nie ecplipsem) TEST_SENSORA.h na TEST_SENSORA.wnc
- w nowym projekcie zaincluduj 'TEST_SENSORA.wnc'.

Tak a nie inaczej, zeby wykluczyc ze eclipse nauczyl sie ze mial juz taki plik w projekcie (w makefile w szczegolnosci).
Jest szansa ze jak nie rozpozna rozszerzenia to nie bedzie probowal cos z tym zrobic poza includowaniem.

ps. nie wiem czy to zadziala.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 wrz 2014, o 11:50 
Offline
Moderator zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 18 lip 2012
Posty: 3206
Lokalizacja: Kraków - obok FAB5 ATMEL'a
Pomógł: 91

Weles napisał(a):
//PA4 <INPUT> -NC (EXT5-WEJCIE POPRZEZ TRANSOPTOR)
PORTA |= (1<<PA4); //PODCIAGNIECIE DO VCC
//PA5 <INPUT> -NC (EXT6-WEJCIE POPRZEZ TRANSOPTOR)
PORTA |= (1<<PA5); //PODCIAGNIECIE DO VCC
//PA6 >OUTPUT< -PRZEKAZNIK ( DYSTRYBUTOR )
DDRA |= (1<<PA6); //OUTPUT
PORTA |= (1<<PA6); //PODCIAGNIECIE DO VCC
//PA7 >OUTPUT< -PRZEKAZNIK ( WENTYLACJA )
DDRA |= (1<<PA7); //OUTPUT
PORTA |= (1<<PA7); //PODCIAGNIECIE DO VCC

#endif


Przy tylu postach nie wiedzieć jak wstawiamy listingi? Daję czas do północy na poprawienie postu, później leci ostrzeżenie.

_________________
http://www.jaglarz.info



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 wrz 2014, o 17:16 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 maja 2014
Posty: 317
Pomógł: 19

Nie wiem czy to ważne, ale w zasadzie plik nagłówkowy *.h (z ang. header) może mieć dowolne rozszerzenie (nie tylko h). Poza tym Kolega Mokrowski dokładnie opisał całą najważniejszą esensję, czyli że przy już na etapie projektowania (ale jeszcze nie programowania) bierze się pod uwagę podział logiczny i funkcjonalny całego projektu. Logiczny mam na myśli to na ile plików (modułów) będzie to podzielone, funkcjonalny czyli jakie funkcje będą posiadały kolejne moduły.

Kiedyś Pan prof. Jerzy Grębosz opisywał w "Symfonii C++" taki ciekawy problem (podaję go tutaj jako typowy problem logiczny):
Mamy 3 zegary sterujące czujnikami temperatury i chodzi o to, żeby W TYM SAMYM czasie co do milisekundy były odpalone. Jak dobrze zsynchronizować te 3 zegary? -Wprowadza się 4-ty zegar typu master, który posiada JEDEN i ten sam czas i w oparciu o to synchronizowana jest reszta zegarów. Nie wiem, może to co piszę to tutaj może się wydać, że to bzdury, ale PORÓWNANIE problemu wysterowania zegarów i kontroli nad projektem jest takie, że funkcja main.c to taki jakby zegar master, a cała reszta plików (modułów = *.h + *.c) to mogą być albo slave'y, albo kolejne mastery (jednak jako mastery podrzędne w stosunku do głównego mastera main.c).

Obrazek

Strzałka na rysunku wskazuje agregację. Grot strzałki wskazuje na plik(i) które są nadrzędne w stosunku do drugiego końca strzałki. Pliki nadrzędne zawierają w sobie dyrektywy include ładujące potrzebne im moduły (funkcje i zmienne). Na żółto zaznaczona funkcja (moduł) nadrzędna - główny kontroler, czyli tzw. master (w ujęciu master/slave). Na zielono zaznaczone są moduły (funkcje) nadrzędne w stosunku do modułów białych (czujników), ale podrzędne w stosunku do głównego kontrolera (głównego mastera).
Teraz co do samego języka c stosuje się jeszcze dyrektywy preprocesora (np. ifndef, define etc.), bo dalej gdyby miały wchodzić pojęcia typu klasy, funkcje i zmienne wbudowane, to wtedy wkraczamy w język C++. Tam to już inaczej niektóre sprawy się rozwiązuje (enkapsulacja, dziedziczenie, klasy abstrakcyjnie, etc., typy private, protected, public). Moje osobiste zdanie jest takie, że do celów zbudowania np. sterownika inteligentnego domu sam język avr c spokojnie wystarczy. Należy uważać na dostęp do zmiennych i załączenie odpowiednich nagłówków.

Na koniec przepraszam, że używam niezbyt specjalistycznego języka, ale.. cóż.. uważam, że czasem trzeba napisać coś prościej - nawet jeśli jako tłumaczący (czyli ja) mam wyjść na głupka, bo chcąc dobrze mimo wszystko pomyli jakieś pojęcia. Takie ryzyko. ;) A na egzaminie nie jestem, tylko na przyjaznym forum, gdzie czy pochwały, czy wytknięcie błędów jest mile widziane. ;)

Pozdrawiam! Jarek

P.S. Kolego Moderatorze Jaglarz, chyba nie użyłem odpowiedniej składni do kodu na moim rysunku... Upss.. ;)


Autor postu otrzymał pochwałę

_________________
"O sygnałach bez całek" Czesław Frąc



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 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