Cześć.
Nie jestem specjalistą w programowaniu, znam język C w dość podtawowym stopniu - na tyle, że jestem w stanie pisać własne programy z pomoca informacji i przykładów znalezionych w necie. Umiem tworzyć proste funkcje, ale mam pewien problem. Próbuję stworzyć trochę bardziej skomplikowaną bibliotekę dla Arduino. Biblioteka ta, ma kilka funkcji, które coś tam przeliczają, coś tam odbierają po UART, itp. Wszystko działa, ale nie mogę sobie poradzić (a raczej pojąć jak to ma działać) z obsługą błędów pochodzącą z takich funkcji.
Do tej pory było to dla mnie proste - miałem np. funkcję
tutaj dla przykładu jakaś funkcja do której przekazuję bajt danych do wysyłki po np. UART, a sama funkcja mogła mi zwracać wartości 0, 1 - gdzie 0 - udało się wysłać prawidłowo; 1 - nie wysłano bo "jakiś tam błąd".
To jest proste.
Ale teraz mam funkcję np.
Funkcja ta coś tam robi, operuje na danych i ma zwrócić wynik. Chciałbym móc jakoś sprawdzać czy funkcja wykonała się prawidłowo. Niby można by zrobić tak, że gdy funkcja zwraca wartości większe lub równe 0 to wtedy jest ok, a gdy zwróci np. -1 to znaczy, że jest jakiś błąd. Ale problem w tym, że wynikiem tej funkcji, może być też wartośc ujemna i wtedy ten sposób jest niemożliwy.
No i tu jest sedno wątku - jak sobie z tym poradzić? Próbowałem, podglądać jakieś bliblioteki jak to jest rozwiązane ale się gubię w nich. Bo gdy widzę np. taką funkcję:
która może zwrócić niewiadomo dokąd
to torchę zaczynam się pytać - co ja tu robię?
Jedyne co przychodzi mi sensownego do głowy aby rozwiązać mój problem to stworzyć funkcję np. w ten sposób:
czyli o ile dobrze myślę, to tutaj bym wartość miał nie zwracaną bezpośrednio przez funkcję, ale musiałbym podać "wskaźnik" do zmiennej w argumencie funkcji i moja funkcja zapisze wartość do tej zmiennej. A sama funkcja mogła by zwracać swój stan 0 - udało się wykonać funckję prawidłowo; 1 - "jakiś tam błąd".
Tylko czy to jest "zgodne ze sztuką"? Zastanawiam się czy się tu nie pogubię?
I jeszcze jedno.
Jak poradzić sobie w przypadku gdy są dwie funkcję i jedna jest używana w drugiej, np. w ten sposób:
i teraz wywołując PobierzStan chcę wiedzieć o tym, czy funkcja "Wyslij" wykonała się prawidłowo.
Nie jestem specjalistą w programowaniu, znam język C w dość podtawowym stopniu - na tyle, że jestem w stanie pisać własne programy z pomoca informacji i przykładów znalezionych w necie. Umiem tworzyć proste funkcje, ale mam pewien problem. Próbuję stworzyć trochę bardziej skomplikowaną bibliotekę dla Arduino. Biblioteka ta, ma kilka funkcji, które coś tam przeliczają, coś tam odbierają po UART, itp. Wszystko działa, ale nie mogę sobie poradzić (a raczej pojąć jak to ma działać) z obsługą błędów pochodzącą z takich funkcji.
Do tej pory było to dla mnie proste - miałem np. funkcję
Kod: C / C++
tutaj dla przykładu jakaś funkcja do której przekazuję bajt danych do wysyłki po np. UART, a sama funkcja mogła mi zwracać wartości 0, 1 - gdzie 0 - udało się wysłać prawidłowo; 1 - nie wysłano bo "jakiś tam błąd".
To jest proste.
Ale teraz mam funkcję np.
Kod: C / C++
Funkcja ta coś tam robi, operuje na danych i ma zwrócić wynik. Chciałbym móc jakoś sprawdzać czy funkcja wykonała się prawidłowo. Niby można by zrobić tak, że gdy funkcja zwraca wartości większe lub równe 0 to wtedy jest ok, a gdy zwróci np. -1 to znaczy, że jest jakiś błąd. Ale problem w tym, że wynikiem tej funkcji, może być też wartośc ujemna i wtedy ten sposób jest niemożliwy.
No i tu jest sedno wątku - jak sobie z tym poradzić? Próbowałem, podglądać jakieś bliblioteki jak to jest rozwiązane ale się gubię w nich. Bo gdy widzę np. taką funkcję:
Kod: C / C++
która może zwrócić niewiadomo dokąd
Kod: C / C++
to torchę zaczynam się pytać - co ja tu robię?
Jedyne co przychodzi mi sensownego do głowy aby rozwiązać mój problem to stworzyć funkcję np. w ten sposób:
Kod: C / C++
czyli o ile dobrze myślę, to tutaj bym wartość miał nie zwracaną bezpośrednio przez funkcję, ale musiałbym podać "wskaźnik" do zmiennej w argumencie funkcji i moja funkcja zapisze wartość do tej zmiennej. A sama funkcja mogła by zwracać swój stan 0 - udało się wykonać funckję prawidłowo; 1 - "jakiś tam błąd".
Tylko czy to jest "zgodne ze sztuką"? Zastanawiam się czy się tu nie pogubię?
I jeszcze jedno.
Jak poradzić sobie w przypadku gdy są dwie funkcję i jedna jest używana w drugiej, np. w ten sposób:
Kod: C / C++
i teraz wywołując PobierzStan chcę wiedzieć o tym, czy funkcja "Wyslij" wykonała się prawidłowo.