CategoryProgramowanie

Jak używać modyfikatora volatile

Dzisiaj omówię element składni języka C, który jest rzadko tłumaczony większości kursów. W książce K&R został wspomniany zaledwie w trzech zdaniach, które zupełnie nie sugerowały, że może on być ważny. Chodzi o modyfikator volatile. Jego nieprawidłowe stosowanie może powodować:

  • Błędne działanie programu po włączeniu optymalizacji.
  • Błędne działanie programów wykorzystujących przerwania lub współbieżność.
  • Problemy z obsługą sterowników sprzętu.
  • Problemy z wydajnością programu.

Czytaj dalej

Jak używać dyrektywy #define

W dzisiejszym artykule omówię element składni języka C, jakim jest dyrektywa preprocesora #define. Nie będzie to tekst przeznaczony dla początkujących. Skupię się raczej na bardziej zaawansowanych zastosowaniach, przydatnych sztuczkach i dobrych praktykach.

Czytaj dalej

Budowanie szkieletu aplikacji

Zgodnie z założeniami, które nakreśliłem we wpisie o architekturze systemu, zabrałem się do projektowania prototypów funkcji poszczególnych bloków. Dzięki temu mogę zbudować szkielet aplikacji przechodzący przez wszystkie warstwy i stopniowo wypełniać go kodem. Główny nacisk położyłem na driverach powiązanych z warstwą sprzętową. Zależy mi na szybkim zaimplementowaniu driverów, żeby można było przetestować poprawność pracy poszczególnych podzespołów na docelowej płytce. Poza tym hardware jest najbardziej zależny od rzeczy narzuconych odgórnie i dobrze jest sprawdzić jak najszybciej, czy planowana koncepcja jest na pewno realizowalna. Zaktualizowany kod znajduje się na GitHubie projektu na gałęzi dev.

Czytaj dalej

Konfiguracja Travis-CI – Runda 2

Ostatnio pisałem o walce z konfiguracją Travis-CI. Po kolejnych 30 próbach w końcu udało mi się go skonfigurować tak jak chciałem. Przy okazji musiałem pokonać kilka problemów, które opiszę w tym poście.

Czytaj dalej

Git i znaki końca linii

Ostatnio w pracy miałem pewien problem dotyczący znaków końca linii w Gicie. Skłoniło mnie to do poszukiwań w internecie, a zdobyte informacje postanowiłem zebrać w tym poście, żeby zostały na przyszłość.

Znaki końca linii na różnych systemach operacyjnych

Istnieją dwie konwencje dodawania znaków końca linii w plikach tekstowych.  Wywodzą się one z dwóch głównych systemów operacyjnych:

  • Konwencja Windowsowa: na końcu linii dodawane są znaki CR (Carriage Return – 0x0A ASCII) LF (Line Feed – 0x0D ASCII).
  • Konwencja Linuksowa: na końcu linii dodawany jest tylko znak LF.

Jeżeli więc nad tym samym projektem pracują osoby używające różnych systemów operacyjnych, pliki tworzone przez różne osoby mogą mieć różne konwencje końca linii. Co więcej, jeśli plik z linuksowymi znakami nowej linii jest edytowany w Windowsie, edytor tekstu może nadpisać istniejące znaki nowej linii w całym pliku lub użyć swojej konwencji dla nowo dodanych linii.

Czytaj dalej

Konfiguracja Travis-CI na STM32

W ten weekend w końcu stanąłem do potyczki z konfiguracją Travis-CI. Długo to odkładałem, bo wiedziałem, że będą problemy. Chcę skonfigurować build system w dosyć niestandardowy sposób i nie mogę za bardzo skorzystać z wbudowanych w Travisa ułatwień. Zamiast tego muszę posiłkować się bashowymi skryptami. W wykonaniu zadania pomagają mi skrypty Freddie Chopina (link1, link2), któremu udało się skonfigurować podobny build system do tego, który chciał bym uzyskać. Nie udało mi się jeszcze wykonać poprawnego builda, dlatego dzisiaj opiszę ogólne spostrzeżenia do jakich udało mi się dojść. Nie składam jeszcze broni i pewnie pojawią się jeszcze kolejne wpisy w tym temacie opisujące mam nadzieję rozwiązanie problemu.

Czytaj dalej

Początek prac nad kodem

Płytka została oddana do produkcji, więc ostatnio było trochę czasu, żeby usiąść do softu. W tym tygodniu udało mi się zrobić kilka rzeczy:

  • postawić projekt na STM32F4,
  • dodać najnowszą wersję systemu FreeRTOS – 9.0.0,
  • uruchomić framework do unit testów CppUTest.

Aktualny kod źródłowy projektu można znaleźć na moim GitHubie.

Czytaj dalej

C++ na STM32

Najczęściej wybieranym językiem do programowania mikrokontrolerów jest C. Popularna jest opinia, że C++ do tego zadania się nie nadaje. Najczęściej podawane argumenty to wolniejsze wykonywanie się kodu, większe zużycie pamięci programu i RAMu oraz częste wykorzystywanie dynamicznej alokacji pamięci. Ostatnio znalazłem na YouTube prezentację dotyczącą wykorzystania C++ przy programowaniu systemów embedded.

Autor udowadnia w niej, że argumenty dotyczące szybkości wykonania oraz zużycia pamięci nie są prawdziwe. Skłoniło mnie to do wykonania własnych eksperymentów z C++ na STM32, a przy okazji także do poznania C++, ponieważ wcześniej nie miałem z nim za dużo do czynienia.

Czytaj dalej

STM32 na Eclipse Neon

Ostatnio pisałem, jak uruchomić projekt na STM32 na Eclipse. Polecałem wtedy używać starszej wersji – Eclipse Mars, ponieważ na Eclipse Neon nie działają poprawnie używane przeze mnie pluginy. Ostatnio udało mi się uruchomić STM32 na nowej wersji Eclipse i w tym artykule opiszę swoje uwagi.

Do uruchomienia projektu na STM32 będziemy potrzebowali pluginów z pakietu GNU ARM Eclipse:

  • OpenOCD – plugin współpracujący z OpenOCD nieco inaczej niż za pomocą External Tools Configuration.
  • Packs – plugin zarządzający konfiguracją dla różnych procesorów. Ten plugin umożliwia podgląd rejestrów peryferiów procesora.
  • QEMU – plugin emulatora. Umożliwia uruchamianie programów bez podłączonego sprzętu. Ten plugin jest opcjonalny.

Czytaj dalej

Granie melodii na silnikach DC

Ostatnio opisywałem szablon projektu na STM32 i konfigurację środowiska, więc teraz pora na jakiś praktyczny projekt. Będzie nim program grający melodie na silnikach. Kiedyś napisałem taki programik, żeby sprawdzić czy działa sterowanie silnikami w moim robocie. W tym czasie na Forbot.pl był konkurs na robota z akcentem świątecznym i Wśród nocnej ciszy w wykonaniu mojego robota wygrało.

Pojawiła się propozycja, żeby z okazji zwycięstwa zagrać na silnikach We are the champions, ale poległem na tym zadaniu. Problemem było to, że za słabo znam się na muzyce i bazowałem tylko na nutach znalezionych w necie i jak coś było nie tak, nie umiałem tego poprawić. Ostatnio wróciłem do tematu i postanowiłem opublikować i trochę opisać kod na STM32F4 Discovery.

Czytaj dalej

© 2018 ucgosu.pl

Theme by Anders NorénUp ↑