2014-09-06 1 views
7

익숙한 형태의 .NET이 실시간 O/S가 아닌 Windows에서 실행되며 MONO가 Linux에서 실행됩니다 (표준 커널도 실시간 O/S가 아닙니다).C# .NET을 하드 실시간으로 사용할 수 있습니까?

가비지 수집을 제공하는 메모리 할당 스키마 ("managed".NET에서와 같이)와 실제로 모든 힙 메모리 스키마는 응용 프로그램의 실행 동작에 비 결정적이며 잠재적이지 않은 지연을 도입합니다.

엄격하게 지정된 시간 제약 내에서 코드의 지정된 부분을 실행할 수있는 솔루션을 구현하면서 C# .NET의 모든 기능과 편리함을 활용할 수있는 대체 호스트 O/S와 코딩 패러다임의 조합이 있습니까? 예 : C# 방법을 10ms마다 1ms 미만의 공차까지 시작하십시오. 완료 시간은 메서드 자체에서 수행되는 작업에 의해서만 결정됩니다.

분명히 응용 프로그램을 신중하게 작성해야합니다. 시간이 중요한 코드는 메모리 할당을 피해야합니다. 응용 프로그램은 모든 메모리 할당 작업을 완료해야하고 하드 실시간 루프가 시작되면 다른 스레드를 활성화하지 않아야합니다. 또한 호스트 O/S는 실시간 스케줄링을 지원해야합니다.

.NET/MONO 프레임 워크에서 가능합니까? 또는 .NET 런타임, 프레임 워크 및 O/S 설계에서 제외 되었습니까?

예 : NETduino과 같이 안정적으로 미세한 (~ 1ms) 기계 제어를 C#에서 수행 할 수 있습니까? 아니면 이러한 응용 프로그램에 대한 대체 전략이 필요합니까?

+1

먼저 운영 체제를 선택해야합니다. 적절한 프로그래밍 도구는 쓸모없는 목록이 될 것이므로 가비지 수집기가있는 언어는 포함하지 않을 것입니다. 정상적인 솔루션은 마이크로 컨트롤러에 하드 실시간 응답이 필요한 작업을 오프로드하는 것입니다. 모터 컨트롤러 또는 PLC는 상용구의 예입니다. –

답변

7

짧은 답변 : 제

긴 대답 : 당신이 얻을 수있는 가장 가까운 하드웨어에 직접 .net Micro Framework를 실행하지만, TinyCLR 여전히 당신에게 결정적 타이밍을 제공하지 않습니다. Microsoft는 Windows CE/Windows Embedded Compact을 실시간으로 제공하지만 느린 작업에 대해서만 실시간입니다 (50 마이크로 초 이상 범위 - 하드 실시간 자격이 있는지 확실하지 않음)

잘 모르겠 음 기술적으로 실시간으로 C# 구현을 만들 수 있지만 아무도 수행하지 않았고 .net native도 수행되지 않았습니다.

관련 문제