CategoryProgramowanie

Style Guide i Coding Standard – czy to już jakość?

Kiedy zdamy już sobie sprawę, że sprytny kod i mikrooptymalizacje to nie jest dobra droga, dochodzimy do wniosku, że jakość kodu jednak ma znaczenie. A wyrazem dbania o tą jakość kodu jest wprowadzenie odpowiednich reguł. Temu właśnie służą Style Guide i Coding Standard. W C są one szczególnie ważne, bo język pozwala nam na wiele dziwnych rzeczy. Czasem występują jako dwa oddzielne dokumenty, a czasem jako jeden. Różni się również sposób ich użycia. Czasem zawierają rozsądny zestaw zasad, który faktycznie jest przestrzegany w projekcie. Czasem natomiast są tak restrykcyjne i tak niemożliwe do wyegzekwowania, że nikt nawet nie próbuje. Kiedy indziej natomiast każdy i tak wie lepiej. W dwóch ostatnich przypadkach reguły służą głównie do chwalenia się na zewnątrz, że do naszego projektu DODALIŚMY jakość. No właśnie to tak nie działa. Możemy wprowadzić te wszystkie reguły a i tak pisać w sposób zupełnie niezrozumiały dla innych.

Dlatego dzisiejszym artykule porozmawiamy sobie właśnie o zasadach znajdujących się zwykle w tego typu dokumentach. Po co powstały i jak je egzekwować. Oczywiście temat jest tak rozległy, że omówię tylko mały odsetek najczęściej spotykanych reguł.

Continue reading

Sprytny kod w C – nie rób tego

Kiedyś bardzo popularne było pisanie sprytnego kodu. Żeby jak najwięcej zmieściło się w jednej linijce. Żeby oszczędzić sobie nadmiarowego pisania, bo w końcu wiem, że coś się wydarzy pod spodem. Osoba czytająca ten kod mogła jedynie stwierdzić – ale dobry jest ten, kto to napisał, ja nic nie rozumiem. Język C doskonale się do czegoś takiego nadawał. Możemy (nad)używać niejawnego rzutowania, wyrażeń z efektami ubocznymi, magicznych operacji bitowych, wskaźnikowych i innych.

Społeczności skupione wokół innych języków zrozumiały swój błąd i poszły w zupełnie przeciwnym kierunku. Zauważono, że nie opłaca się zyskiwać jednej linijki po to, żeby potem nie dało się zrozumieć co autor miał na myśli. Jednak z C jest inaczej. Pisanie sprytnego kodu weszło nam w krew i przykłady tego typu przeniknęły do materiałów edukacyjnych, do przykładów z internetu, na uczelnie i są przekazywane nowym pokoleniom programistów. W tym artykule przyjrzymy się jak objawia się nasz spryt i jak nieuchronnie prowadzi do strzelenia sobie w stopę.

Continue reading

Praca zdalna w embedded

Na ostatnim livestreamie opowiadałem o pracy zdalnej w embedded. W związku z aktualną epidemią temat jest na czasie i pewnie wiele osób i całych firm szuka podpowiedzi jak przejść na pracę zdalną. Szczególnie jeśli nigdy wcześniej tego nie próbowaliście, a teraz nagle wszyscy muszą pracować z domów. W tym artykule zebrałem najważniejsze informacje, które również omawiam w wersji wideo:

Continue reading

Tablice wskaźników na funkcje

To już ostatni wpis z serii dotyczącej zastosowań tablic w C. Dzisiejszym tematem będą tablice wskaźników na funkcje. Pozwalają one w jednolity sposób obsługiwać różne zachowania programu, czyli są rodzajem polimorfizmu. Czasem bywają niezwykle przydatne.

Continue reading

Maszyny stanów na tablicach

Po lookup table i wyszukiwaniu elementów pora na kolejne zastosowanie tablic – maszyny stanu. Podobnie jak w poprzednich przypadkach, logikę warunkową zastąpimy wyczytywaniem odpowiednich indeksów z tablicy. W przypadku maszyn stanu możemy dzięki temu nie tylko zwiększyć wydajność, ale również drastycznie poprawić utrzymywalność kodu.

Continue reading

Tablice przyspieszające wyszukiwanie elementów

Kolejnym – po Lookup Table – tematem związanym z tablicami, którym się zajmę jest przyspieszenie wyszukiwania elementów. Zwykle nasze możliwości w tym zakresie ograniczają się do podawania indeksu tablicy albo wyszukiwania w pętli. Możemy jednak przyspieszyć te operacje wykorzystując dodatkowe tablice z mapowaniem indeksów, albo skorzystać z hash table.

Continue reading

Jak korzystać z Lookup Table?

Pod wpływem doskonałej książki Code Complete autorstwa Steve’a McConella postanowiłem napisać o zastosowaniach tablic w C. Nie chodzi mi tu oczywiście o podstawy, składnię itp. Chociaż jak to w C, nawet tutaj znalazłoby się kilka niuansów. Mam zamiar zająć się bardziej zaawansowanymi tematami takimi jak lookup table, hash table, maszyny stanów, czy polimorfizm na tablicach wskaźników na funkcje. Wyszło tego sporo, dlatego podzieliłem tekst na kilka wpisów. Na pierwszy ogień idą Lookup Table.

Continue reading

Jak uzyskać obiektowość w C?

W języku C nie mamy czegoś takiego jak klasy. Jeżeli chcemy pisać programy w sposób obiektowy musimy wykorzystać w tym celu struktury i funkcje. Traktowanie modułów większego systemu jako obiektów zawierających pewne dane i umożliwiających operacje na nich jest sposobem na ukrycie szczegółów implementacyjnych. Abstrakcje pomagają zapanować nad złożonością projektów. Dlatego mimo, iż obiektowość w C musimy emulować, chętnie sięgamy choćby po niektóre elementy obiektowości. W tym wpisie pokażę jak poprawnie implementować obiektowość w C.

Continue reading

Generowanie plików runtime Ady – część 2

W poprzednim wpisie opisałem proces generowania runtime Ady dla STM32F401. Myślałem, że to już koniec przeprawy z konfiguracją, ale okazuje się, że nie. Pliki wygenerowane zgodnie z instrukcją z poprzedniego postu wymagają jeszcze małej modyfikacji. Poza tym jeżeli chcemy skorzystać również z Ada Drivers Library czeka nas kolejna runda walki ze skryptami. Udało mi się doprowadzić do stanu, gdzie program na STM32F401 się kompiluje, uruchamia na debugerze i poprawnie steruje peryferiami. Z tego postu dowiesz się jakie kroki musiałem wykonać, żeby do niego dojść.

Continue reading

Generowanie plików runtime Ady dla mikrokontrolerów

Po zainstalowaniu toolchaina GNAT dla ARMów otrzymujemy wsparcie jedynie dla niewielkiej liczby procesorów. Aby wygenerować pliki runtime dla innych, musimy skorzystać ze skryptów dostępnych w repozytorium bb-runtimes od AdaCore. Ostatnio potrzebowałem wygenerować je dla nowego procka i trochę musiałem się namęczyć. Dlatego teraz opiszę do czego udało mi się dojść.

Continue reading

© 2020 ucgosu.pl

Theme by Anders NorénUp ↑