Firma ELESOFTROM wykonuje oprogramowanie dla autonomicznych systemów mikroprocesorowych (systemów embedded) w różnej skali: od małych urządzeń opartych na mikrokontrolerze do zintegrowanych platform typu mini-pc. W zależności od wymagań wykonujemy programy pracujące samodzielnie lub pod kontrolą systemu operacyjnego (np. Linux).

Wykonywanie oprogramowania
Linux na platformy embedded
Naprawa oprogramowania embedded
Optymalizacja kodu
Ocena jakości i niezawodności
Konsultacje i doradztwo w zakresie systemów embedded
Wykonywanie specyfikacji wymagań i budowanie modeli
Projektowanie oprogramowania wielowątkowego dla systemów embedded


Wykonujemy oprogramowanie dla autonomicznych systemów mikroprocesorowych w językach: C, C++ oraz assemblerach różnych procesorów (m.in. x86, ARM, AVR, msp430, i8051 ). Prowadzimy pełen cykl tworzenia i utrzymania oprogramowania od sformuowania wymagań, budowe modeli, poprzez projekt architektury, realizacje, wdrożenie aż po utrzymanie. W zależności od potrzeb i możliwości docelowej platformy, możemy przygotować oprogramowanie przeznaczone do samodzielnego działania albo pracujące pod kontrolą systemu operacyjnego czasu rzeczywistego (preferowany Linux). Realizujemy również dodatkowe oprogramowanie współpracujące z systemami mikroprocesorowymi, przeznaczone na komputery PC (Windows, Linux), przeznaczone m.in. do wspierania testowania tych systemów, a także aplikacje dla użytkownika. Więcej na ten temat

DioneOS RTOS

Firma ELESOFTROM opracowała wielowątkowy system czasu rzeczywistego z wywłaszczaniem dla mikrokontrolerów ARM Cortex-M3 oraz Texas Instruments msp430/msp430x. Podczas projektowania i tworzenia tego systemu zadbano o wprowadzenie jak najmniejszego obciążenia spowodowanego użyciem systemu. Szczególny nacisk położono na opracowanie wydajnego kodu dla przełączania wątków, tak aby zapewnić szybką reakcję systemu na zdarzenia zewnętrzne oraz efektywną sygnalizację między wątkami. Wersja dla ARM Cortex-M3 została szczegółowo przetestowana na mikrokontrolerze STM32L162 (uzyskano pełne pokrycie kodu testami, cały zestaw zawiera ponad 400 testów). Więcej informacji o systemie DioneOS.

ELESOFTROM posiada kompetencje w samodzielnym przygotowywaniu Linuxa dopasowanego do konkretnych potrzeb sprzętowo-użytkowych systemów mikroprocesorowych. Od kilku lat rozwijamy swoje umiejętności w tworzeniu i uruchamianiu sterowników jądra systemu (kernel mode drivers) a także modyfikowaniu wybranych elementów systemu i kernela. Szczególny nacisk kładziemy na wykorzystywanie zaawansowanych metod debugowania pozwalających na uzyskanie wysokiej niezawodności powstającego oprogramowania. Dbamy również o wydajność i efektywność rozwijanego oprogramowania, co jest szczególnie istotne w przypadku rygorów czasu rzeczywistego (real-time).
Jeśli będzie to konieczne, możemy również przygotować toolchain (w tym kross-kompilator) dla wskazanej architektury procesora, działający pod kontrolą systemu Linux albo Windows z Cygwinem.

Podejmujemy się debugowania i analizy trudnych problemów w istniejącym oprogramowaniu systemów mikroprocesorowych. Problemy takie mogą się objawiać nieoczekiwanym zawieszaniem lub samoczynnym resetowaniem się urządzenia. Zwykle zdarzają się rzadko i pojawiają się nieoczekiwanie, sprawiając wrażenie, że są przypadkowe. Prowadzi to do trudności w określeniu czynników powodujących wystąpienie problemu, a co za tym idzie niemożliwości zamierzonego wywołania błędu. Taka technika, tzn. powtórzenie wystąpienia błędu, jest powszechnie stosowana przy debugowaniu.
Problemy tego typu, jeśli nie wynikają z błędów w sprzęcie, są zazwyczaj związane z błędami w realizacji wielowątkowości lub zaniedbaniem współbieżnego dostępu do danych. ELESOFTROM posiada metody i sposoby testowania pozwalające na 'namierzenie' takiego błędu, wypracowane podczas realizacji wielu projektów opartych na systemach mikroprocesorowych czasu rzeczywistego.
Więcej na ten temat

Wykonujemy analizę i profilowanie kodu pod kątem szybkości działania. Na podstawie wyników tych testów, określamy fragmetny, które mają największy wpływ na czas wykonywania. Następnie, optymalizujemy szybkość wykonania wprowadzając ulepszenia tych elementów. Na zamówienie wykonujemy wybrane fragmenty kodu o ustalonej funkcjonalności, które są elementem większego programu. Jeśli jest to niezbęde możemy wykonać fragmenty w assemblerze.

Ocena struktury i architektury oprogramowania embedded. Analiza istniejącego kodu źródłowego, ocena poprawności zastosowanych rozwiązań z uwzględnieniem wpływu na niezawodność. Badanie poprawności pod kątem spełnienia wymogów programów wielowątkowych, tzn. ochrony przed dostępem współbieżnym do wspólnych danych, wzajemnej synchronizacji wątków składowych programu. Wykrywanie błędów trudnych do powtórzenia oraz wystepujących rzadko.

Wspomagamy proces projektowania i realizacji oprogramowania firm zewnętrznych. Doradztwo realizowane jest w postaci konsultacji, umożliwia uzyskanie rozwiązań pojedynczych problemów napotkanych podczas tworzenia firmware'u. Tego rodzaju usługa dotyczy zagadnień na różnym poziomie budowania systemu: od wyboru określonych rozwiązań, do konkretnych implementacji w języku programowania.

Na podstawie wywiadu, tworzymy dokumentację opisującą wymagania przyszłego użytkownika powstającego systemu. Zebrane wymagania są poddawane analizie pod kątem poprawności na poziomie systemowym. W celu uzyskania dobrze określonej specyfikacji budujemy abstrakcyjny model systemu (z wykorzystaniem UML). Na tej podstawie wybierane są odpowiednie rozwiązania i projektowana jest struktura oprogramowania. Tego typu dokumentacja jest podstawą do realizacji projektowanego systemu, pozwala ona zarządzać realizacją projektu, ustalać jego stopień zaawansowania i weryfikować czy został on w pełni wykonany.

Projektujemy oprogramowanie z uwzględnieniem zagadnień wielowątkowości i wymogów czasu rzeczywistego. Projekty powstają na zamówienie, jako realizacja konkretnych wymogów projektowych (specyfikacji wymagań). Wykorzytujemy własną więdzę teoretyczną, proponując rozwiązania formalnie poprawne a także doświadczenia w tej dziedzinie zebrane podczas realizacji projektów tego typu.