II.3.2 ĐA NHIỆM

Một phần của tài liệu LẬP TRÌNH VI ĐIỀU KHIỂN ATMEGA 128 VÀ MÔ PHỎNG TRÊN PROTEUS CHO HỆ ĐIỀU HÀNH NHÚNG THỜI GIAN THỰC FREERTOS (Trang 48 - 52)

9. Thanh Ghi Timer/Counter Interrupt Mask Register – TIMSK (Interrupt for Timer/counter 1)

II.3.2 ĐA NHIỆM

Thực ra, mỗi một chương trình đang thi hành là một nhiệm vụ (task) được phân chia điều khiển bởi hệ điều hành. Nếu một hệ điều hành có khả năng thi hành nhiều tác vụ thì được gọi là đa nhiệm (multitasking)

VD: Hệ điều hành Windows, chúng ta có thể nghe nhạc, chơi game, download tài liệu trong cùng lúc.

Sử dụng hệ điều hành đa nhiệm sẽ làm đơn giản quá trình thiết kế những bài toán mà nó sẽ là gánh nặng nếu chuyển hết cho phần mềm ứng dụng xử lý.

- Đa nhiệm và tính năng liên lạc nội bộ giữa các tác vụ của hệ điều hành cho phép các ứng dụng phức tạp có thể phân chia ra thành các tác vụ nhỏ hơn, đơn giản hơn, dễ quản lý hơn.

- Các phần chia nhỏ này sẽ giúp chúng ta dễ dàng có kết quả trong quá trình kiểm tra phần mềm, sử dụng lại mã chương trình ...

- Những sự tính toán thời gian phức tạp và các quá trình tuần tự chi tiết được tách biệt ra khỏi chương trình ứng dụng và chuyển nhiệm vụ này cho hệ điều hành đảm trách.

Tuy nhiên đa nhiệm xung đối với Đồng thời:

Thường thì các bộ vi xử lý chỉ có thể thực hiện một tác vụ duy nhất trong mọt thời điểm nhưng với sự chuyển đổi một cách rất nhanh giữa các tác vụ của một hệ điều hành đa nhiệm làm cho chúng dường như được chạy đồng thời với nhau. Điều này được mô tả ở sơ đồ dưới đây với 3 tác vụ và giản đồ thời gian của chúng

Hình 2.1 Xử lý đa nhiệm

II.3.3 CẤU TRÚC FreeRTOS

Là hệ điều hành thời gian thực và cũng là đa nhiệm.Được xây dựng và phát triển bởi Richard Barry. Là hệ điều hành mã nguồn mở, với phần lõi nhỏ gọn, FreeRTOS là một sự lựa chọn đúng đắn cho các hệ thống điều khiển.

• Quản lý tiến trình

– Tạo và hủy các tiến trình. Vd xTaskCreate, xTaskDelete… – Ngưng và thực hiện lại một tiến trình.Vd vTaskSuspend,

vTaskResume

– Cung cấp cơ chế lập lịch vTaskStartScheduler, vTaskEndScheduler

– Cung cấp cách thông tin giữa các tiến trình Vd Trace Hook Macros ,Queue ,semarphore ,mutexe

• Quản lý bộ nhớ

– Các RTOS hạt nhân đã phân bổ cho bộ nhớ RAM mỗi lần task, queue hay semaphore được tạo ra. Các hàm malloc () và

– Trong gói mã nguồn tải về máy bạn thì có 3 chương trình dùng để quản lý RAM đó là : heap_1.c, heap_2.c và heap_3.c

• Kiểm soát lỗi • Quản lý nhập xuất

– Thông qua các lệnh lập trình

1. Task

Task là một công việc mà hệ điều hành sẽ thực thi. Chính số lượng Task được thực thi quyết định hệ điều hành đa nhiệm; thực thi nhiều task khác nhau, hay là không; chỉ thực thi được 1 task. Khi mới được tạo ra, người lập trình phải gắn cho task một sự ưu tiên để FreeRTOS dựa vào sự ưu tiên này mà xử lý nó.(giống Co-Routine )

Các trạng thái hoạt động của task: -Running

-Ready -Blocked -Suspended

Hình 2.2 Mô hình chuyển đổi trạng thái

-Từ trạng thái Ready, Task có thể chuyển thành Running ,hoặc Suspended nếu có bị hàm vTaskSuspend() gọi đến.

-Từ trạng thái Running, Task có thể chuyển thành Blocked nếu hàm khoá API được gọi, hoặc Suspended nếu có bị hàm vTaskSuspend() gọi đến.

-Từ trạng thái Blocked, task có thể chuyển thành Ready bằng một sự kiện nào đó, hoặc Suspended nếu có bị hàm vTaskSuspend() gọi đến.

-Từ trạng thái Suspended task có thể chuyển thành trạng thái Ready nếu hàm vTaskResume() được gọi đến.

Trong FreeRTOS, có file TASK.C chứa các hàm đã viết sẵn như một thư viện hàm dành cho việc tạo,xoá, và quản lý task

VD: tạo 1 task ta dùng hàm xTaskCreate(), để xoá task ta dùng hàm xTaskDelete()….

void vTaskCode (“Tên”,void * pvParameters) (

for (;;) (

/ / Mã số đi công tác ở đây. )

)

xTaskCreate (vTaskCode, "Tên", STACK_SIZE, & ucParameterToPass, tskIDLE_PRIORITY, & xHandle);

/ / Sử dụng handle để xóa bỏ những công việc. vTaskDelete (xHandle);

Một phần của tài liệu LẬP TRÌNH VI ĐIỀU KHIỂN ATMEGA 128 VÀ MÔ PHỎNG TRÊN PROTEUS CHO HỆ ĐIỀU HÀNH NHÚNG THỜI GIAN THỰC FREERTOS (Trang 48 - 52)