Khi nào chúng ta cần một Hệ điều hành trong Thiết kế hệ thống nhúng?


22

Tôi đã viết rất nhiều mã kim loại trần cho bộ xử lý PIC và x86. Ai đó có thể cho tôi biết làm thế nào và khi nào tôi cần một hệ điều hành? Ngược lại, ứng dụng hoặc tình huống nào có thể được xử lý hoặc không có hệ điều hành?


2
Bởi vì không phải tất cả mọi thứ bạn cần biết đều được dạy ở trường. Nếu bạn nghĩ rằng bạn cần học RTOS, hãy chọn một nền tảng và tìm hiểu nó.
Scott Seidman

3
Câu hỏi về việc sử dụng HĐH trong nhúng là hợp lệ. Tuy nhiên, EE.SE không thể giúp bạn "tại sao họ không dạy tôi điều này ở trường?" phần. Tôi lấy tự do để chỉnh sửa nó.
Nick Alexeev


Vâng, những lý do duy nhất tôi hỏi về lý do tại sao nó không được dạy ở trường đại học của tôi là bởi vì tôi chưa bao giờ bắt gặp bất kỳ sinh viên EE nào có thể đã làm trong Đại học. Vì vậy, với tôi dường như nó không được thực hiện ở bất kỳ trường đại học nào cả.
quantum231

@ quantum231 Nó được thực hiện tại trường đại học của tôi, NTNU - Na Uy.
Marius Gulbrandsen

Câu trả lời:


23

Nguyên tắc nhỏ của tôi là bạn nên xem xét một hệ điều hành nếu sản phẩm yêu cầu một hoặc nhiều điều sau: ngăn xếp TCP / IP (hoặc ngăn xếp mạng phức tạp khác), GUI phức tạp (có thể là một đối tượng có các đối tượng GUI như cửa sổ và sự kiện ), hoặc một hệ thống tập tin.

Nếu bạn đã thực hiện một số mã hóa kim loại trần thì có lẽ bạn đã quen thuộc với kiến trúc chương trình siêu vòng lặp . Nếu các yêu cầu phần sụn của sản phẩm đủ đơn giản để được thực hiện với một siêu vòng lặp có thể duy trì được (và hy vọng phần nào có thể mở rộng) thì có lẽ bạn không cần một hệ điều hành.

Khi các yêu cầu phần mềm tăng lên, siêu vòng lặp trở nên phức tạp hơn. Khi các yêu cầu phần mềm rất nhiều đến mức siêu vòng lặp trở nên quá phức tạp hoặc không thể đáp ứng các yêu cầu thời gian thực của hệ thống thì đã đến lúc xem xét một kiến ​​trúc khác.

Kiến trúc RTOS cho phép bạn chia các yêu cầu phần mềm thành các tác vụ. Nếu được thực hiện đúng, điều này đơn giản hóa việc thực hiện từng nhiệm vụ. Và với ưu tiên nhiệm vụ, RTOS có thể giúp thực hiện các yêu cầu thời gian thực dễ dàng hơn. Tuy nhiên, RTOS không phải là thuốc chữa bách bệnh. RTOS làm tăng độ phức tạp của hệ thống tổng thể và mở ra cho bạn các loại lỗi mới (chẳng hạn như khóa chết). Thay thế cho RTOS, bạn có thể xem xét và kiến ​​trúc máy trạng thái dựa trên sự kiện (như QP ).

Nếu sản phẩm của bạn có kết nối mạng, GUI phức tạp và hệ thống tệp thì bạn có thể xem xét các hệ điều hành đầy đủ tính năng như VxWorks, Windows hoặc Linux. Các hệ điều hành đầy đủ tính năng sẽ bao gồm các trình điều khiển cho các chi tiết cấp thấp và cho phép bạn tập trung vào ứng dụng của mình.


8

Nó thực sự phụ thuộc vào định nghĩa của bạn về một 'hệ thống nhúng'. Có thể có một số người sẽ tuyên bố rằng nếu đó không phải là lập trình kim loại trần, thì nó không được nhúng (loại trừ câu hỏi của bạn), nhưng tôi không đồng ý với điều đó - tôi sẽ lập luận rằng bất kỳ hệ thống nào được thiết kế để chỉ thực hiện một chức năng, tức là, chỉ chạy một 'ứng dụng' cụ thể, có thể được gọi là một hệ thống nhúng.

Điều đó nói rằng, khá dễ dàng để tưởng tượng các tình huống sẽ được hưởng lợi từ các dịch vụ của một hệ điều hành đầy đủ. Ví dụ, nơi tôi làm việc, khá phổ biến khi tìm thấy những người xây dựng thiết bị kiểm tra trên đầu một bộ thiết kế thiết bị chạy trên cửa sổ. Các hệ thống này được cấu hình để khởi động vào cấu hình trạm kiểm tra và khóa sử dụng chung (để ngăn ngừa tham nhũng của trạm) và do đó được cho là các hệ thống nhúng.

Tuy nhiên, chỉ cần mua các mô-đun I / O ngoài giá, cắm chúng vào PC gắn giá đỡ và làm hỏng cấu hình trong GUI có thể không đủ điều kiện là một số thiết kế hệ thống nhúng . Đối với một ít tình huống ngoài lề, hãy xem xét một bộ điều khiển quy trình tùy chỉnh với một FPGA, mà bạn muốn thực hiện một số ghi nhật ký dữ liệu ưa thích. Bạn có thể nhúng hệ thống bộ xử lý lõi mềm (với BSP hiện có) và chạy linux thời gian thực để chạy ngăn xếp mạng (để ghi nhật ký và NTP, v.v.) và thực hiện mọi thứ khác theo logic.


7

Quy tắc ngón tay cái (rất mơ hồ) của tôi là nếu bạn cần nhiều hơn một luồng điều khiển (giả sử ít nhất một thiết bị có giao thức hoặc máy trạng thái cộng với việc khác để làm) thì một số phần mềm OSish sẽ giúp cuộc sống của bạn dễ dàng hơn


Thiết lập RTOS cần một lượng công việc nhất định. Trừ khi nỗ lực sử dụng switchcác máy trạng thái dựa trên cơ sở vượt quá điều đó, các switchmáy dựa trên cơ sở có khả năng tốt hơn. Hơn nữa, trên cả hai nền tảng 8x51 và TMS2000, tôi đã triển khai trình chuyển đổi tác vụ hợp tác dựa trên ngăn xếp đơn giản. Không có logic hệ điều hành để quyết định khi nào chuyển đổi - bất cứ khi nào một "luồng" cảm thấy nó có thể nghỉ, nó sẽ chuyển sang cái khác. Nếu luồng khác thấy rằng điều gì đó mà nó đang chờ chưa xảy ra, nó có thể quay lại lần đầu tiên trong thời gian ngắn hơn so với một hệ điều hành bình thường sẽ bỏ ra quyết định nên chuyển đổi hay không.
supercat

Có thể đáng để phân biệt giữa một "luồng" đa phần mềm thực sự (vốn rất chỉ vào HĐH) so với một ngắt đơn giản hơn đáp ứng với tình trạng phần cứng.
Chris Stratton

1

Một câu hỏi cũ nhưng tôi sẽ bình luận.

Ngay cả khi bạn không có ngăn xếp mạng hoặc tương tự, tại thời điểm bạn cần một bộ lập lịch tác vụ vì bạn có đủ các quy trình trong ứng dụng nhúng của mình, bạn có thể xem xét RTOS. Viết một bộ lập lịch đa nhiệm hợp tác dựa trên bộ đếm thời gian đơn giản không khó lắm nhưng đảm bảo rằng một quy trình bị kẹt sẽ không chặn phần còn lại của ứng dụng và như vậy có thể mất một thời gian để xử lý đúng. Bạn cần triển khai một hệ thống ưu tiên với một số loại điều khoản để xử lý các lỗi trong hàng đợi nếu chúng chưa hoàn thành.

RTOS cũng cung cấp cho bạn những thứ như bảo vệ bộ nhớ và những thứ tương tự giúp bạn dễ dàng theo dõi một số lỗ hổng thông thường trong mã C nhưng các bộ vi điều khiển đơn giản có thể không thể xử lý bảo vệ bộ nhớ phức tạp. Ví dụ: MSP430 cho phép bạn tách mã và dữ liệu ở mức cao nhưng không có kiểm soát truy cập bộ nhớ chi tiết.


0

Một hệ điều hành thực sự thu hẹp khoảng cách giữa phần cứng và phần mềm ứng dụng (thông qua trình điều khiển thiết bị). Nói cách khác, nó cung cấp nền tảng tương đối cao cho lập trình viên, điều này giúp giảm độ phức tạp của mã. Và hơn nữa, hệ điều hành cung cấp nền tảng mạnh mẽ và linh hoạt để thực thi ứng dụng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.