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? 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 17 cze 2025, o 23:32


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
    Autor Wiadomość
    PostNapisane: 26 lis 2014, o 01:24 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 03 lip 2012
    Posty: 238
    Pomógł: 5

    Witam

    Chciałem zaprezentować ciekawe makra ułatwiające pisanie w C (w niektórych przypadkach).

    Otóż osoby które Delphi Pascal mają odbite na opuszkach palców pamiętają jak przydatna była możliwość stosowania tzw sekcji (TRY) kodu w której to wyjście z procedury czy jakikolwiek wyjątek powodował przeskok do sekcji między FINALLY . tu kod kończący END . Najlepiej to na przykładzie procedurki pokazać o mi chodzi :

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


    Jak widać coś co procedurka ma wykonać musi być zamknięte we ustawionej fladze cośuse, czyli tzw atomowy kod? :)
    Później okazuje się że trzeba sprawdzić arg i jeśli zero to koniec procedury - normalnie powinno się cośuse-- jeszcze przed return zrobić, po to by zmienić flage zajętości. Ale z pomocą makr następuje skok do sekcji FINALLY .. END tam się zdejmuje flage i pod END mamy dopiero prawdziwy return 1;

    ...a to te makra :

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


    Dosyć proste :) a jakie zgrabne i do tego upraszcza kod.

    Oczywiście można tu jeszcze wiele dopisać, bo nie są odporne te makra na stosowanie TRY w TRY , można sobie zrobić coś w stylu wyjątków EXCEPT i takie tam . . .

    Pozdrawiam
    XBary



    Ostatnio edytowano 30 lis 2014, o 01:30 przez xbary, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 lis 2014, o 21:52 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2011
    Posty: 8615
    Pomógł: 338

    OO :) wreszcie Xbary się zdecydowałeś coś pokazać :)

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 lis 2014, o 23:09 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 03 lip 2012
    Posty: 238
    Pomógł: 5

    źle napisałem że atomowe :)
    ale ten przykład procedury to miał być tylko przykładem i nic więcej ... zamiast cośuse++ powiedzmy że damy CLI(); a tam gdzie cośuse-- dajemy SEI(); , wtedy cokolwiek i gdziekolwiek wyjdziemy z procedury RETURN(rezultat); zawsze odbędzie się skok do finally gdzie jest SEI();.
    W prostych krótkich procedurkach to taki przerost można by rzec, ale takie procedurki na kilka stron kodu gdzie w wielu miejscach jest natychmiastowy return :) warto by zawsze odbył się skok do sekcji sprzątającej FINALLY ...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 lis 2014, o 23:25 
    Offline
    Moderator
    Avatar użytkownika

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

    tzn jeśli miałoby to służyć tylko jako taka "ala atomowość" czyli żeby przywrócić sei() .... to powiem, że jest to niebiezpieczna konstrukcja w C. Tzn inaczej - owszem wygląda to na ukłon w stronę Delfiarzy i ja rozumiem idealnie co to jest try finally w Delphi no ale tam używa się tego głównie w związku z możliwością łatwego opanowania WYJĄTKÓW. Tutaj w ogóle nie ma mowy o wyjątkach - a więc główny cel znika. To raczej taka troszkę hmmm no właśnie (nie chodzi mi broń boże o pseudo krytykę bo zaraz powiem dobre słowo o tym) ... ale to raczej taka trochę PROTEZA dla Delfiarzy ... bo programując w C wydaje się być to w ogóle niepotrzebne .... W delphi nie mamy możliwości postawienia w dowolnym miejscu funkcji/procedury rozkazu RETURN prawda ? i to boli. W C mamy taką możliwość więc pozostałe ew uroki tej konstrukcji moim zdaniem topnieją totalnie ... Ale przyznam że jak zaczynałem C to sam starałem się tworzyć sobie na własny użytek różne protezy mające mi upodobnić C do Delphi żeby było łatwiej ;) ..... dzisiaj ? .... dzisiaj to ja staram się swoje programy w Delphi upodobnić do tych w C/C++ tyle że nie mam aż tyle wygodnych i elastycznych możliwości ....

    Bo jak się już przstawić całkiem na myślenie w C szczególnie C++ - a jest ono dobre - to zanika potrzeba tworzenia protez ....

    Ale teraz na koniec. Proszę nie traktuj Bary tego jako czepianie się - bo też może być tak, że ja jeszcze czegoś nie dostrzegam w możliwościach tej twojej konstrukcji w programowaniu w C na AVR - po prostu ciężko mi się już przestawić ;)

    No i dobre słowo - jak się popatrzy na makra - chociaż właśnie takie hmmm no nieco straszne to widać, że nieźle żeś się nakombinował i nagłówkował - to zawsze coś i pozwala inaczej spojrzeć .... Zawsze lubię analizować takie osobliwości czy może inaczej różne ciekawe podejścia bo nawet gdy czasem nie wydają potrzebne na pierwszy rzut oka - to gdzieś tam siedzą w tyle głowy i w odpowiednim momencie się mogą przydać.

    _________________
    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: 27 lis 2014, o 23:26 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 03 lip 2012
    Posty: 238
    Pomógł: 5

    Heh :) przykład z przerwaniami do bani :)
    to dla przykładu przykład :) który tuż za TRY rezerwuje sobie troszkę pamięci, a w sekcji FINALLY robimy IF czy wskaźnik na zarezerwowaną pamięć jest różny od zera, jeśli tak to zwalniamy ją :) , czyli w FINALLY sprzątamy .



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 lis 2014, o 23:29 
    Offline
    Moderator
    Avatar użytkownika

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

    xbary napisał(a):
    to dla przykładu przykład który tuż za TRY rezerwuje sobie troszkę pamięci, a w sekcji FINALLY robimy IF czy wskaźnik na zarezerwowaną pamięć jest różny od zera, jeśli tak to zwalniamy ją , czyli w FINALLY sprzątamy .

    TAK - to już hmmm fajny przykład - o ile korzystamy z dynamicznej alokacji pamięci ;)

    _________________
    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: 6 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

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