eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaAVR po latachRe: AVR po latach
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!2.eu.feeder.erj
    e.net!feeder.erje.net!newsreader4.netcologne.de!news.netcologne.de!peer01.ams1!
    peer.ams1.xlned.com!news.xlned.com!peer01.ams4!peer.am4.highwinds-media.com!new
    s.highwinds-media.com!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-sp
    o-b-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
    From: "J.F" <j...@p...onet.pl>
    Subject: Re: AVR po latach
    Newsgroups: pl.misc.elektronika
    User-Agent: 40tude_Dialog/2.0.15.1
    MIME-Version: 1.0
    Content-Type: text/plain; charset="utf-8"
    Content-Transfer-Encoding: 8bit
    References: <smreh5$3aj$1@dont-email.me> <619508e5$0$552$65785112@news.neostrada.pl>
    <a...@n...neostrada.pl>
    <sn3drv$13k$2@dont-email.me>
    <a...@n...neostrada.pl>
    <sn3h62$qna$1@dont-email.me>
    <a...@n...neostrada.pl>
    <sn3lbt$q5v$1@dont-email.me>
    <0...@g...com>
    <sn5ul0$2vi$1@dont-email.me> <2...@m...lan>
    <sn602a$cil$1@dont-email.me> <20211118180102.29f911cc@mateusz>
    <sn61hi$q5d$1@dont-email.me> <20211118182857.67ab36fc@mateusz>
    <sn632k$7cr$1@dont-email.me> <20211118191941.5cd5cbc8@mateusz>
    <sn66n0$2i0$1@dont-email.me> <20211118203536.2ed957df@mateusz>
    <1eohq79peodw1.1sh0vipcxxlku$.dlg@40tude.net>
    <20211119085719.54466a8e@mateusz>
    Date: Fri, 19 Nov 2021 09:43:16 +0100
    Message-ID: <189k71se188y6.1s4j6k5c8x32e$.dlg@40tude.net>
    Lines: 91
    Organization: Telekomunikacja Polska
    NNTP-Posting-Host: 83.30.109.51
    X-Trace: 1637311394 unt-rea-b-01.news.neostrada.pl 522 83.30.109.51:55699
    X-Complaints-To: a...@n...neostrada.pl
    X-Received-Bytes: 3914
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:768512
    [ ukryj nagłówki ]

    On Fri, 19 Nov 2021 08:57:19 +0100, Mateusz Viste wrote:
    > 2021-11-18 o 20:56 +0100, J.F napisał:
    >> Jak mam obsluge bledow w funkcji, to sie zaczynaja wyjscia mnozyc.
    >> Bo bledow moze byc mnostwo - np brak portu, brak prawa dostepu do
    >> portu, brak odpowiedzi w zalozonym czasie, niezrozumiala odpowiedz,
    >> zgloszony bład przez urzadzenie na porcie, błędna wartosc.
    >
    > W tym wypadku też mnogość wyjść może być problemem, bo szybko wychodzą
    > tego typu rzeczy:
    [...]
    > i prędzej czy później o czymś zapomnisz. Tzn. może nie ty, ale ja
    > na pewno. Zamiast tego można w ten sposób:
    >
    > void *buf = NULL;
    > int port = 0;
    >
    > buf = alokuj_bufor();
    > if (!buf) goto poleglem;
    >
    > if (!napisz_na_port() goto poleglem;
    >
    > if (!odbierz_z_portu() goto poleglem;
    >
    > return(sukces);
    >
    > poleglem:
    >
    > if (buf) zwolnij_bufor();
    > if (port) zamknij_port();
    > return(fail);

    w przypadku sukcesu tez mozemy chciec zwolnic zasoby, wiec raczej

    int err_code=0;

    if (!buf) {err_code=BUF_ALL; goto poleglem;}
    if (!napisz_na_port() {err_code=PORT_Write; goto poleglem;}
    if (!odbierz_z_portu() {err_code=PORT_READ; goto poleglem;}

    err_code=SUCCESS

    poleglem:

    if (buf) zwolnij_bufor();
    if (port) zamknij_port();
    return(err_code);

    > albo, jeśli kto naprawdę uczulony na goto, to całość ubrać w jakąś
    > niby-pętlę która wykonuje się raz, a wychodzić z niej breakiem...
    > Ale
    > to już kombinowanie na siłę, aby tylko nie zhańbić się goto przed
    > pryszczatą młodzieżą.

    Jak krokow wiecej to moze byc nieglupie - przygotowac taki
    mini program do wykonania.

    Mozna tez
    int err_code=0;

    if (!buf) err_code=BUF_ALL;
    if (!err_code && !napisz_na_port()) err_code=PORT_Write;
    if (!err_code && !odbierz_z_portu()) err_code=PORT_READ;

    err_code=SUCCESS

    if (buf) zwolnij_bufor();
    if (port) zamknij_port();
    return(err_code);

    no i niby poprawniej, tylko program niepotrzebnie sprawdza pare razy
    blad ... a co tam, szybkie procki mamy


    ewentualnie

    int err_code=0;
    if (!buf) err_code=BUF_ALL;
    else if (!napisz_na_port()) err_code=PORT_Write;
    else if (!odbierz_z_portu()) err_code=PORT_READ;

    err_code=SUCCESS

    if (buf) zwolnij_bufor();
    if (port) zamknij_port();
    return(err_code);

    Superczytelne :-P

    Gorzej, jak sie drzewko decyzyjne komplikuje ...

    J.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: