Monday, April 20, 2015

Hệ thống đa tác vụ và thời gian thực với vi điều khiển Pic (Phần 1)

      Gần như tất cả các hệ thống dựa trên vi điều khiển đều thực hiện nhiều hơn một tác vụ. Ví dụ hệ thống giám sát nhiệt độ tạo ra ba tác vụ lặp lại trong một thời gian ngắn đó là:
Tác vụ 1: Đọc nhiệt độ
Tác vụ 2: Định dạng nhiệt độ
Tác vụ 3:  Hiển thị nhiệt độ


     Hệ thống phức tạp với độ phức tạp cao thì sẽ có nhiều tác vụ phức tạp. Trong một hệ thống đa nhiệm,nhiều tác vụ đòi hỏi thời gian CPU do chỉ có một CPU, nên ta cần thiết có một số cách thức phối hợp và tổ chức để mỗi tác vụ có đủ thời gian CPU mà nó cầnTrong thực tế, mỗi tác vụ chiếm số lượng thời gian là rất ngắndo đó dường như có vẻ như là tất cả các tác vụ được thực hiện song song và đồng thời.
     Hầu như tất cả các hệ thống dựa trên vi điều khiển hoạt động trong thời gian thựcMột hệ thống thời gian thực  một hệ thống đáp ứng thời gian nghĩa là hệ thống đó có thể đáp ứng với môi trường hoạt động của nó trong thời gian ngắn nhất có thể.
     Thời gian thực không nhất thiết có nghĩa là các vi điều khiển sẽ hoạt động ở tốc độ cao. Thời gian đáp ứng nhanh chóng những gì  quan trọng trong một hệ thống thời gian thựcmặc dù tốc độ cao điều này có thể giúp ích được nhiều. Ví dụmột hệ thống thời gian thực dựa trên vi điều khiển kết nối với các công tắc điều khiển ở bên ngoài được kỳ vọng sẽ đáp ứng ngay lập tức khi một công tắc được kích hoạt hoặc khi một số sự kiện khác xảy ra.
     Một hệ điều hành thời gian thực (RTOS)  một đoạn mã (thường được gọi là các hạt nhân hay kernel) điều khiển phân công tác vụ khi vi điều khiển được hoạt động trong một môi trường đa tác vụ. Quyết định RTOS , ví dụ, trong đó xác định nhiệm vụ để chạy tiếp theo, làm thế nào để phối hợp ưu tiên công việc, và làm thế nào để truyền dữ liệu và các thông điệp giữa các tác vụ.
     Chương này tìm hiểu các nguyên tắc cơ bản của hệ thống nhúng đa nhiệm  đưa ra ví dụ của một RTOS được sử dụng trong các dự án đơn giản. Mã đa nhiệm và RTOS là những chủ đề phức tạp và rộng, chương này mô tả các khái niệm ngắn gọn liên quan đến những công cụ này . Bạn đọc quan tâm có thể tham khảo nhiều sách và giấy tờ có sẵn về hệ điều hành, hệ thống đa tác vụ,  RTOS.
     Có một số hệ thống RTOS thương mại có sẵn cho vi điều khiển PIC. Tại thời điểm viết bài, ngôn ngữ mikroC không hỗ trợ cung cấp các hàm xây dựng sẳn cho RTOS. Hai hệ thống phổ biến cấp cao RTOS cho vi điều khiển PIC  Salvo (www.pumpkin.com) có thể được sử dụng với trình biên dịch Hi-Tech PIC C, và trình biên dịch CCS (Customer Computer Service) với các hàm hỗ trợ RTOS được xây dựng sẳn để sử dụng. Trong chương này, các ví dụ RTOS  được viết dựa trên trình biên dịch CCS (www.ccsinfo.com) , một trong những trình biên dịch phổ biến PIC C phát triển cho loạt các vi điều khiển PIC16  PIC18 .
10.1 GIAI ĐOẠN MÁY (State Machines)

     
Giai đoạn máy là các cấu trúc đơn giản được sử dụng để thực hiện một số hoạt động, thường là theo một trình tự. Nhiều hệ thống đời sống thực rơi vào thể loại này. Ví dụ, các hoạt động của một máy giặt hay máy rửa bát  dễ dàng mô tả với một cấu trúc giai đoạn máy.
     Có lẽ phương pháp đơn giản nhất để thực hiện một cấu trúc giai đoạn máy trong C là sử dụng một câu lệnh switch-case. Ví dụ, hệ thống giám sát nhiệt độ của chúng ta có ba tác vụ, tên Task 1, Task 2 và Task3 như trong hình 10.1. Giai đoạn máy thực hiện 3 tác vụ sử dụng câu lệnh switch-case được thể hiện trong hình 10.2 . Giai đoạn bắt đầu  1, và mỗi nhiệm vụ gia tăng số giai đoạn lên một để chọn giai đoạn tiếptheo sẽ được thực thi. Giai đoạn cuối cùng chọn giai đoạn 1,   một sự delay  cuối câu lệnh switch-case. Cấu trúc giai đoạn máy được thực hiện liên tục bên trong một vòng lặp for vô tận.
for(;;)
{
state = 1;
switch (state)
{
CASE 1:
implement TASK 1
state++;
break;

CASE 2:
implement TASK 2
state++;
break;

CASE 3:
implement TASK 3
state = 1;
break;
}
Delay_ms(n);
}
Hình 10.2: Giai đoạn máy thực thi trong C
     Trong nhiều ứng dụng, các giai đoạn không thực hiện theo trình tự, thay vào đó giai đoạn kế tiếp được lựa chọn bởi giai đoạn hiện tại bằng cách chọn trực tiếp hoặc bởi một vài điều kiện. 
for(;;)
{
state = 1;
switch (state)
{
CASE 1:
implement TASK 1
state = 2;
break;
CASE 2:
implement TASK 2
state = 3;
break;
CASE 3:
implement TASK 3
state = 1;
break;
}
Delay_ms(n);

}
Hình 10.3: lựa chọn trạng thái tiếp theo từ trạng thái hiện tại
     Giai đoạn máy , mặt dù dễ thực hiện , là cơ bản nhưng có ứng dụng hạn chế. Nó có thể chỉ sử dụng trong hệ thống không đáp ứng thực sự nơi mà các nhiệm vụ hoạt động được xác định rõ ràng  các nhiệm vụ không được ưu tiên.
     Hơn nữa, một số tác vụ có thể quan trọng hơn những tác vụ khác. Chúng ta có thể muốn có một số tác vụ phải chạy bất cứ khi nào  đủ điều kiện. Ví dụ, trong một nhà máy sản xuất , một tác vụ thiết lập 1 cảnh báo phải chạy khi nhiệt độ quá nóng. Khi đó ta đòi hỏi phải sử dụng một hệ thống phức tạp như RTOS.

10.2  HỆ ĐIỀU HÀNH THỜI GIAN THỰC (RTOS)

     
Hệ điều hành thời gian thực được xây dựng xung quanh một hạt nhân đa nhiệm (multi-tasking kernel)nó có nhiệm vụ điều khiển phân bổ lát thời gian cho tác vụ. Một lát thời gian  khoảng thời gian một nhiệm vụ nhất định  để thực hiện trước khi nó dừng lại  thay thế bằng một tác vụ khác. Quá trình này,cũng được gọi là chuyển đổi bối cảnh, lặp đi lặp lại liên tục. Khi chuyển đổi bối cảnh xảy ra, tác vụ thực thi bị dừng lại, thanh ghi xử lý được lưu trong bộ nhớ, thanh ghi xữ lý của các công việc có sẵn tiếp theo được nạp vào CPU,  các nhiệm vụ mới bắt đầu thực hiện. Một RTOS cũng cung cấp các thông điệp qua lại giữa các tác vụ, đồng bộ hóa tác vụ,  phân bổ các nguồn tài nguyên được chia sẻ với các tác vụ.
Các phần của một RTOS là:
  • Lập lịch trình
  • Trình phục vụ RTOS
  • Đồng bộ và công cụ thông điệp
 10.2.1 Lập lịch trình
Lập lịch trình là trái tim của mọi RTOS, vì nó cung cấp các thuật toán để chọn nhiệm vụ để thực hiện. Ba trong số các thuật toán lập lịch trình thường gặp là:


  Lập lịch trình hợp tác
  Lập Lịch trình
 Round-robin
  Lập lịch trình ưu tiên
     Lập lịch trình hợp tác: có lẽ là thuật toán lập lịch trình đơn giản nhất có sẵn. Mỗi nhiệm vụ chạy cho đến khi nó được hoàn thành và tự nguyện giải phóng CPU cho nhiệm vụ khác chạy. Lập lịch trình hợp táckhông thể đáp ứng thời gian thực hệ thống cần, vì nó không thể hỗ trợ các ưu tiên của nhiệm vụ theo tầm quan trọng. Ngoài ra, một tác vụ đơn có thể sử dụng CPU quá lâu, để lại quá ít thời gian cho các tác vụ khác. Và lịch trình không kiểm soát thời gian thực thi các tác vụ khác nhau . Một giai đoạn máy  một hình thức đơn giản của một kỹ thuật lập lịch trình hợp tác.
     Lập Lịch round-robin: mỗi tác vụ được gán thời gian CPU bằng nhau (xem Hình 10.4). Một bộ đếm sẽ theo dõi các lát thời gian cho mỗi công việc. Khi một lát thời gian của một nhiệm vụ được hoàn thành, bộ đếm được xóa và tác vụ được đặt ở cuối chu kỳ. Nhiệm vụ mới được thêm vào được đặt ở cuối chu kỳvới bộ đếm của nó xóa về 0. Điều này, như lập lịch trình hợp tác, Nó không thật sự hữu ích trong một hệ thống thời gian thực, vì một số nhiệm vụ có thể chỉ tốn một vài miligiây trong khi những tác vụ khác yêu cầu hàng trăm mili giây hoặc nhiều hơn.

Hình 10.4 Lập lịch trình round-robin
     Lập lịch trình ưu tiên: được coi là một thuật toán lập lịch trình thời gian thực. Nó dựa vào mức độ ưu tiên,  mỗi công việc được gán một mức ưu tiên (xem hình 10.5). Các nhiệm vụ với mức ưu tiên cao nhất có được thời gian CPU. Hệ thống thời gian thực thường hỗ trợ các mức ưu tiên trong dãi từ 0-255, trong đó 0 là ưu tiên cao nhất  255 là thấp nhất.
Hình 10.4 Lập lịch trình ưu tiên
Trong một số hệ thống thời gian thực, nơi có nhiều tác vụ có cùng một mức ưu tiên , lập lịch trình ưu tiên kết hợp với lập lịch trình round-robin. Trong trường hợp như vậy, nhiệm vụ  mức ưu tiên cao hơn chạy trước những ưu tiên thấp hơn,  các nhiệm vụ ở cùng cấp độ ưu tiên chạy bởi lập lịch trình round-robin.Nếu một nhiệm vụ được ưu tiên bởi một nhiệm vụ ưu tiên cao hơn, bộ đếm thời gian của nó được lưu lại và sau đó khôi phục khi  lấy lại quyền kiểm soát của CPU.
Trong một số hệ thống một lớp ưu tiên thời gian thực nghiêm ngặt được xác định nơi các nhiệm vụ trên lớp này có thể chạy để hoàn thành (hoặc chạy cho đến khi tài nguyên không có sẵn) ngay cả khi có những nhiệm vụ khác ở mức độ ưu tiên như nhau.

Nguồn: http://www.ytuongnhanh.vn/

No comments:

Post a Comment

inmoov finger voice test

Inmoov finger voice test