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



Teraz jest 8 lut 2025, o 05:46


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 1 paź 2015, o 06:32 
Offline
Nowy

Dołączył(a): 22 wrz 2015
Posty: 24
Pomógł: 0

Środowisko Eclipse i AVRToolchain

Witam

Chciałbym zapytać czy jest jakiś sposób zaimportowania mojej biblioteki tak aby była widoczna z wszystkich pozostałych zaimportowanych bibliotek.

Zobrazuję o co mi chodzi. Do głównego programu importuję bibliotekę #include "Math_Conv.h" zawarte w niej procedury i funkcje będę chciał używać z innych importowanych bibliotek programu głównego np: #include "Lcd.h" i np #include "Uart.h".

I teraz jest problem jak uzyskać funkcjonalność bibliotek z "Math_Conv.h" tak aby były widoczne z bibliotek "Lcd.h" i "Uart.h" coś w stylu Extern dla procedur.
Czy konieczne jest importowanie biblioteki "Math_Conv.h" do każdej z pozostałych bibliotek ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2015, o 06:57 
Offline
Moderator
Avatar użytkownika

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

Nie ma żadnego extern, za to jest

#include i tym się musisz posłużyć w każdym z plików gdzie chcesz mieć ją dostępną

_________________
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: 1 paź 2015, o 08:53 
Offline
Nowy

Dołączył(a): 22 wrz 2015
Posty: 24
Pomógł: 0

Importowanie jej jest trochę problematyczne ponieważ w tej bibliotece muszę mieć zadeklarowaną tablicę static char 32 znakową i jak importuję tą bibliotekę do kilku innych to mi za każdym importem biblioteki tworzy nową tablicę i automatycznie zmniejsza się RAM dodatkowo każdy import korzysta ze swojej tablicy a potrzeba jest aby tablica była jedna. Wiem że można tablicę zadeklarować w głównym programie i problem rozwiązany ale trzeba za każdym razem gdy ją importujemy w innym programie pamiętać aby dodać tablicę w głównym programie. Może jest jakiś sposób aby obejść ten powiedzmy problem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2015, o 09:54 
Offline
Moderator
Avatar użytkownika

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

Bo coś STRASZNIE ale to strasznie kręcisz .... robisz wręcz jakąś masakrę ...

Pomijam już, sam fakt, że podlinkowywanie innych modułów do bibliotek LCD czy UART może kompletnie nie mieć sensu, bo zwykle robi się to inaczej, aż ciekaw jestem po co ci podlinkować tę bibliotekę do bibliotek - (mógłbym się prawie założyć- że już na tym etapie popełniasz błąd jeśli chodzi o samą ideę tworzenia projektu) .... To jeszcze na dodatek nie rozumiesz całkowicie co to znaczy DEKLARACJA a co DEFINICJA zmiennych ...

Masz Bluebooka ? Bo w nim dokładnie opisuję nie tylko różnice pomiędzy tak PODSTAWOWYMI pojęciami w C jak Deklaracja i Definicja (bez zrozumienia których) każdy wciąż kręci się jak bączek w kółko - z takimi problemami jakie ty teraz dokładnie opisujesz - to jeszcze w tej książce opisuję zasady jak się dzieli projekt na pliki - jak i co w jakiej kolejności się inkluduje itp itd

_________________
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: 1 paź 2015, o 10:21 
Offline
Nowy

Dołączył(a): 22 wrz 2015
Posty: 24
Pomógł: 0

Widzę że się nie do końca zrozumieliśmy ale to moja wina bo nie potrzebnie użyłem jako przykładu nazw bibliotek LCD i UART a powinienem użyć określenia biblioteka "A" i biblioteka "B" oraz biblioteka która ma być widoczna w obu wcześniejszych "C". Co do deklaracji i definicji błąd wynikł z pośpiechu w pisaniu. Opisany problem nie ma nic wspólnego z Pana bibliotekami z BB a wynika ze specyfiki moich projektów a konkretnie z uniwersalności szybkiego dołączania ich do kolejnych projektów. Biblioteka "C" zawiera dużo procedur arytmetycznych i funkcji które są używane praktycznie wszystkie w bibliotekach "A" i "B". Jeżeli importujemy bibliotekę "C" do obu bibliotek "A" i "B" kod wynikowy potężnie się rozrasta.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2015, o 10:58 
Offline
Moderator
Avatar użytkownika

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

zbynex napisał(a):
Jeżeli importujemy bibliotekę "C" do obu bibliotek "A" i "B" kod wynikowy potężnie się rozrasta.

Nic się nie rozrasta ... jeśli się wszystko prawidłowo inkluduje to jedna biblioteka jest dołączana TYLKO JEDEN RAZ do całego projektu ..... Więc jeśli tobie się rozrasta to :

1. albo w jakiś przedziwny sposób inkludujesz pliki źródłowe *.c .... zamiast tylko *.h
2. albo w jakiś dziwny sposób definiujesz i deklarujesz zmienne, że w każdym pliku ci się tworzą - jak pisałeś wyżej. A gdyby ci się nawet tworzyły to kompilator by krzyczał i tak stadem warningów i błędów że masz powielone definicje jakichś tam zmiennych i kompilacja by ci nie przeszła

więc zrozum .... albo odniesiesz się do jakiejś konkretnej sytuacji np pokażesz fragmenty kodu jak ty to robisz to wtedy będzie można coś pomóc ... bo na 100% robisz coś bardzo bardzo źle

_________________
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: 1 paź 2015, o 20:40 
Offline
Użytkownik

Dołączył(a): 13 lut 2015
Posty: 99
Pomógł: 6

plików .c nie includuje się nigdy gdy nie kombinujesz z flagami '-fwhole-program'

a .h muszą być zawsze zabezpieczone przez coś takiego:
Składnia: [ Pobierz ] [ Ukryj ]
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


A rozrastanie się kodu wynikowego w przypadku dzielenia źródeł na oddzielne pliki wynika z tego że gcc kompiluje każdy plik .c w oddzielnej jednostce kompilacji i nie wie że np. procedura foo() jest używana tylko raz z argumentem znanym w czasie kompilacji i nie może zostać właśnie przez to zoptymalizowana. Najgorsze co można zrobić to wywołanie zewnętrznej funkcji w przerwaniu.

------------------------ [ Dodano po: 7 minutach ]

Sytuacja gdzie jakieś konkretne biblioteki wymagają includowania jakiejś innej zupełnie z nimi nie związanej nie powinna mieć miejsca. Jeśli już jakieś zewnętrze funkcje mają być wykonywane to przez callbacki.

_________________
AVR-UART-lib
AVR-FAST-ENCODER
RFM7x-lib



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2015, o 21:52 
Offline
Użytkownik

Dołączył(a): 13 lut 2015
Posty: 99
Pomógł: 6

mokrowski napisał(a):
jnk0le napisał(a):
..Najgorsze co można zrobić to wywołanie zewnętrznej funkcji w przerwaniu.

??? że jak???


Zobacz sobie co się dzieje w pliku .lss gdy w przerwaniu mamy bezpośrednio wklepany kod (np. miganie ledem), a co kiedy wywołujemy równoznaczną zewnętrzną funkcję (najlepiej żeby jeszcze pochodziła z innego pliku .c)

http://www.elektroda.pl/rtvforum/viewto ... 8#14930328

mokrowski napisał(a):
jnk0le napisał(a):
Sytuacja gdzie jakieś konkretne biblioteki wymagają includowania jakiejś innej zupełnie z nimi nie związanej nie powinna mieć miejsca. Jeśli już jakieś zewnętrze funkcje mają być wykonywane to przez callbacki.

??? jeszcze raz ...
Albo nie rozumiem skrótu myślowego albo ... to bzdury jakieś...

Osoba A dostarcza bibliotekę A', osoba B - B'; C żeby skorzystać z funkcjonalności B' musiał zaincludować B' w nagłówku A' co oznacza że osoba A kompletnie nie przemyślała konstrukcji swojej biblioteki. A od takiego includowania mamy krótką drogę do zależności kołowych.

Cytuj:
Zobrazuję o co mi chodzi. Do głównego programu importuję bibliotekę #include "Math_Conv.h" zawarte w niej procedury i funkcje będę chciał używać z innych importowanych bibliotek programu głównego np: #include "Lcd.h" i np #include "Uart.h".


Inna sytuacja jest gdy biblioteki mają jakąś ściśle określoną hierarchię względem siebie.

_________________
AVR-UART-lib
AVR-FAST-ENCODER
RFM7x-lib



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 paź 2015, o 20:58 
Offline
Użytkownik

Dołączył(a): 13 lut 2015
Posty: 99
Pomógł: 6

Spłaszczanie kodu wychodzi ładnie jedynie w obrębie funkcji głównej oraz kod niezależny od ABI .
Wystarczy jedno odwołanie do jakiejkolwiek funkcji w przerwaniu i kompilator zrzuca "R0, R1 i R18 do R31" mimo że np. żaden z nich nie zostanie użyty, i to ma być spłaszczanie ?

1. GCC 4.8.1 ma zabugowane -flto, nie wiem czy w nowszych działa. A -fwhole-program to nie jest coś co się używa tak łatwo jak np. -O2
2. callbacki da się używać nawet bez żadnych rejestracji. ;)
3. Zastanówmy się raczej do czego właściwie dążył autor wątku z bezpośrednim doklejaniem bibliotek do innych i do czego by to ostatecznie doprowadziło.

Cytuj:
Pomijam już, sam fakt, że podlinkowywanie innych modułów do bibliotek LCD czy UART może kompletnie nie mieć sensu, bo zwykle robi się to inaczej, aż ciekaw jestem po co ci podlinkować tę bibliotekę do bibliotek

_________________
AVR-UART-lib
AVR-FAST-ENCODER
RFM7x-lib



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 paź 2015, o 09:44 
Offline
Użytkownik

Dołączył(a): 13 lut 2015
Posty: 99
Pomógł: 6

Kod:
00000080 <__vector_24>:
  80:   1f 92          push   r1
  82:   0f 92          push   r0
  84:   0f b6          in   r0, 0x3f   ; 63
  86:   0f 92          push   r0
  88:   11 24          eor   r1, r1
  8a:   2f 93          push   r18
  8c:   3f 93          push   r19
  8e:   4f 93          push   r20
  90:   5f 93          push   r21
  92:   6f 93          push   r22
  94:   7f 93          push   r23
  96:   8f 93          push   r24
  98:   9f 93          push   r25
  9a:   af 93          push   r26
  9c:   bf 93          push   r27
  9e:   ef 93          push   r30
  a0:   ff 93          push   r31
  a2:   ec df          rcall   .-40        ; 0x7c <ledblink>
  a4:   ff 91          pop   r31
  a6:   ef 91          pop   r30
  a8:   bf 91          pop   r27
  aa:   af 91          pop   r26
  ac:   9f 91          pop   r25
  ae:   8f 91          pop   r24
  b0:   7f 91          pop   r23
  b2:   6f 91          pop   r22
  b4:   5f 91          pop   r21
  b6:   4f 91          pop   r20
  b8:   3f 91          pop   r19
  ba:   2f 91          pop   r18
  bc:   0f 90          pop   r0
  be:   0f be          out   0x3f, r0   ; 63
  c0:   0f 90          pop   r0
  c2:   1f 90          pop   r1
  c4:   18 95          reti

_________________
AVR-UART-lib
AVR-FAST-ENCODER
RFM7x-lib



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

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