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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 23 kwi 2025, o 07:54


    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: 27375
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 27375
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 27375
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 27375
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 27375
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 27375
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 1968
    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 2 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