-
Data: 2021-11-19 09:43:16
Temat: Re: AVR po latach
Od: "J.F" <j...@p...onet.pl> szukaj wiadomości tego autora
[ pokaż wszystkie 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.
Następne wpisy z tego wątku
- 19.11.21 09:44 heby
- 19.11.21 10:01 Mateusz Viste
- 19.11.21 10:18 heby
- 19.11.21 10:53 J.F
- 19.11.21 10:59 Mateusz Viste
- 19.11.21 11:07 Mateusz Viste
- 19.11.21 11:34 Mateusz Viste
- 19.11.21 13:37 Astralny Rębajło
- 19.11.21 17:08 heby
- 19.11.21 20:38 Mateusz Viste
- 19.11.21 21:19 heby
- 19.11.21 21:54 Mateusz Viste
- 19.11.21 22:00 Marek
- 19.11.21 22:06 heby
- 19.11.21 22:11 heby
Najnowsze wątki z tej grupy
- Raspberry Pi 3 Model B+
- Kuchenka elektryczna
- test
- Cewka elektrozaworu
- zapytanie o chip r5f21275nfp
- nie naprawiam więcej telewizorów
- Zrobił TV OLED z TV LCD
- Zasilacz USB na ścianę.
- Gniazdo + wtyk
- Aliexpress zaczął oszukiwać na bezczelnego.
- OpenPnP
- taka skrzynka do kablowki
- e-paper
- 60 mA dużo czy spoko?
- Dziwne zachowanie magistrali adresowej w 8085
Najnowsze wątki
- 2025-03-14 Spalił się autobus :-)
- 2025-03-14 Policjanci z Piątku
- 2025-03-14 Lublin => JavaScript / Node / Fullstack Developer <=
- 2025-03-14 Warszawa => Account Manager - Sprzedaż Usług Rekrutacyjnych <=
- 2025-03-14 Gliwice => Business Development Manager - Dział Sieci i Bezpieczeńst
- 2025-03-14 VAT-R Umowa najmu na adres zamieszkania
- 2025-03-14 Gliwice => IT Expert (Network Systems area) <=
- 2025-03-14 Warszawa => Junior Rekruter <=
- 2025-03-14 Wrocław => Konsultant wdrożeniowy Comarch XL/Optima (Księgowość i
- 2025-03-14 China-Kraków => Senior PHP Symfony Developer <=
- 2025-03-14 Żerniki => Dyspozytor Międzynarodowy <=
- 2025-03-13 Raspberry Pi 3 Model B+
- 2025-03-13 Kuchenka elektryczna
- 2025-03-12 test
- 2025-03-13 własny ekran startowy