2014-09-06 13 views
7

Cho rằng dạng .NET quen thuộc chạy trên Windows, không phải là O/S thời gian thực và MONO chạy trên Linux (hạt nhân chuẩn cũng không phải là O/S thời gian thực). Ngoài ra, bất kỳ lược đồ phân bổ bộ nhớ nào cung cấp bộ sưu tập rác (như trong .NET "được quản lý") và thực tế mọi lược đồ bộ nhớ heap sẽ giới thiệu sự chậm trễ không xác định, có thể không nhỏ trong hành vi thực thi của ứng dụng.C# .NET có thể được sử dụng cho thời gian thực cứng không?

Có sự kết hợp của O/S host thay thế và mô hình mã hóa trong đó có thể tận dụng tất cả sức mạnh và tiện ích của C# .NET trong khi thực hiện một giải pháp có thể thực thi các phần được chỉ định trong giới hạn thời gian cụ thể không? ví dụ. bắt đầu một phương thức C# mỗi 10ms với dung sai nhỏ hơn 1ms, với thời gian hoàn thành được xác định chỉ bởi công việc được thực hiện trong chính phương thức đó?

Rõ ràng, ứng dụng sẽ phải được viết cẩn thận; mã thời gian quan trọng sẽ phải tránh phân bổ bộ nhớ; ứng dụng sẽ phải hoàn thành tất cả các công việc phân bổ bộ nhớ của nó vv và không có chủ đề nào khác hoạt động khi vòng lặp thời gian thực cứng được bắt đầu. Ngoài ra, máy chủ O/S sẽ phải hỗ trợ lập lịch thời gian thực.

Điều này có thể trong khuôn khổ .NET/MONO hay không bị ngăn cản bởi thiết kế của .NET runtime, framework và O/Ss mà trên đó nó (hoặc tương đương tương đương) được hỗ trợ?

Ví dụ: có thể thực hiện điều khiển máy có độ tin cậy cao (~ 1ms) hoàn toàn trong C# với thứ gì đó như NETduino hoặc chúng có giới hạn hoặc yêu cầu chiến lược thay thế cho các ứng dụng như vậy không?

+1

Trước tiên, bạn sẽ phải chọn hệ điều hành của mình. Những gì sẽ được để lại như các công cụ lập trình phù hợp sẽ là một danh sách nhỏ khủng khiếp và sẽ không bao gồm các ngôn ngữ với một bộ thu gom rác. Giải pháp thông thường là giảm tải các tác vụ yêu cầu đáp ứng thời gian thực cứng đối với các bộ điều khiển vi mô. Bộ điều khiển động cơ hoặc PLC là những ví dụ điển hình. –

Trả lời

7

ngắn Trả lời: Không

Còn câu trả lời: Gần nhất bạn có thể nhận được chạy .net Micro Framework trực tiếp trên phần cứng, nhưng TinyCLR vẫn không cung cấp cho bạn timings xác định. Microsoft có Windows CE/Windows Embedded Compact là cung cấp thời gian thực của họ, nhưng ngay cả đó chỉ là thời gian thực cho các nhiệm vụ chậm hơn (tôi tin rằng một nơi nào đó trong khoảng 50 micro giây trở lên - không chắc chắn nếu đủ điều kiện cho Thời gian thực cứng)

Tôi không biết nếu nó có thể về mặt kỹ thuật để tạo ra một C# thực hiện thời gian thực, nhưng không ai thực hiện một và thậm chí .net native không được thực hiện cho điều đó.

Các vấn đề liên quan