Strona g?ówna

Menu g?ówne

Witaj na stronie Chopina!
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
 
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
 
distortos ma ju? rok!
Wpisany przez Freddie Chopin   
Czwartek, 23 Lipiec 2015 22:11

Min?? ju? rok i jeden dzie? od momentu w którym rozpocz??em tworzenie projektu swojego w?asnego RTOSa. Projekt distortos wci?? si? rozwija i - na chwil? obecn? - ma ju? 1542 commity. Wzgl?dem poprzedniego newsa pojawi?y si? zasadniczo tylko dwie nowe rzeczy, cho? obydwie s? bardzo rzadko spotykane w innych RTOSach. Jedna to klasa OnceFlag wraz z funkcj? callOnce() - czyli odpowiedniki klasy std::once_flag i funkcji std::call_once() ze standardu C++11 lub struktury pthread_once_t i funkcji pthread_once() z <pthread.h>.

Drug? nowo?ci? jest implementacja funkcjonalno?ci POSIXowych sygna?ów. Sygna?y mo?na obs?ugiwa? zarówno poprzez synchroniczne oczekiwanie - przy u?yciu funkcji ThisThread::Signals::wait(), ThisThread::Signals::tryWait(), ThisThread::Signals::tryWaitFor() oraz ThisThread::Signals::tryWaitUntil() - jak i poprzez asynchroniczne handlery sygna?ów - u?ywaj?c funkcji ThisThread::Signals::setSignalAction(). Zgodnie z przyj?tymi standardami, "dor?czenie" sygna?u powoduje przerwanie niektórych funkcji blokuj?cych (np. Semaphore::wait() albo MessageQueue::pop()), które zwróc? wtedy kod EINTR. Patrz?c od drugiej strony - czyli "?ród?a" sygna?u - mo?liwe jest zarówno "generowanie" (ThreadBase::generateSignal()) jak i "kolejkowanie" sygna?ów wraz z warto?ci? (ThreadBase::queueSignal()). Sygna?y mo?na oczywi?cie maskowa? i ignorowa?.

Wszystko to jest mo?liwe - wci?? - bez u?ycia nawet jednego bajtu pami?ci alokowanej dynamicznie! W przypadku tworzenia "statycznych" w?tków (obiektów klasy StaticThread) konieczne jest zadeklarowanie czy w?tek ten w ogóle przyjmuje sygna?y, ile sygna?ów mo?e by? dla niego maksymalnie zakolejkowanych i ile ró?nych SignalAction mo?na u?y? w nim jednocze?nie.

Stay tuned!

???  ??? ?????? ??????? ??????? ???   ???
???  ??????????????????????????????? ????
???????????????????????????????? ??????? 
??????????????????????? ???????   ?????  
???  ??????  ??????     ???        ???   
???  ??????  ??????     ???        ???   

??????? ?????????? ????????????  ??????????  ?????? ???   ???
???????????????????????????????  ??????????????????????? ????
???????????????????   ???   ???????????  ??????????? ??????? 
???????????????????   ???   ???????????  ???????????  ?????  
??????????????  ???   ???   ???  ??????????????  ???   ???   
??????? ??????  ???   ???   ???  ?????????? ???  ???   ???   

MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM::MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM::MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM:::MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM:::::MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM::::::MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM::::::MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM::::::::MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM::::::::MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM:::::~~:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM:::~?~:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM::~~?~MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM:~?~MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMD++++7ZDMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM+++I7$Z$I?++++MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM+++++++++++++++MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM++++++++++++++OMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM++++++++++++++MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM+++++++O+++++OMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM+++?7+O?I++I+8MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM+++?????I++ONMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM+++?????O++ZNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM++???????ZO?MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM7+??????????MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMO??????????MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMO??????????MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMO??????????MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMO??????????MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMZ??????????MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMZ??????????OOOOOOOO8NMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMM?,,,,,,,,,,,,,,,$??????????,,,,,,,,,,,,,,,,,,,,7DMMMMMMMMMMMMMMM
MMMMMMMMM8$,,,,,,,,,,,,,,,,,,,,:$??????????:,,,,,,,,,,,,,,,,,,,,,,,,MMMMMMMMMMMM
MMMMM~,,,,,,,,,,,,,,,,,,,,,,:=+?O??????????I?=~:,,,,,,,,,,,,,,,,,,,,,,=MMMMMMMMM
MMMD,,,,,,,,,,,,,,,,,,,,,,,,:=+?I$Z??????87I?=~:,,,,,,,,,,,,,,,,,,,,,,,,MMMMMMMM
MMM,,,,,,,,,,,,,,,,,,,,,,,,,,,,:~==+++++==~:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,DMMMMMM
MMM,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,MMMMMM
MMM,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,8MMMMM
MMM,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,MMMMM
MMM+,,,,,,,,~DD8O,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,MMMMM
MMM+,,,,,,,,DZZZZ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,MMMMM
MMM+,,,,,,,$DZZZZ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,MMMMM
MMM7,,,,,,,DOZZZZ,,,,,,,,,,,,,,,,,,,,,,,~DDDDD8,,,,,,,,,,,,,,,,,,,,,,,,,,,,MMMMM
MMMD,,=DOOZZZZZZZ+,,,,,,,,,,,DDD~,,,,,,DDZZZZZZZZ?,,,,,,,,,,,,,,,,,,,,,,,,,MMMMM
MMMM8DZZZZZZZZZZZZ,,,,,,,,,,D8ZZZD,,,=DOZZZZZZZZZZ8,,,,,,,,,,,ZNNNNN,,,,,,IMMMMM
MMMNOZZZZ88888ZZZZO,,,,,,,,ODZZZZZZDDZZZZZZZZZZZZZZZ,,,,,,,,,,DNNN8888,,,,OMMMMM
MMM8OZZZZ8888ZZZZZO,,,,,,,DDZZZZZZZZZZZZZZZZZZZZZZZZZ,,,,,,,,ONNND88888,,,DMMMMM
MMMDOOZZZZZZZZZZZZ$8,,,,D8OZZZZZZ888ZZ8888ZZZZZ8888OZZ8,,,,,7NN888888888O:MMMMMM
MMMMOOZZZZZZZZZZ$$$$$$$$$$$$$ZZZZ8888O888ZZZZZO88888ZZZZZZ8D8888888888888MMMMMMM
MMMMDOZZZZZZZZZZ$$$$$$88$$$$$$ZZZZZZZZZZZZZZZZZZ88888ZZZZZZO8888888888888MMMMMMM
MMMMMOOZZZZ88888$$$$$$8O$$$$$$ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ8888888888888MMMMMMM
MMMMMNOZZ888888ZZ$$$$$$$$$$$$ZZZZOZZZZZZZZZZZZZZZZZZZZZZZZZZ8888888888888MMMMMMM
MMMMMMOZZ8888OZZZZ$$$$$$$$$ZZZZZ8OZZZZZZZZZZZZZZZZZZZZZZZZZ88888888888888MMMMMMM
MMMMMMOZZZ88OZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ888888888888NMMMMMMM
MMMMMNOZZZZZZZZZZZZZZZZZZZZZZZZO888ZZZZ88888ZZZZZZZZZZZ88888888888888888MMMMMMMM
MMMMM8OOZZZZZZZZZZZZZZZZZZZZO88888ZZZZZ888888ZZZZZZZZZZ88888888888888888MMMMMMMM
MMMMM8OOOZZZZZZZZZZZZZZZZZZZ88888ZZZZZZZZZZZZZZZZZZZZZZZ88OO888888888888MMMMMMMM
MMMMMMOOZZZZZ88ZZZZZZZZZZZZZZ88ZZZZZZZZZZZZZZZZZZZZZZZZZO8O8888888888888MMMMMMMM
MMMMMMOOZZZZ88888ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ888888888888888MMMMMMMM
MMMMMMMOOOZZ8888OZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ8888888888888888MMMMMMMM
MMMMMMMMMMNOOOOOZZZZZZZZZ8ZZZZZZZZZZZZZZZZZZZZZZZZZ8888O8888888888888NMMMMMMMMMM
MMMMMMMMMMMMN8OOOOOZZZZZZZZZZZZZZZZZZO88ZZZZZZZZZZO8888888888888888DMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMM888ZZZZZZZZZZZZZZZZ88ZZZZZZZZZZZZZO8888888888888MMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMN8ZZZZZZZZZZZZZZZZZZZZZZZZZOOO88888888888MMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNOZZZZZZZZZZO888888888888MMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM

??????? ???????????????????? ??????? ??????? ????????? ??????? ????????
???????????????????????????????????????????????????????????????????????
???  ??????????????   ???   ???   ???????????   ???   ???   ???????????
???  ??????????????   ???   ???   ???????????   ???   ???   ???????????
???????????????????   ???   ????????????  ???   ???   ?????????????????
??????? ???????????   ???    ??????? ???  ???   ???    ??????? ????????
Zmieniony: Czwartek, 23 Lipiec 2015 23:29
 
Wpisany przez Freddie Chopin   
Niedziela, 22 Luty 2015 20:52

Wspomniany w poprzednim newsie projekt distortos wci?? si? rozwija. Dzi? min??o dok?adnie 7 miesi?cy od pierwszego commita w repozytorium, a ca?kowita liczba tych?e commitów osi?gn??a sympatyczn? warto?? 1023. Wielu czytelników - przynajmniej tych którzy zorientowani s? w RTOSach dla mikrokontrolerów - zastanawia? si? b?dzie "po co komu kolejny projekt RTOSa?". Odpowied? na to pytanie jest bardzo z?o?ona i móg?bym na ten temat napisa? osobny artyku?, jednak na razie musi wystarczy? link do pliku README, w którym stara?em si? opisa? zasadnicze powody istnienia tego projektu. My?l?, ?e cho?by z racji po?o?enia du?ego nacisku na wsparcie dla C++ i C++11 jest to projekt warty uwagi, cho? cecha ta nie powinna umniejsza? innych jego zalet (niektóre wci?? s? oczywi?cie "przysz?e" (; ), wa?nych dla osób które nie zamierzaj? u?ywa? C++ (ta cecha na pewno jest przysz?a, na razie dost?pne jest jedynie API w C++11).

Wci?? wiele pozosta?o do zrobienia, ale przez ten czas uda?o si? zrealizowa? ca?kiem sporo rzeczy, które dzia?aj? nadzwyczaj dobrze (;

Najwa?niejsz? rzecz? s? oczywi?cie w?tki (klasy Thread, StaticThread oraz ThreadBase), które dzi?ki nowo?ciom ze standardu C++11 mog? przyjmowa? dowoln? ilo?? argumentów dowolnego typu, a nie tylko znane z innych RTOSów void* i nic poza tym. Co wi?cej - funkcja w?tku mo?e by? klasyczn? funkcj?, funkcj? z klasy ("member function"), funktorem albo lambd?.

Wszystkie powy?sze cechy s? równie? obecne w timerach programowych (klasa SoftwareTimer).

Scheduler obs?uguje pe?ne wyw?aszczanie w?tków na podstawie priorytetów (których mo?e by? 256), natomiast je?li istnieje kilka w?tków o tym samym priorytecie, to b?d? one szeregowane wed?ug algorytmu FIFO lub round-robin (algorytm jest konfigurowalny dla ka?dego w?tku indywidualnie).

Najbardziej bazowym obiektem synchronizacyjnym jest chyba semafor (klasa Semaphore). Mo?liwe jest skonfigurowanie maksymalnej warto?ci jak? "przyj??" mo?e semafor, dzi?ki czemu mo?liwe jest równie? u?ywanie tego obiektu jak semafora binarnego. Semafor mo?e by? "sygnalizowany" z przerwania.

Bardziej zaawansowanym mechanizmem synchronizacji jest mutex (klasa Mutex). Tak jak w POSIXie, mo?liwe jest skonfigurowanie wszystkich trzech "trybów" - normalnego, "error-checking" oraz "recursive" - i wszystkich trzech "protoko?ów" - normalnego, "priority inheritance" oraz "priority protocol" (znanego równie? jako "priority ceiling"). W przeciwie?stwie do wielu innych RTOSów, protokó? "priority inheritance" dzia?a bez ?adnych ogranicze?: z dowoln? ilo?ci? "poziomów" dziedziczenia, niezale?nie od tego ile mutexów jest zablokowanych przez w?tek i w jakiej kolejno?ci (diagram i opis testu sprawdzaj?cego t? w?a?nie cech?).

Mechanizmem bazuj?cym na mutexach jest klasyczna "condition variable" (klasa ConditionVariable).

Do klasycznej komunikacji pomi?dzy w?tkami i przerwaniami (w dowolnej kombinacji) u?y? mo?na kolejek. Kolejki dost?pne s? w czterech wariantach:

Wiadomo?ci dodawane do kolejki bez obs?ugi priorytetów (...FifoQueue) szeregowane s? wed?ug algorytmu FIFO, natomiast kolejki obs?uguj?ce priorytety (...MessageQueue) umo?liwiaj? dodawanie wiadomo?ci o jednym z 256 priorytetów. Kolejki bez wsparcia dla obiektów (...Raw...) kopiuj? wiadomo?ci przy pomocy funkcji memcpy(), natomiast kolejki wspieraj?ce obiekty obs?uguj? wszystkie wymagane w takiej sytuacji operacje (konstruktor, destruktor, operatory przypisania, swap, emplace, ...).

Wszelkie operacje blokuj?ce dost?pne s? te? w wariantach nieblokuj?cych oraz w wersji blokuj?cej z timeoutem (wzgl?dnym lub bezwzgl?dnym), który dzi?ki wprowadzonemu w C++11 std::chrono mo?e by? wyra?any wygodnie w dowolnych jednostkach (np. w sekundach, minutach, godzinach, ... - link), a nie tylko w "tickach" systemowych.

Wszelkie b??dy sygnalizowane s? za pomoc? kodów b??dów - funkcje nie u?ywaj? ani zmiennej errno, ani wyj?tków C++.

Jedyn? obs?ugiwan? obecnie architektur? jest ARMv7-M, czyli ARM Cortex-M3 (mo?na u?y? ARM Cortex-M4 bez uruchamiania FPU) (dodano 20.03.2015) i ARM Cortex-M4(F), a jedynym "oficjalnie" wspieranym uk?adem jest STM32F407VG (znanym z p?ytki STM32F4Discovery), cho? u?ycie dowolnego innego uk?adu z odpowiednim rdzeniem b?dzie trywialne.

Na koniec chyba najlepsze - u?ycie wszystkich wymienionych powy?ej funkcjonalno?ci mo?liwe jest bez wykorzystania pami?ci alokowanej dynamicznie. Wszystkie opisane wcze?niej obiekty mog? zosta? stworzone jako obiekty globalne lub jako obiekty na stosie.

Na pewno jeszcze kilka ciekawych rzeczy pomin??em...

Zach?cam do testów, pyta?, komentarzy, sugestii i wspó?pracy (; Stay tuned!

Zmieniony: PiÄ…tek, 20 Marzec 2015 09:47
 
Work in progress...
Wpisany przez Freddie Chopin   
Piątek, 29 Sierpień 2014 19:37

O tym, ?eby co? takiego zrobi?, my?la?em ju? od dawna... Jak jednak wiadomo od zamiarów do konkretów droga jest dosy? daleka, szczególnie przy niedoborze czasu wolnego. W ko?cu si? jednak zebra?em, wi?c poni?ej ma?a "zajawka" tego czym obecnie (mi?dzy innymi rzeczami oczywi?cie) si? zajmuj?.

bool ThreadFunctionTypesTestCase::run_() const
{
    using scheduler::makeStaticThread;

    // thread with regular function
    {
        uint32_t sharedVariable {};
        constexpr uint32_t magicValue {0x394e3bae};

        auto regularFunctionThread = makeStaticThread<testThreadStackSize>(UINT8_MAX,
                regularFunction, std::ref(sharedVariable), magicValue);
        regularFunctionThread.start();
        regularFunctionThread.join();

        if (sharedVariable != magicValue)
            return false;
    }

    // thread with state-less functor
    {
        uint32_t sharedVariable {};
        constexpr uint32_t magicValue {0x2c2b7c30};

        auto functorThread = makeStaticThread<testThreadStackSize>(UINT8_MAX, Functor{},
                std::ref(sharedVariable), magicValue);
        functorThread.start();
        functorThread.join();

        if (sharedVariable != magicValue)
            return false;
    }

    // thread with member function of object with state
    {
        constexpr uint32_t magicValue {0x33698f0a};
        Object object {magicValue};

        auto objectThread = makeStaticThread<testThreadStackSize>(UINT8_MAX,
                &Object::function, std::ref(object));
        objectThread.start();
        objectThread.join();

        if (object.getVariable() != magicValue)
            return false;
    }

    // thread with capturing lambda
    {
        uint32_t sharedVariable {};
        constexpr uint32_t magicValue {0x24331acb};

        auto capturingLambdaThread = makeStaticThread<testThreadStackSize>(UINT8_MAX,
                [&sharedVariable, magicValue]()
                {
                    sharedVariable = magicValue;
                });
        capturingLambdaThread.start();
        capturingLambdaThread.join();

        if (sharedVariable != magicValue)
            return false;
    }

    return true;
}

Intryguj?ce? Ciekawe? Interesuj?ce? (;

Jest to fragment testów funkcjonalnych projektu open-source, który obecnie jest we wczesnej fazie alpha (pierwsza linijka kodu powsta?a zaledwie miesi?c temu), jednak podstawowe rzeczy - jak na przyk?ad te pokazane we fragmencie kodu poni?ej - dzia?aj? (na STM32F4) i to ca?kiem dobrze (; Na razie nie ma jeszcze o czym wi?cej pisa?, w zasadzie jedynym ?ladem istnienia tego projektu jest repozytorium na github i ten w?a?nie news... Jak w ka?dym projekcie open-source tak i w tym najwa?niejsi s? u?ytkownicy i szeroko poj?ta spo?eczno??, wi?c wszelkie pomys?y, uwagi, opinie itp. mo?ecie wstawia? tu - w komentarzach - albo na github. Jakby kto? mia? ochot? pokodowa?, to oczywi?cie równie? zapraszam do wspó?pracy - projekt jest otwarty. Prace trwaj?, wi?c "stay tuned" (;

Ca?y plik ?ród?owy z którego pochodzi powy?szy fragment mo?na obejrze? pod tym linkiem.

Zmieniony: Niedziela, 22 Marzec 2015 21:18
 
«PoczÄ…tekPoprzednia12345678910NastÄ™pnaOstatnie»

Strona 2 z 10