0
Tải bản đầy đủ (.pdf) (86 trang)

Xây dựng các tác vụ t−ơng ứng các tiến trình

Một phần của tài liệu NGHIÊN CỨU, THIẾT KẾ HỆ ĐIỀU HÀNH TRÊN BỘ VI ĐIỀU KHIỂN 8 BÍT (Trang 64 -68 )

4.3.1.1. Nguyên tắc xây dựng các tác vụ trên trình dịch C.

Trình dịch C cho phép xây dựng tới 16 tác vụ, 16 tác vụ này cĩ thể luân phiên thực hiện, khi đĩ hệ thống cĩ thể cĩ tới 16 tiến trình.

Các tác vụ đ−ợc trình dịch C định nghĩa nh− sau :

void name (void) _task_ task ID

Trong đĩ:

name là tên các tác vụ.

task ID là số hiệu của các tác vụ (task ID- 0 đến 15). Ví dụ:

void init (void) _task_ task 0

Khi thực hiện, CPU luơn thực hiện ở task 0 tr−ớc tiên, chính vì vậy task 0 luơn đ−ợc dùng để khởi tạo hoặc khơng khởi tạo cho các task khác.

Để khởi tạo cho một task, trình dịch C cung cấp sắn hàm

os_create(task ID).

Ví dụ cần khởi tạo task 5 thì câu lệnh t−ơng ứng sẽ là: os_create(5)

Để khơng khởi tạo một task nào đĩ (đ−a task đĩ vào trạng thái dừng-

halt), trình dịch C cung cấp sẵn hàm os_delete (task ID).

4.3.1.2. Xây dựng các tác vụ.

Nh− đã đề cập trong ch−ơng 3, hệ thống phần cứng đ−ợc thiết kế với các thành phần chính bao gồm (1):

- Hệ thống hiển thị thơng tin trên ma trận LED bao gồm 3 ma trận LED. - Đồng hồ thời gian thực hiển thị bằng 4 LED 7 thanh.

- Giao diện ng−ời sử dụng gồm 1 màn hình tinh thể lỏng LCD và các

phím nhấn.

Với hệ thơng này thì cĩ thể chia thành các tác vụ nh− sau: - Tác vụ 0 (task 0) : Dùng để khởi tạo cho các tác vụ khác

- Tác vụ 1 (task 1): Dùng để nhận lệnh điều khiển từ ng−ời sử dụng, từ đĩ gửi tín hiệu điều khiển cho các tác vụ khác.

- Tác vụ 2 (task 2): Dùng để hiển thị các thơng báo trên LCD phục vụ ng−ời điều khiển.

- Tác vụ 3 (task 3): Tác vụ thời gian, tác vụ này cung cấp thời gian thực cho các tác vụ 4

- Tác vụ 4 (task 4) : Dùng để quét các thơng số phút, giây theo thời gian thực lên 4 LED 7 thanh.

- Tác vụ 5 (task 5) : Dùng để quét các thơng tin cần hiển thị trên ma trận LED.

Giải thuật của các tác vụ nh− sau: Tác vụ 4 (task 4):

while (1) /* lặp vơ tận */ {

Trễ 1 giây (dùng bộ định thời); Tăng biến giây lên 1 đơn vị; if (biến giây == 60)

{

biến giây = 0;

Tăng biến phút lên 1 đơn vị; if (biến phút == 60) {

Biến phút = 0;

Tăng biến giờ lên 1 đơn vị; if (biến giờ == 24) { biến giờ=0; } } } } Tác vụ 5 (task 5):

Giả thiết cần hiển thị x phút và y giây: while(1) /*lặp vơ tận*/

{

cập nhật thời gian thực vào hai biến x và y; phut_hang_don_vi=x%10;

phut_hang_chuc =x/10; giay_hang_don_vi=y%10; giay_hang_chuc =x/10;

P1=M[x/10]; //xuất mã của chỉ số hàng chục lên LED thứ nhất.

P2.0=1; //cấp nguồn để LED thứ nhất sáng Trễ 30ms; //chu kỳ quét nhở hơn 1/14 giây.

P1=M[x%10]; //xuất mã của chỉ số hàng đơn vị lên LED thứ hai.

P2.1=1; //cấp nguồn để LED thứ hai sáng Trễ 30ms; //chu kỳ quét nhở hơn 1/14 giây. P1=M[y/10]; //xuất mã của chỉ số hàng chục lên LED thứ ba.

P2.2=1; //cấp nguồn để LED thứ ba sáng Trễ 30ms; //chu kỳ quét nhở hơn 1/14 giây.

P1=M[y/%0]; //xuất mã của chỉ số đơn vị của LED thứ t−.

P2.3=1; //cấp nguồn để LED thứ t− sáng Trễ 30ms; //chu kỳ quét nhở hơn 1/14 giây. }

-Tác vụ 5 (task 5) :

while(1) //lặp vơ tận {

Xuất mã của dịng chữ thứ nhất lên các cột của ma trận LED (Port 0,2,3);

Dịng thứ nhất sáng;

Trễ 30ms; chu kỳ quét nhỏ hơn 1/24 giây.

Xuất mã của dịng chữ thứ hai lên các cột của ma trận LED (Port 0,2,3);

Dịng thứ hai sáng;

Trễ 30ms; chu kỳ quét nhỏ hơn 1/24 giây.

Xuất mã của dịng chữ thứ ba lên các cột của ma trận LED (Port 0,2,3);

Dịng thứ ba sáng;

Trễ 30ms; chu kỳ quét nhỏ hơn 1/24 giây. ...

Xuất mã của dịng chữ thứ tám lên các cột của ma trận LED (Port 0,2,3);

Dịng thứ tám sáng;

Trễ 30ms; chu kỳ quét nhỏ hơn 1/24 giây. }

Một phần của tài liệu NGHIÊN CỨU, THIẾT KẾ HỆ ĐIỀU HÀNH TRÊN BỘ VI ĐIỀU KHIỂN 8 BÍT (Trang 64 -68 )

×