CHƯƠNG 3 1 RTX51 TINY

13 389 0
CHƯƠNG 3   1 RTX51 TINY

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Chương 3: I RTX51 TINY GIỚI THIỆU: Để tăng hiệu làm việc yêu cầu thiết chương trình phải thực đồng thời nhiều công việc nhiều tác vụ Vì chương trình viết theo hệ điều hành thời gian thực (real_time operating system) cho phép xếp danh mục đồng thời nhiều tác vụ hệ thống nguồn sử dụng chương trình RTX-Tiny(RTX51) phần mềm Keil Ưu điểm việc xây dựng chương trình theo kiểu hoạt động công việc khác chương trình hoạt động độc lập, không gây ảnh hưởng với mặt thời gian xử lý Nếu lý không mong muốn mà tác vụ hệ thống chương trình không thực thời gian thực lớn, có vài vòng lặp vô tận chương trình hệ thống không bò “treo” mà tác vụ khác hoạt động bình thường Giới thiệu phần mềm Keil: Không chương trình viết cho vi xử lý trước đây, chương trình luận văn không dùng ngôn ngữ hợp ngữ (assemler) mà viết ngôn ngữ lập trình C liên kết với chương trình C51-compile phần mềm Keil để dòch sang ngôn ngữ máy Đây phần mềm chuyên dùng sử dụng ngôn ngữ lập trình C để lập trình cho loại vi xử lý sản xuất nhiều hãng khác giới, chương trình chứa tất hàm C mở rộng cần thiết cho vi điều khiển sử dụng Tiện ích cách viết ngôn ngữ lập trình C ngôn ngữ lập trình cấp cao gần gủi với người sử dụng ngôn ngữ máy tính assembler Ngoài ra, cấu trúc chương trình viết C gọn dễ quản lý với câu lệnh vòng lặp đơn giản, điều thật có lợi ta muốn nâng cấp hay mở rộng chương trình Song song với tiện ích trên, chương trình C51 phần mềm Keil hổ trợ cho ta số hàm hàm vào/ (ví dụ như: hàm xuất nhập ký tự đơn getchar(),putchar(); hàm xuất nhập chuỗi ký tự gets(), puts()), hàm thời gian thực chương trình RTX51 Tiny … số hàm khác giúp hệ thống hoạt động hoàn hảo Bên cạnh đó, chương trình biên dòch chương trình chạy mô máy tính (chương trình Debug) phần mềm Keil thuận lợi lớn Nó giúp cho người lập trình quan sát chương trình cách xác với bước thực lệnh chạy chương trình, có mã chương trình viết ngôn ngữ C chương trình dòch sang mã Assembler tương ứng chương trình C51-compiler thực Ngoài ra, với phần mềm ta theo dõi thay đổi giá trò biến cần quan sát, hàm ngắt, giá trò vào/ra chân Port, giá trò liệu truyền qua SBUF giá trò timer v.v Giới thiệu chương trình tuần hoàn theo thời gian biểu TRX51 tiny: RTX51 phần mềm Keil viết theo hệ điều hành thời gian thực giúp chương trình thực đa nhiệm (multi-tasking), cho phép vài tác vụ vài vòng lặp vô tận thực gần song song chương trình Tuy nhiên tác vụ chương trình không xảy đồng thời mà việc xếp tác vụ theo múi thời gian chia nhỏ, tức thời điểm công việc thực mà Đồng hồ CPU chia thành nhiều múi thời gian chương trình xếp múi thời gian cho tác vụ Mỗi tác vụ phép thực khoảng thời gian tối đa đònh trước sau chương trình chuyển sang tác vụ khác sẵn sàng thực hiện, chương trình lặp lại Vì múi thời gian chia nhỏ, thường vài mili giây nhỏ nên chương trình quét qua liên tục tác vụ dường xảy đồng thời Nếu thời điểm mà tác vụ thực tác vụ khởi động trạng thái sẵn sàng (ready) trang thái nghỉ (timeout) RTX51 sử dụng thủ tục thời gian ngắt phần cứng timer 8051 Chu kỳ ngắt xây dựng sử dụng theo đồng hồ RTX51 RTX51 không yêu cầu có hàm Main chương trình Nó tự động gọi thực chương trình tác vụ Nếu ta sử dụng hàm Main chương trình, ta phải khởi động RTX51 sử dụng hàm os_create_task hàm os_start_system RTX51 Khi rơi vào trạng thái nghỉ (timer out), thay tạm dừng thực tác vụ đứng chờ lần quét khác, ta sử dụng hàm os_wait để tín hiệu RTX51có thể bắt đầu chuyển sang thực tác vụ khác Hàm thực việc trì hoãn tác vụ hành đợi có kiện đònh trước xảy đến Trong khoảng thời gian nghỉ tác vụ khác thực • Sử dụng thời gian nghỉ (time-out) với RTX51: Một kiện đơn giản mà ta đợi với hàm os_wait khoảng thời gian nghỉ theo nhòp đồng hồ RTX51 Sự kiện sử dụng tác vụ mà có yêu cầu delay Trong vài trường hợp sử dụng switch, mà switch cần kiểm tra sau khoảng thời gian đònh Điều minh họa ví dụ sau: #include int counter0; int counter1; void job0 (void) _task_ { os_create ( ) ; while ( ) { counter0 ++; os_wait (K_TMO, 3,0); } } void job1 (void) _task_ { while (1) { counter1++; os_wait (K_TMO, 5, 0); } } ví dụ trên, job0 thực trước job1 Nhưng tại, sau tăng counter0, job0 gọi hàm os_wait để tạm dừng 3khoảng chia thời gian Ngay lúc này, RTX51 chuyển sang tác vụ kế tiếp, cụ thể job1,sau job1 tăng counter1, gọi hàm os_wait để tạm dừng khoảng chia thời gian Lúc này, RTX51 tác vụ khác để thực hiện, rơi vào trạng thái không làm đợi hết khoảng chia thời gian trôi qua trước tiếp tục thực job1 Kết ví dụ counter0 tăng sau khoảng thời gian counter1 tăng sau khoảng chia thời gian • Sử dụng tín hiệu với RTX51: Ta dùng hàm os-wait để tạm dừng tác vụ đợi tín hiệu từ tác vụ khác Điều sử dụng cho hai hay nhiều tác vụ ngang Đợi tín hiệu làm việc có nghóa là: Nếu tác vụ đợi tín hiệu ,và cờ tín hiệu 0, tác vụ trì hoãn có tín hiệu gởi đến Nếu cờ tín hiệu lên tác vụ hỏi, cờ xoá, tác vụ lại tiếp tục thực Điều minh hoạ ví dụ sau: #include int counter0; int counter1; void job0 (void) _task_ { os_create ( ) ; while ( ) { if ( ++counter0 == ) os_send_signal } } void job1 (void) _task_ { while (1) { os_wait (K_SIG, 0, 0); counter1++; } } (1); Trong ví dụ trên, job1 đợi nhận tín hiệu từ vài tác vụ khác gởi đến Khi nhận tín hiệu, tăng counter1 lại đợi tín hiệu khác job0 liên tục tăng counter0 tràn đến Khi điều xảy ra, job gởi tín hiệu đến job1 chương trình RTX51 đánh dấu job1 sẵn sàng thực Tuy nhiên, job1 không thực suốt thời gian RTX51 nhận chuyển sang múi thời gian • Sự ưu tiên quyền ưu tiên: Một bất lợi chương trình ví dụ job1 không bắt đầu nhận tín hiệu từ job0 Trong số trường hợp điều không chấp nhận lí thời gian RTX51 cho phép ta xác đònh mức ưu tiên cho tác vụ Một tác vụ với mức ưu tiên cao ngắt quyền ưu tiên tác vụ có mức ưu tiên thấp cần thực Trong ví dụ trên, ta thay đổi cách khai báo cho job1 nhận mức ưu tiên cao job0 Theo mặc đònh, tất tác vụ đònh mức ưu tiên 0, mức ưu tiên thấp Các mức ưu tiên cho phép từ đến Trong ví dụ ta, đònh nghóa job1 với mức ưu tiên cấp sau: Void job1 (void) _ task_ _priority_ {While (1) { Os_wait (K_SIG, 0, ); Counter1++; } } Với cách khai báo này, job0 gởi tín hiệu đến job1, job1 bắt đầu thực Một số yêu cầu đònh nghóa chương trình RTX51 Tiny:  Điều khiển ngắt: RTX51 Tiny hoạt động song song với hàm ngắt Tương tự ứng dụng khác 8051, nguồn ngắt phải cho phép ghi phần cứng 8051 để tạo ngắt RTX51 Tiny không chứa điều khiển cho ngắt; lý đó, cho phép ngắt cụ thể đủ để xử lý ngắt.RTX51 Tiny sử dụng timer ngắt timer0 8051 cho hệ thời gian thực Ngoại trừ cấu trúc khác 8051, để tránh trùng lặp xử lý ngắt timer0 không nên sử dụng chương trình  Registerbanks: RTX51 tiny qui tất tác vụ vào registerbank Vì lý đó, tất hàm tác vụ phải chuyển từ ngôn ngữ cấp cao sang ngôn ngữ cấp thấp theo đònh nghóa chương trình C51 Các hàm ngắt sử dụng registerbank lại Tuy nhiên, RTX51 yêu cầu byte cố đònh không gian registerbank Các registerbank sử dụng RTX51 Tiny đònh nghóa theo biến cấu hình INT_REGBANK thư viện hàm chương trình C51  Đònh nghóa tác vụ: Chương trình thời gian thực hay đa nhiệm (multitasking) biên soạn với vài tác vụ thực riêng biệt RTX51 cho phép thực lên đến 16 tác vụ Các tác vụ hàm đơn chương trình C có giá trò trả dạng void danh sách đối số dạng void khai báo thuộc tính hàm sau: void func (void) _task_ num {…} với num số ID tác vụ đánh số liên tục từ đến 15 Các hàm thư viện RTX51-tiny : Hàm Mô tả Os-create-task Ghi tác vụ vào danh sách thực Os-delete_task Xóa tác vụ khỏi danh sách thực Os_send_signal Gởi tín hiệu đến tác vụ khác từ ngắt Os- clear_signal Xóa tín hiệu đïc gởi Os_running_task_id Trở tác vụ thứ ID từ tác vụ hành Os-wait Tạm dừng tác vụ hành đợi vài kiện như: khoảng thời gian qui đònh, khoảng thời gian nghỉ tín hiệu từ tác vụ khác hay ngắt Os-wait1 Tạm dừng tác vụ hành đợi kiện tín hiệu từ tác vụ khác Os-wait2 Tạm dừng tác vụ hành đợi vài kiện : 1khoảng thời gian qui đònh, khoảng thời gian nghỉ tín hiệu từ tác vụ khác hay ngắt Các thông số hàm: Hàm os_create_task: #include char os_create_task (unsigned char task_id) /*tác vụ thứ id*/ Hàm Os-delete_task: #include char os_delete_task (insigned char task_id) Hàm Os_send_signal #include char os_send_signal (insigned char task_id) Hàm Os- clear_signal: #include char os_clear_signal (insigned char task_id) Hàm Os_running_task_id: #include char os_running_task_id (void) Hàm Os-wait: #include char os_wait (unsigned char event_sel, /*event: kiện chờ*/ unsigned char ticks, /*khoảng thời gian chờ*/ unsigned int dummy); /*unused argument*/ số kiên là: K_IVL đợi khoảng thời gian qui đònh K_SIG đợi tín hiệu K_TMO đợi khoảng thời gian nghỉ Os-wait1: #include char os_wait1 (unsigned char event_sel); /*event: kiện chờ*/ Hằng số kiện K_SIG (đợi tín hiệu) Os-wait2: char os_wait (unsigned char event_sel, unsigned char ticks); số kiên là: /*event: kiện chờ*/ /*khoảng thời gian chờ*/ K_IVL đợi khoảng thời gian qui đònh K_SIG đợi tín hiệu K_TMO đợi khoảng thời gian nghỉ [...]...#include char os_running_task_id (void) Hàm Os-wait: #include char os_wait (unsigned char event_sel, /*event: sự kiện chờ*/ unsigned char ticks, /*khoảng thời gian chờ*/ unsigned int dummy); /*unused argument*/ các hằng số sự kiên là: K_IVL đợi một khoảng thời gian qui đònh K_SIG đợi một tín hiệu K_TMO đợi một khoảng thời gian nghỉ Os-wait1: #include char os_wait1 (unsigned ... nghóa chương trình RTX 51 Tiny:  Điều khiển ngắt: RTX 51 Tiny hoạt động song song với hàm ngắt Tương tự ứng dụng khác 80 51, nguồn ngắt phải cho phép ghi phần cứng 80 51 để tạo ngắt RTX 51 Tiny không... job1 chương trình RTX 51 đánh dấu job1 sẵn sàng thực Tuy nhiên, job1 không thực suốt thời gian RTX 51 nhận chuyển sang múi thời gian • Sự ưu tiên quyền ưu tiên: Một bất lợi chương trình ví dụ job1... (timeout) RTX 51 sử dụng thủ tục thời gian ngắt phần cứng timer 80 51 Chu kỳ ngắt xây dựng sử dụng theo đồng hồ RTX 51 RTX 51 không yêu cầu có hàm Main chương trình Nó tự động gọi thực chương trình

Ngày đăng: 28/11/2015, 06:23

Tài liệu cùng người dùng

Tài liệu liên quan