Strona główna
Witaj na stronie Chopina!
distortos 0.3.0 wydany
Wpisany przez Freddie Chopin   
Piątek, 25 Listopad 2016 21:16

Wczoraj finalizacji doczekała się trzecia wersja distortos - RTOSa nad którym pracuję już ponad 2 lata, skierowanego przede wszystkim do miłośników C++. W najnowszej wersji - obsługującej dokładnie 302 mikrokontrolery - pojawiło się sporo nowości, większość dotyczy chyba wbudowanego w system HALa. Ważniejsze zmiany w najnowszej wersji (w kolejności chronologicznej) to:

Swoją drogą zupełnie zapomniałem tutaj napisać o wydanej już dawno temu wersji 0.2.0. Korzystając z okazji wspomnę więc, że największymi zmianami w poprzedniej wersji było dodanie wsparcia dla architektury ARMv6-M (m.in. ARM Cortex-M0), rodziny układów STM32F0 oraz STM32F1.

Paczki z kodem źródłowym, najnowszą dokumentację i changelog ze wszystkimi zmianami można znaleźć oczywiście na stronie projektu.

Zmieniony: Piątek, 25 Listopad 2016 22:06
 
Jak działa wielowątkowość?
Wpisany przez Freddie Chopin   
Sobota, 12 Listopad 2016 18:29

Osoby zainteresowane tematem zapraszam do zapoznania się z pierwszym artykułem z cyklu wprowadzającego do podstaw systemów czasu rzeczywistego (RTOSów) - Multitasking explained. Artykuł traktuje o absolutnych podstawach, ale w końcu od czegoś trzeba zacząć (;

EDIT (03.12.2016): Po dłuższej przerwie wrzuciłem kolejny artykuł o stanach wątków i przejściach między nimi - Task states. Tym razem tekst jest o bardziej zaawansowanych sprawach, choć starałem się aby całość była przyswajalna nawet dla osób które pierwszy raz w życiu czytają coś o RTOSach. Nie wiem czy mi się udało, ale mam nadzieję że tak. Teraz prace nad kolejnymi artykułami powinny nieco przyspieszyć, a przynajmniej taki właśnie jest plan.

Zmieniony: Sobota, 03 Grudzień 2016 20:56
 
(R)ewolucja w bleeding-edge-toolchain?
Wpisany przez Freddie Chopin   
Środa, 12 Październik 2016 12:07

Jako że znudziło mnie już rozwiązywanie problemów stworzonych przez dziwaczny workflow pracowników firmy ARM, a do tego rozwiązywanie problemów kompatybilności pomiędzy dystrybucjami Linuxa jest chyba rzeczą wręcz niemożliwą, postanowiłem pójść krok dalej. Przedstawiam więc "preview" nowego skryptu "all-in-one" do kompilacji toolchaina, którego ideą jest lekka zmiana aktualnej formy bleeding-edge-toolchain.

Skrypt testowałem na razie tylko na Linuxie (u siebie, na innym komputerze oraz w systemie Travis-CI - Ubuntu 12.04.5 LTS "precise"), wkrótce testy generacji wersji na Windowsa. Nie da się wykluczyć, że nawet teraz ten skrypt powinien zadziałać w środowisku MSYS2 na Windowsie, ale jeszcze tego nie sprawdzałem. Idea jest taka, że toolchainów dla Linuxa nie będę udostępniać w formie "binarnej" - skrypt pozwoli każdemu skompilować toolchaina, który na pewno będzie działał na danej dystrybucji. Wiem że taka kompilacja nie trwa 30 sekund, ale pół dnia też nie - u mnie wszystko (włącznie z pobraniem wszystkich źródeł) trwa 22 minuty. Na wyjątkowo powolnym wirtualnym systemie Travis-CI trwa to 80 minut. Myślę że są to czasy które można raz na pare miesięcy poświęcić, zwłaszcza że w trakcie takiej kompilacji można przecież robić coś innego [; Zresztą jakby ktoś chciał znacząco skrócić czas kompilacji całości, to można znaleźć w skrypcie linijkę z "--with-multilib-list=armv6-m,armv7-m,armv7e-m,armv7-r" i po prostu wyłączyć to czego się nie używa (UWAGA - linijka ta występuje tam 2x, obie wersje powinny być identyczne!). Wersje dla Windows zapewne nadal będą udostępniane w formie "binarnej", bo akurat na tej platformie nie ma problemów z kompatybilnością bibliotek.

W każdym razie skrypt zasadniczo robi wszystko co jest potrzebne - pobiera źródła toolchaina i wymaganych bibliotek w odpowiedniej wersji, rozpakowuje je, a następnie konfiguruje i kompiluje w odpowiedniej kolejności. Idea oczywiście nie jest nowa i takich skryptów jest wiele, choć te które znam są już albo nierozwijane, albo nie do końca takie jak należy. Generalnie do działania tego skryptu nie powinny być wymagane żadne dziwne narzędzia poza tym co jest w "standardzie" w każdej dystrybucji Linuxa - jedynym wyjątkiem mogą być programy do generacji dokumentacji ("makeinfo", wchodzący zwykle w skład paczki typu "texinfo"). Zachęcam do testów, jeśli coś nie działa to piszcie w komentarzach, albo od razu zgłaszajcie problem na GitHubie. Jeśli działa to oczywiście też chętnie usłyszę takie info (;

Aktualne wersje narzędzi w toolchainie są - zgodnie z ideą - najnowsze (; Nowsze niż w toolchainie od ARM <:

  • gcc-6.2.0 + multilib patch
  • newlib-2.4.0.20160923
  • binutils-2.27
  • gdb-7.12
  • expat-2.2.0
  • gmp-6.1.1
  • isl-0.16
  • libelf-0.8.13
  • mpc-1.0.3
  • mpfr-3.1.5
  • zlib-1.2.8
Zmieniony: Piątek, 14 Październik 2016 10:33
 
Pierwsza wersja distortos wydana!
Wpisany przez Freddie Chopin   
Czwartek, 10 Marzec 2016 16:39

Niecałe dwa tygodnie temu, po 584 dniach od rozpoczęcia pracy nad systemem distortos, w końcu opublikowałem pierwszą wersję - 0.1.0. Listę funkcjonalności zawartych w tym wydaniu można znaleźć w change logu, natomiast paczki z kodem źródłowym można znaleźć na stronie http://distortos.org/ w dziale Downloads. W tym samym miejscu można również pobrać opublikowane tego samego dnia paczki z szablonem projektu oraz z przykładowymi aplikacjami. Ta druga paczka zawiera na razie jedynie "nieśmiertelne" miganie LEDami przy użyciu statycznych lub dynamicznych wątków. Nawet nagrałem filmik z działania tej aplikacji (;

Na zachętę - poniżej zamieszczam "magiczny" kod, który w asynchroniczny sposób oblicza wynik funkcji sinus dla czterech różnych liczb w czterech osobnych wątkach. Jest to kompletny i działający kod aplikacji - nie trzeba nic więcej dodawać!

#include "distortos/board/leds.hpp"
#include "distortos/chip/ChipOutputPin.hpp"
#include "distortos/StaticThread.hpp"

void sinWrapper(const double operand, double& result)
{
  result = sin(operand);
}

int main()
{
  const double operands[4] {0.9867816015, 0.4641984149, 0.4665572273, 0.8926178650};
  double results[4] {};
  auto sinThread0 = distortos::makeAndStartStaticThread<512>(1, sinWrapper, operands[0], std::ref(results[0]));
  auto sinThread1 = distortos::makeAndStartStaticThread<512>(1, sinWrapper, operands[1], std::ref(results[1]));
  auto sinThread2 = distortos::makeAndStartStaticThread<512>(1, sinWrapper, operands[2], std::ref(results[2]));
  auto sinThread3 = distortos::makeAndStartStaticThread<512>(1, sinWrapper, operands[3], std::ref(results[3]));

  // do something while the threads are calculating results...
  distortos::board::leds[0].set(true);

  // make sure the threads are done
  sinThread0.join();
  sinThread1.join();
  sinThread2.join();
  sinThread3.join();

  // results are ready!
  distortos::board::leds[0].set(false);
}
Zmieniony: Czwartek, 10 Marzec 2016 17:55
 
distortos - oficjalna strona i wsparcie dla wszystkich układów STM32F4
Wpisany przez Freddie Chopin   
Sobota, 26 Grudzień 2015 13:57

Kilka tygodni temu projekt distortos - zaawansowany system operacyjny czasu rzeczywistego - dostał swoją własną stronę internetową, dostępną pod adresem http://distortos.org/. Na razie znajduje się tam jedynie kilka krótkich newsów, kilka przydatnych linków oraz dokumentacja kodu źródłowego wygenerowana przy użyciu narzędzia doxygen, jednak ilość przydatnych materiałów będzie sukcesywnie wzrastać.

Natomiast do kodu źródłowego i do systemu konfiguracji Kconfig projektu dodane zostało pełne wsparcie dla wszystkich 115 układów z serii STM32F4. Pojawiły się również dwie nowe przykładowe konfiguracje dla płytek z mikrokontrolerami STM32F4, tak więc na chwilę obecną dostępne są trzy sprawdzone i gotowe do uruchomienia konfiguracje:

Wszystkie konfiguracje uruchamiają aplikację testową z maksymalną możliwą częstotliwością zegara systemowego. Cała konfiguracja modułu zegarowego i kilku detali z modułu zasilania możliwa jest do wykonania poprzez system konfiguracji Kconfig, przedstawiony na poniższych screenshotach.

Kconfig, STM32F4
Kconfig, STM32F4
Kconfig, STM32F4
Kconfig, STM32F4
Kconfig, STM32F4
Kconfig, STM32F4

Weryfikacja poprawności wprowadzonej konfiguracji jest zapewniana częściowo przez narzędzie Kconfig, a częściowo w kodzie źródłowym przy użyciu metod działających tylko w trakcie kompilacji - static_assert(...) lub preprocesora.

Zmieniony: Sobota, 26 Grudzień 2015 23:47
 
«PoczątekPoprzednia12345678910NastępnaOstatnie»

Strona 1 z 10