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



Teraz jest 3 mar 2025, o 23:53


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 
Autor Wiadomość
PostNapisane: 28 lut 2019, o 19:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

Witam , jak się zachowuje funkcja inline wiem że użycie jej powoduje nie odkładanie na stos adresu powrotu i argumentu, który jest do niej przekazywany a całe ciało jest przetrzymywanie w pamięci programu FLASH a nie RAM i wklejany jest cała funkcja w miejsce wywołania , a co się dzieje z argumentem przekazywanym z wywołania tej funkcji ?
gdzie on jest przetrzymywany skoro nie na stosie?
wywołanie :

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

nagłówek definicjii /deklaracjii wygląda tak

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


a wywołując ją przekazujemy do niej argument z którym ona musi pracować zmienna uint8_t stan no i właśnie gdzie jest zapisywany taki argument ? uint8_t stan jest przetrzymywany w pamięci flash również ,i tam zachodzą wszelkie operację matematyczne w oparciu o tą pamięć programu (flash)?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 mar 2019, o 07:43 
Offline
Użytkownik

Dołączył(a): 20 sty 2014
Posty: 56
Pomógł: 4

procek87 napisał(a):
a całe ciało jest przetrzymywanie w pamięci programu FLASH a nie RAM

a od kiedy zwykłe funkcje są przechowywane w pamięci RAM



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 mar 2019, o 07:47 
Offline
Moderator
Avatar użytkownika

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

procek87 napisał(a):
Witam , jak się zachowuje funkcja inline wiem że użycie jej powoduje nie odkładanie na stos adresu powrotu i argumentu

A skąd się dowiedziałeś takich herezji ? Mam nadzieję, że nie odpowiesz, że z Bluebooka ? ... Z podpisu na forum widać, że masz Bluebooka - to może jednak do niego zajrzyj (tam masz WSZYSTKO opisane i przedstawione jak należy) - zamiast szukać gdzieś (hmmm może w necie) takich herezji ;)

_________________
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 mar 2019, o 18:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

No tak Panowie zgadza się ale w zwykła funkcja może wyglądać tak:
void atnel (void){}
ciało tej funkcji umiejscowione jest we Flashu ale czy adres powrotu też ? wydaje mi się że nie tylko na stos.

Innym przypadkiem jest :
void atnel (uint8_t stan){}
ciało funkcji zajmuje miejsce we flashu , ale argument stan jest tworzony na stos i czeka sobie na przyjęcie wartości wraz z adresem powrotu do miejsca skąd została wywołana .

kolejnym przypadkiem jest funkcja inline:

inline void atnel(uint8_t stan){}
ciało funkcji również zajmuje miejsce we flashu z tym że nie posiada adresu powrotu ,który jest odkładany na stos ,no i właśnie tu dochodzę do mojego pytania ciało tej funkcji jest wstawiane w miejsce jej wywołania
atnel(1);
a co z argumentem 1 przekazywany i umiejscowiony jest w pamięci flash czy stos ramu ?.
gdzie jest umiejscowiony argument stan i w jaki sposób jest on przekazywany do funkcji?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 mar 2019, o 18:56 
Offline
Moderator
Avatar użytkownika

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

procek87 napisał(a):
void atnel (void){}
ciało tej funkcji umiejscowione jest we Flashu ale czy adres powrotu też ? wydaje mi się że nie tylko na stos.

Innym przypadkiem jest :
void atnel (uint8_t stan){}
ciało funkcji zajmuje miejsce we flashu , ale argument stan jest tworzony na stos i czeka sobie na przyjęcie wartości wraz z adresem powrotu do miejsca skąd została wywołana .

kolejnym przypadkiem jest funkcja inline:

inline void atnel(uint8_t stan){}
ciało funkcji również zajmuje miejsce we flashu z tym że nie posiada adresu powrotu ,który jest odkładany na stos ,no i właśnie tu dochodzę do mojego pytania ciało tej funkcji jest wstawiane w miejsce jej wywołania


Panie zajrzyj do Bluebooka bo mi ręce opadają od tego co tu napisałeś - i nie pisz więcej tego bo no aż kości strzykają poza gęsią skórką ... Mówiłem ci że BB masz to opisane dokładnie - jeśli powołasz się na to co w BB i dopytasz czego nie rozumiesz - to ok mogę coś pomóc ale takie herezje ciężko komentować nawet ...

------------------------ [ Dodano po: kilkunastu sekundach ]

nie wiem gdzie się tego naczytałeś ale jak najszybciej porzuć czytanie tej strony internetowej zanim całkiem ci się pomiesza do końca - i nie piszę tego broń Boże złośliwie

_________________
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 mar 2019, o 19:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

mirekk36 napisał(a):
procek87 napisał(a):
void atnel (void){}
ciało tej funkcji umiejscowione jest we Flashu ale czy adres powrotu też ? wydaje mi się że nie tylko na stos.

Innym przypadkiem jest :
void atnel (uint8_t stan){}
ciało funkcji zajmuje miejsce we flashu , ale argument stan jest tworzony na stos i czeka sobie na przyjęcie wartości wraz z adresem powrotu do miejsca skąd została wywołana .

kolejnym przypadkiem jest funkcja inline:

inline void atnel(uint8_t stan){}
ciało funkcji również zajmuje miejsce we flashu z tym że nie posiada adresu powrotu ,który jest odkładany na stos ,no i właśnie tu dochodzę do mojego pytania ciało tej funkcji jest wstawiane w miejsce jej wywołania


Panie zajrzyj do Bluebooka bo mi ręce opadają od tego co tu napisałeś - i nie pisz więcej tego bo no aż kości strzykają poza gęsią skórką ... Mówiłem ci że BB masz to opisane dokładnie - jeśli powołasz się na to co w BB i dopytasz czego nie rozumiesz - to ok mogę coś pomóc ale takie herezje ciężko komentować nawet ...

------------------------ [ Dodano po: kilkunastu sekundach ]

nie wiem gdzie się tego naczytałeś ale jak najszybciej porzuć czytanie tej strony internetowej zanim całkiem ci się pomiesza do końca - i nie piszę tego broń Boże złośliwie


a co napisałem nie tak ? mogę prosić o sprostowanie mojej wypowiedzi.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 mar 2019, o 19:14 
Offline
Moderator
Avatar użytkownika

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

procek87 napisał(a):
czy adres powrotu też ? wydaje mi się że nie tylko na stos.

proszę
procek87 napisał(a):
]a co napisałem nie tak ? mogę prosić o sprostowanie.

A co na to mówi Bluebook?

procek87 napisał(a):
ale argument stan jest tworzony na stos i czeka sobie na przyjęcie wartości

czeka? skąd bierzesz te informacje ?

procek87 napisał(a):
ciało funkcji również zajmuje miejsce we flashu z tym że nie posiada adresu powrotu ,który jest odkładany na stos

to już jest kompletny odlot że tak powiem

Piszę cię i proszę o zadawanie pytań do Bluebooka a ty piszesz jakieś nie wiem albo wymyślone historie albo z jakiej strony w internecie ?

Obrazek

kolejny raz nie zabiorę głosu jak nie przeczytasz tego rozdziału i nie zadasz pytań do tego rozdziału - tylko będziesz pisał herezje z jakichś stron internetowych

_________________
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 mar 2019, o 19:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

W książce piszesz że gdy funkcja startuje to odkłada adres powrotu i kopię argumentów z jakimi będzie pracować na stosie , a ja zadałem pytanie jak to jest z argumentami w funkcji inline.
Całość jest podstawiana w miejsce wywołania a co z tym co zostaje przekazane do takiej funkcji?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 mar 2019, o 20:08 
Offline
Moderator
Avatar użytkownika

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

procek87 napisał(a):
Całość jest podstawiana w miejsce wywołania

słucham ?

procek87 napisał(a):
a co z tym co zostaje przekazane do takiej funkcji?

że jak?

Panie - argumenty ZAWSZE przekazywane są albo jako wartości bezpośrednie przez stos (i o tym piszę WYRAŹNIE) w bluebooku albo jako referencje (czyli przez wskaźniki i też przez stos) więc o czym ty piszesz ?

Gdy startujesz funkcję

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


to NAJPIERW odkładany jest adres powrotu na stosie !
a później na stosie zostaje przekazana wartość arg !

dzięki czemu możesz wewn funkcji robić co chcesz z wartością argumentu - a gdy funkcja kończy życie to sprawdza jaki był adres powrotu - i wraca tam gdzie wystartowała tylko o krok dalej żeby program dalszy się wykonywał

Na tym etapie wiedzy nie kombinuj i nie zmyślaj własnych teorii szczególnie na temat funkcji inline, tylko zapamiętaj, że one działają IDENTYCZNIE to ci pomoże przejść dalej

_________________
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 mar 2019, o 20:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

Czyli z inline jest identycznie z tym że nie odkłada adresu powrotu na stos?
mirekk36 napisał(a):
że one działają IDENTYCZNIE to ci pomoże przejść dalej

Argument do takiej funkcji też trafia poprzez wartość na stosie ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 mar 2019, o 07:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

Panie dziobak7 rozumiem natomiast chciałem tylko objaśnienia dla takich robochłopów jak ja .
w momencie wywołania funkcji inline cały kod zostaje wklejony w miejsce wywołania

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


wklejany jest w miejsce wywołania , czyli zamiast wywołania , które będzie wyglądać tak :
on_off (1);

dla kompilatora to miejsce będzie wyglądało tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


kompilator podstawi zamiast wywołania on_off kod który jest umiejscowiony na samej górze przed main, a arg przyjmie wartość jeden.

Chciałem tylko zobrazować jak ja to rozumiem , zwykły zjadacz kromek.

Zgadza się?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 mar 2019, o 16:35 
Offline
Moderator
Avatar użytkownika

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

procek87 napisał(a):
kompilator podstawi zamiast wywołania on_off kod który jest umiejscowiony na samej górze przed main, a arg przyjmie wartość jeden.

funkcja inline może zostać ale nie MUSI - rozwinięta w miejscu wywołania i to wielokrotnie, wtedy przybędzie zajętości Flash - ale skoro zostanie rozwinięta to zapomnij o jakichś argumentach - kompilator w ramach optymalizacji ułoży kod w asemblerze po swojemu i dane przekaże przez rejestry czy pamięć RAM a ty nawet nie będziesz wiedział jak dokładanie - dokąd np nie zapoznasz się z językiem ASEMBLER, żeby móc podejrzeć plik *.lss i wtedy dopiero zobaczyć jak to zorgranizował kompilator. Przy czym jeśli wprowadzisz jakąś zmianę w kodzie nawet w innym miejscu poza funkcją inline to już kod w asemblerze może wyglądać inaczej, może nawet funkcja inline zostać potraktowana jako zwykła funkcja z wywołaniem.

Jeśli zatem nie znasz jeszcze asemblera to nie uda ci się rozeznać co robi pod spodem kompilator

_________________
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: 2 mar 2019, o 17:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

Mirku a co jeśli wewnątrz funkcji inline zdefiniuje zmienne lokalne , zostaną odłożone na stos?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 mar 2019, o 18:04 
Offline
Moderator
Avatar użytkownika

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

procek87 napisał(a):
Mirku a co jeśli wewnątrz funkcji inline zdefiniuje zmienne lokalne , zostaną odłożone na stos?

zrozum - no jeśli funkcja inline zostanie wstawiona w miejsce gdzie jest wywoływana to po jasnego grzyba coś na stos odkładać rozumiesz? To tak jakbyś zamiast funkcji wmiejscu jej wywołania cało napisał - a kompilator zadba żeby przez rejestry sobie przerzucić wartości

tyle że jak rozbudujesz funkcję inline to praktycznie kompilator nigdy jej nie rozwinie i nie będzie ona inline tylko jako zwykła funkcja. To nie zależy od ciebie tylko od kompilatora - w BB masz wyraźnie napisane że słówko inline to tylko twoja gorąca prośba do kompilatora - a on nie musi jej posłuchać

_________________
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: 2 mar 2019, o 19:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

procek87 napisał(a):
w BB masz wyraźnie napisane że słówko inline to tylko twoja gorąca prośba do kompilatora - a on nie musi jej posłuchać

Patrzę i oczom nie wierzę jak można to było przeoczyć. Czy aż tak długi wątek jest potrzebny dla udowodnienia, że jest to w książce wyraźnie napisane. Ludzie, proszę, jeśli Mirek ma cytować książki na forum to po co je ma pisać? Po co w ogóle kupować książki skoro się ich nie czyta? Sorry, irytuje mnie trochę takie podejście...

_________________
http://www.sylwekkuna.com



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

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