2014-09-06 8 views
7

Biorąc pod uwagę, że znana forma .NET działa w systemie Windows, który nie jest O/S w czasie rzeczywistym, a MONO działa pod Linuksem (standardowe jądro również nie jest O/S w czasie rzeczywistym). Biorąc pod uwagę, że każdy schemat przydzielania pamięci oferujący odśmiecanie (jak w "zarządzanym" .NET), a także jakikolwiek schemat pamięci sterty, wprowadzi niedeterministyczne, potencjalnie nietrywialne opóźnienia w zachowaniu przy wykonywaniu aplikacji.Czy C# .NET może być używany do trudnych w czasie rzeczywistym?

Czy istnieje kombinacja alternatywnego hosta O/S i paradygmatu kodowania, w którym można wykorzystać całą moc i udogodnienia C# .NET podczas wdrażania rozwiązania, które może wykonać wyznaczone fragmenty kodu w ściśle określonych ograniczeniach czasowych? na przykład uruchamiać metodę C# co 10ms z tolerancją mniejszą niż 1ms, a czas zakończenia jest określony wyłącznie przez pracę wykonaną w samej metodzie?

Oczywiście wniosek musiałby być starannie napisany; kod czasowo krytyczny musiałby unikać alokacji pamięci; aplikacja musiałaby mieć ukończoną całą alokację pamięci itd. i po uruchomieniu twardej pętli czasu rzeczywistego nie będą aktywne żadne inne wątki. Ponadto host O/S musiałby obsługiwać planowanie w czasie rzeczywistym.

Czy jest to możliwe w ramach platformy .NET/MONO, czy też jest wykluczone przez konstrukcję środowiska wykonawczego, frameworka i O/S systemu .NET, na których jest obsługiwana (lub zgodny odpowiednik) .NET?

Na przykład: czy możliwe jest wykonywanie niezawodnych precyzyjnych (~ 1 ms) kontroli maszyn wyłącznie w języku C# z czymś podobnym do NETduino, czy też mają one ograniczenia lub wymagają alternatywnych strategii dla takich aplikacji?

+1

Najpierw należy wybrać system operacyjny. To, co pozostanie jako odpowiednie narzędzie programistyczne, będzie bardzo małą listą i nie będzie zawierało języków z śmieciarzem. Normalnym rozwiązaniem jest odciążenie zadań wymagających ciężkiej reakcji w czasie rzeczywistym na mikrokontrolery. Sterownik silnika lub sterownik PLC to przykłady przykłądowe. –

Odpowiedz

7

Krótka odpowiedź: Nie.

Dłuższa odpowiedź: najbliżej można dostać się uruchamiając .net Micro Framework bezpośrednio na sprzęcie, ale TinyCLR nadal nie daje deterministyczne czasy. Microsoft ma Windows CE/Windows Embedded Compact jako swoją ofertę w czasie rzeczywistym, ale nawet to jest w czasie rzeczywistym dla wolniejszych zadań (wierzę gdzieś w zakresie 50 mikrosekund lub więcej - nie jestem pewien, czy to kwalifikuje się do Hard Real Time)

Nie wiem gdyby było technicznie możliwe stworzenie C# implementacji w czasie rzeczywistym, ale nikt tego nie zrobił, a nawet .net native nie został do tego stworzony.

Powiązane problemy