Đồ án tốt nghiệp
"Nghiên cứu và port hệ điều
hành thời gian"
Đồ án tốt nghiệp
Nghiên cứu và port hệ điều hành thời gian thực FreeRTOS lên vi điều khiển PIC
1
Lời cảm ơn
Đồ án tốt nghiệp
Nghiên cứu và port hệ điều hành thời gian thực FreeRTOS lên vi điều khiển PIC
2
Mục lục
Lời cảm ơn 1
Mục lục 2
Danh mục hình vẽ và bảng biểu 4
Mở đầu 5
Phần I: Tổng quan về hệ điều hành thời gian thực 6
I. Tổng quan các loại hệ điều hành 6
1. Hệ điều hành cho Mainframe 7
2. Hệ điều hành cho các Server 8
3. Hệ điều hành đa vi xử lý 8
2. Triển khai bài toán và kết quả mô phỏng 43
II. Giao diện hỗ trợ port FreeRTOS lên PIC 44
1. Ý tưởng, mục đích và nhiệm vụ của giao diện hỗ trợ 44
2. Trình bày cụ thể về các bước cài đặt và chạy thử 44
Kết luận 45
Tài liệu tham khảo 46
Phụ lục 47
I. Giải thích rõ các file trong FreeRTOS 47
1. Các ký hiệu viết tắt trong các hàm và biến 47
2. Các file chính cần có trong lõi FreeRTOS 47
3. Các file còn lại trong kernel của FreeRTOS 57
4. Các file cần để port FreeRTOS lên vi điều khiển 59
II. Giải thích rõ về giao diện 62
Các tài liệu sẽ thêm 63
I. Example.ppt Lỗi! Thẻ đánh dấu không được xác định.
II. RTOS.pdf Lỗi! Thẻ đánh dấu không được xác định.
III. Rtos ppts.ppt 63
IV. Các file khác Lỗi! Thẻ đánh dấu không được xác định.
V. Làm cuối tuần Lỗi! Thẻ đánh dấu không được xác định.
VI. Việc làm ngày thứ 2 Lỗi! Thẻ đánh dấu không được xác định.
Đồ án tốt nghiệp
Nghiên cứu và port hệ điều hành thời gian thực FreeRTOS lên vi điều khiển PIC
4
Danh mục hình vẽ và bảng biểu
Hình 1: Sơ đồ hệ điều hành 6
Hình 2: Sơ đồ hệ thống thời gian thực trong ô tô 9
Hình 3: Hệ điều hành thời gian thực trong điều khiển 11
Nói rõ về ý nghĩa
của việc port lên VDK và sử dụng những
phần mềm free
Đồ án tốt nghiệp
Nghiên cứu và port hệ điều hành thời gian thực FreeRTOS lên vi điều khiển PIC
6
Phần I: Tổng quan về hệ điều hành thời gian thực
I. Tổng quan các loại hệ điều hành
Những hệ thống máy tính bao gồm một hay nhiều bộ vi xử lý, bộ nhớ chính,
bàn phím và nhiều thiết bị vào ra. Tất cả trong một hệ thống phức tạp. Viết chương
trình kiểm soát và sử dụng tất cả chương trình một cách chính xác, tối ưu là công việc
khó vì thế máy tính được trang bị lớp phần mềm gọi là hệ điều hành [2], nhiệm vụ
của nó là quản lý mọi thiết bị và cung cấp các chương trình ứng dụng với giao diện
đơn giản hơn xuống phần cứng.
Hình 1: Sơ đồ hệ điều hành
Hệ điều hành có thể nhìn từ hai quan điểm [2]:
· Quản lý tài nguyên (resource manages)
· Máy mở rộng (extended machines).
Ở quan điểm quản lý tài nguyên, công việc của hệ điều hành là quản lý các phần
khác nhau của hệ thống một cách hiệu quả. Tài nguyên của hệ thống (CPU, bộ nhớ,
thiết bị ngoại vi, ) vốn rất giới hạn, nhưng trong các hệ thống đa nhiệm, nhiều người
sử dụng có thể đồng thời yêu cầu nhiều tài nguyên. Để thỏa mãn yêu cầu sử dụng chỉ
với tài nguyên hữu hạn và nâng cao hiệu quả sử dụng tài nguyên, hệ điều hành cần
phải có cơ chế và chiến lược thích hợp để quản lý việc phân phối tài nguyên. Ngoài
yêu cầu dùng chung tài nguyên để tiết kiệm chi phí, người sử dụng còn cần phải chia
Ứng dụng
· Hệ điều hành cho thẻ thông minh
1. Hệ điều hành cho Mainframe
Hệ điều hành cho máy Mainframe là hệ điều hành ở mức cao nhất, loại máy
tính này được thấy nhiều ở các trung tâm cơ sở dữ liệu lớn. Những máy tính này phân
biệt với máy tính cá nhân ở giới hạn xử lý và sức chứa của chúng. Một máy tính
Mainframe với hàng nghìn đĩa và hàng nghìn gigabybe dữ liệu là điều bình thường hầu
như không có máy tính cá nhân thông thường nào có những tính năng mạnh này. Hầu
hết mainframe dùng cho những ứng dụng rất lớn.
Hệ điều hành cho mainframe có tính định hướng cao cho việc xử lý nhiều việc
mà mỗi việc cần lượng lớn I/O. Chúng thường được sử dụng ở những kiểu: mẻ, quản
Đồ án tốt nghiệp
Nghiên cứu và port hệ điều hành thời gian thực FreeRTOS lên vi điều khiển PIC
8
lý xử lý và phân chia thời gian. Hệ thống mẻ là hệ thống mà những công việc xử lý
đều đặn không có bất kỳ ảnh hưởng nào đến người sử dụng hiện tại. Nó được vận dụng
để giải quyết một số lượng lớn các yêu cầu nhỏ, ví dụ như quá trình kiểm tra ở nhà
băng hoặc sân bay. Mỗi phần của công việc thì nhỏ nhưng hệ thống phải xử lý hàng
trăm hay hàng nghìn công việc nhỏ trên một giây. Hệ thống chia sẻ thời gian chấp
nhận điều khiển từ xa để thực hiện công việc trên máy tính trong 1 lần, như những yêu
cầu về dữ liệu. Những chương trình này gần với: hệ điều hành mainframe thường thực
hiện tất cả. Ví dụ về hệ điều hành mainframe là OS/390, thế hệ sau của OS/360.
2. Hệ điều hành cho các Server
Dưới hệ điều hành mainframe một cấp là hệ điều hành chạy trên các server, một
trong các loại máy tính cá nhân rất lớn, những máy trạm, hoặc kiểu mainframe. Chúng
phục vụ nhiều user trong một thời điểm qua mạng và chấp nhận để các user chia sẻ
nguồn phần cứng hay phần mềm. Các Server có thể cung cấp dịch vụ in ấn, dịch vụ
file hoặc dịch cụ web. Các cung cấp Internet chạy trên nhiều server để hỗ trợ khách
hàng và các Website sử dụng trong server để lưu trữ các trang Web và trả lời các yêu
mềm, trong đó có những đáp ứng deadline có thể không thỏa mãn toàn bộ, hệ truyền
tiếng nói số hay đa phương tiện là một ví dụ cho hệ này. Điển hình cho hệ điều hành
thời gian thực là VxWorks và QNX. Hình 2: Sơ đồ hệ thống thời gian thực trong ô tô
6. Hệ điều hành nhúng
Tiếp tục với hệ nhỏ hơn, chúng ta đến với những máy tính palmtop và hệ
nhúng. Palmtop hay PDA là loại máy tính nhỏ hoạt động với số lượng nhỏ các chương
trình. Hệ nhúng chạy trên những máy tính điều khiển các thiết bị nói chung không
giống với máy tính, như TV sets, lò vi sóng, điện thoại di động. chúng thường có tính
thời gian thực nhưng kích cỡ, bộ nhớ và sự hạn chệ năng lượng làm chung đặc biệt.
Những hệ thông dụng là PalmOS và Windows CE.
7. Hệ điều hành cho thẻ thông minh
Hệ điều hành nhỏ nhất chạy trên các thẻ thông minh, như credit card, thiết bị
bao gồm chip CPU. Chúng quản lý rất nghiêm ngặt năng lượng sử dụng và cách nén
Đồ án tốt nghiệp
Nghiên cứu và port hệ điều hành thời gian thực FreeRTOS lên vi điều khiển PIC
10
bộ nhớ. Một số hệ chỉ sử dụng cho một chương trình duy nhất như thanh toán điện tử,
nhưng những hệ khác phục vụ nhiều chương trình trong cùng một thẻ thông minh. Đó
thường là những hệ thống độc quyền.
Một số thẻ thông minh được viết trên Java, trên ROM của thẻ thông minh cần
chương trình dịch cho JVM. Java applet được tải về thẻ và được dịch ra để sử dụng.
Một số thẻ có thể chạy nhiều Java applet trong cùng một thời điểm, để quản lý nhiều
chương trình cần bộ lập lịch. Cần quản lý và đảm bảo cho hệ thống khi có hai hay
nhiều applet chạy trong cùng một thời điểm. Những vấn đề này cần được quản lý bởi
hệ điều hành hiện tại trên thẻ.
· Truyền thông và đồng bộ giữa các tác vụ hoặc giữa tác vụ và ngắt.
· Phân phối bộ nhớ động.
· Quản lý các thiết bị vào ra.
Hình 4: Sơ đồ chức năng của hệ điều hành thời gian thực
Nhiều hệ điều hành không thời gian thực cũng cung cấp nhân của tương tự
nhưng điểm khác biệt lớn nhất của hệ điều hành thời gian thực và hệ điều hành không
thời gian thực nói chung là tính tiền định (deterministic). Thời gian tiền định tức là các
dịch vụ của hệ điều hành thực hiện chỉ được yêu cầu một khoảng thời gian nhất định,
muốn tiền định tức là phải tính toán chính xác theo toán học. Các đáp ứng về thời gian
là nghiêm ngặt trong hệ điều hành thời gian thực, không thể có thành phần thời gian
ngẫu nhiên. Với một phần thời gian ngẫu nhiên có thể tạo ra trễ ngẫu nhiên, từ đó gây
ra các đáp ứng deadline không thoả mãn.
Đồ án tốt nghiệp
Nghiên cứu và port hệ điều hành thời gian thực FreeRTOS lên vi điều khiển PIC
12
b) Các đặc điểm của RTOS
Một RTOS được ứng dụng thành công vào một nền vi điều khiển thường phải
bao gồm 3 nhóm sau:
· RTOS Kernel: nhân của hệ điều hành, trong đó thực thi các nhiệm vụ cơ bản
của RTOS. Kernel dùng chung cho tất cả các platform và được cập nhật
theo version.
· Port: thường được phát triển bởi nhà sản xuất MCU, nó khác nhau đối với
từng họ MCU.
· BSP (Board Support Package): chứa các hàm chức năng truy xuất đến các
ngoại vi, thực chất đây chính là driver cho các ngoại vi của MCU.
Một RTOS tốt chỉ khi có nhân tốt, tài liệu tốt và được phân phát cùng các công
cụ tốt để phát triển và vận hành ứng dụng. Vì vậy, các tính toán về khoảng thời gian
nào đó. Nó thường được tìm thấy ở những chỗ xảy ra sự tranh chấp và cần giữ số kết
nối hệ thống phản ứng với sự thay đổi hoàn cảnh. Nói chung so với hệ điều hành thời
gian thực cứng, hệ điều hành thời gian thực mềm đặt sự thoả mãn yêu cầu cho hầu hết
các tác vụ hơn là thoả mãn một deadline nào đó, nó cho phép một số deadline không
được thoả mãn ở một dung sai nào đó. Ví dụ như phần mềm duy trì và cập nhậtkế
hoạch bay cho hãng hàng không thương mại, hệ thống truyền hình và nghe nhạc trực
tuyến, điều khiển máy giặt,
Các đặc điểm Hệ điều hành thời gian
thực cứng
Hệ điều hành thời
gian thực mềm
Thời gian đáp ứng thoả mãn nghiêm ngặt cho phép sai lệch trong
giới hạn
Thực thi tại thời điểm tải
nặng nhất
có thể dự báo trước giảm sút
Độ an toàn thường là tranh chấp ít tranh chấp
Dung lượng dữ liệu nhỏ hoặc trung bình lớn
Điều khiển nhịp độ phụ thuộc môi trường phụ thuộc vi diều khiển
Đoạn dữ liệu đoạn ngắn đoạn dài
Bắt lỗi tự động phụ thuộc người dùng
Bảng 1: Bảng so sánh hai loại hệ điều hành thời gian thực
Đồ án tốt nghiệp
Nghiên cứu và port hệ điều hành thời gian thực FreeRTOS lên vi điều khiển PIC
14
3. Tầm quan trọng hệ điều hành thời gian thực
đẩy các nhà phát triển hệ điều hành thực hiện nghiên cứu và phát triển chuẩn. Chính
phủ Mỹ cũng có một số chương trình về lĩnh vực này như công nghệ quản lý tài
nguyên thời gian thực, mạng, quản lý dữ liệu và phần mềm điều khiển trung gian. Mục
đích của chương trình là làm cho các hệ thống cộng tác, phân tán có thể giao tiếp và
Đồ án tốt nghiệp
Nghiên cứu và port hệ điều hành thời gian thực FreeRTOS lên vi điều khiển PIC
15
chia sẻ tài nguyên với nhau. Một uỷ ban chuyên trách đang đẩy mạnh việc tạo ra
khung công nghệ cho tính toán phân tán thời gian thực, áp dụng cho cả ứng dụng quân
sự và thương mại.
4. Các hệ điều hành thời gian thực phổ biến
a) LynxOS
LynxOS [12] là loại hệ điều hành thời gian
thực cứng, làm việc với Unix và Java. Các thành
phần LynxOS được thiết kế tiền định (thời gian thực
cứng) có nghĩa là phải đáp ứng trong khoảng thời
gian biết trước. Thời gian đáp ứng tiền định được đảm bảo ngay cả khi cổng vào ra
phải tải nặng do mô hình đơn luồng của kernel, làm cho chương trình phục vụ ngắt rất
ngắn và nhanh.
LynxOS 3.0 phát triển từ kiến trúc nguyên gốc (chỉ gồm một mô đun làm tất cả
mọi việc) của các phiên bản ban đầu lên đến thiết kế microkernel. Dung lượng của
microkernel là 28Kbyte và cung cấp các dịch vụ cơ bản như lập lịch, phần luồng ngắt
và đồng bộ. Các dịch vụ khác được cung cấp bởi các mô đun dịch vụ nhỏ hơn gọi là
Kernel Plug-Ins (KPIs). Nhờ thêm KPIs vào microkernel, hệ thống có thể cấu hình để
hỗ trợ vào ra và quản lý file, TCP/IP, nó hoạt động như hệ điều hành UNIX đa
nhiệm giống phiên bản trước.
b) Vxworks
VxWorks [11] là hệ điều hành thời gian thực
QNX Neutrino là rất mềm dẻo. Người phát triển có thể dễ dàng tuỳ biến OS cho
phù hợp với ứng dụng của mình. Từ một cấu hình cơ bản nhất của một nhân nhỏ
(microkernel) cùng với một vài module nhỏ tới một hệ thống được trang bị phát triển
mạng diện rộng để phục vụ hàng trăm người dùng.
QNX Neutrino đạt được mức độ chuyên môn hoá về tính hiệu quả, tính module
hoá và tính đơn giản với hai yếu tố cơ bản sau:
· Kiến trúc microkernel của QNX đảm bảo cách ly bộ nhớ các process, không
cho chúng sơ ý phá hoại lẫn nhau
· Giao tiếp liên quá trình dựa trên thông điệp
d) uCOS
µC/OS [10] là nhân một hệ điều hành
thời gian thực do J. Labrosse xây dựng. Nó
là nhân hệ điều hành thời gian thực có tính
khả chuyển cao, mềm dẻo, có tính năng ưu
tiên, thời gian thực và đa tác vụ. µC/OS hỗ trợ các tính năng sau: bộ lập lịch, truyền
thông điệp, đồng bộ và chia sẻ dữ liệu giữa các tác vụ, quản lý bộ nhớ, các thiết bị vào
ra, hệ thống file, mạng.
µC/OS hỗ trợ nhiều bộ vi xử lý và rất gọn nhẹ để sử dụng cho nhiều hệ thống
nhúng. Phiên bản µC/OS-II tăng cường thêm khả năng đặt tên tới mỗi đối tượng của
nhân. Đặc biệt với phiên bản V2.6, chúng ta có thể gán tên tới một tác vụ, đèn báo,
mailbox, hàng đợi, một nhóm sự kiện hay một vùng bộ nhớ. Do đó, bộ phất hiện lỗi có
thể hiển thị tên của những đối tượng đó, và cho phép chúng ta nhanh chóng xem thông
tin về những đối tượng. Ngoài ra, V2.6 cho phép bộ sửa lỗi đọc thông tin cấu hình của
một ứng dụng và hiển thị những thông tin đó.
Đồ án tốt nghiệp
Nghiên cứu và port hệ điều hành thời gian thực FreeRTOS lên vi điều khiển PIC
17
Phần II: Tìm hiểu chi tiết về FreeRTOS
nghiêm ngặt với chuẩn IEC61508. Và chuẩn IEC61508 SIL3 đã được tạo ra và phát
triển độc lập để hoàn thiện tài liệu cho SafeRTOS.
Cụ thể các hỗ trợ khác nhau của FreeRTOS và OpenRTOS:
Thương mại hoá
Chuẩn IEC 61508
Đồ án tốt nghiệp
Nghiên cứu và port hệ điều hành thời gian thực FreeRTOS lên vi điều khiển PIC
18
FreeRTOS OpenRTOS
Miễn phí Có Không
Có thể sử dụng trong ứng dụng thương mại? Có Có
Miễn phí trong ứng dụng thương mại? Có Có
Phải đưa ra mã nguồn của code ứng dụng? Không Không
Phải đưa ra thay đổi mã nguồn của lõi? Có Không
Phải đưa vào báo cáo nếu sử dụng FreeRTOS.org? Có, đường dẫn
Không
Phải cung cấp mã FreeRTOS cho người sử dụng? Có Không
Có thể nhận hỗ trợ thương mại? Không Có
Bảng 2: Các hỗ trợ khác nhau từ FreeRTOS và OpenRTOS
2. Các đặc điểm của FreeRTOS
a) Các chức năng được cung cấp trong FreeRTOS
FreeRTOS.org là lõi của hệ điều hành thời gian thực được thiết kế cho các hệ
thống nhúng nhỏ, với các chức năng chính sau [1] :
· Lõi FreeRTOS hỗ trợ cả preemptive, cooperative và các lựa chọn cấu hình
lai giữa hai phần.
· SafeRTOS là sản phẩm dẫn xuất, cung cấp mã nguồn riêng ở mức độ cao.
· Được thiết kế nhỏ, đơn giản và dễ sử dụng.
· Rất đơn giản, lõi của hệ điều hành chỉ gồm 3 hoặc 4 file (phụ thuộc vào việc
có sử dụng co-routine hay không). Phần lớn các file nằm trong file .zip được
tải về, nó cung cấp hầu hết các ứng dụng.
· Có thể sử dụng miễn phí trong ứng dụng thương mại (xem kỹ các điều kiện
bản quyền).
· Hỗ trợ nhiều: porting, nền phát triển, hoặc các dịch vụ phát triển ứng dụng
mà nó yêu cầu.
· Là tổ chức tốt với số người sử dụng lớn và ngày càng tăng.
· Bao gồm nhiều ví dụ tiền cấu hình cho mỗi port. Không cần tính toán xem
làm thế nào cài đặt, chỉ tải về và dịch!
· Có những hỗ trợ miễn phí từ cộng đồng mạng.
c) Các vi điều khiển và trình dịch đã được hỗ trợ port FreeRTOS
Vi điều khiển:
· Vi điều khiển ST STM32 Cortex-M3.
· ARM Cortex-M3 dựa trên vi điều khiển sử dụng ARM Keil (RVDS), IAR,
Rowley và công cụ GCC.
· Atmel AVR32 AT32UC3A: vi điều khiển flash sử dụng GCC và IAR.
· Các vi điện tử ST: STR71x (ARM7), STR75x( ARM7), STR9 (ARM9)
(STR711F, STR712F, … ).
· LPC2106, LPC2124 và LPC2129 (ARM7). Gồm mã nguồn cho I2C driver.
· H8S2329 (Hitachi H8/S) với EDK2329 demo.
· Atmel AT91SAM7 family (AT91SAM7X256, AT91SAM7X128,
AT91SAM7S32, AT91SAM7S64, AT91SAM7S128, AT91SAM7S256).
Bao gồm mã nguồn USB driver cho IAR Kickstart, uIP và lwIP nhúng vào
Ethernet TCP/IP.
Đồ án tốt nghiệp
Nghiên cứu và port hệ điều hành thời gian thực FreeRTOS lên vi điều khiển PIC
20
người dùng có thể thi hành các chương trình nhìn bề ngoại có vẻ như là đồng thời với
hệ điều hành. Thực ra, mỗi một chương trình đang thi hành là một nhiệm vụ đượ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). Sử dụng hệ điều hành đa nhiệm
Đồ án tốt nghiệp
Nghiên cứu và port hệ điều hành thời gian thực FreeRTOS lên vi điều khiển PIC
21
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.
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 7: Sơ đồ phân chia thời gian các tác vụ thực hiện
b) Lập lịch
Bộ lịch trình là một phần của nhân hệ điều hành chịu trách nhiệm quyết định
nhiệm vụ nào sẽ được thi hành tại một thời điểm. Nhân kernel có thể cho dừng một tác
vụ và phục hồi lại tác vụ sau đó nhiều lần trong suốt quá trình sống của tác vụ đó.
Scheduling policy - cơ chế lập lịch trình là thuật toán được sử dụng bởi bộ lịch
trình để quyết định tác vụ nào được thi hành tại thời điểm được chỉ dịnh. Cơ chế của
một hệ thống nhiều người dùng (không phải thời gian thực) gần như là cho phép mỗi
nếu bị dừng hoặc được phục hồi bởi kernel. Phân tích trường hợp mà một tác vụ bị
dừng một cách tức thì khi đang thực hiện một lệnh cộng hai thanh ghi của bộ vi xử lý.
· Khi tác vụ đó đã bị dừng, các tác vụ khác sẽ thi hành và có thể thay đổi các
giá trị thanh ghi của bộ vi xử lý. Dựa trên sự phục hồi một tác vụ sẽ không
nhận biết được rằng các thanh ghi của vi xử lý đã bị thay đổi - nếu sử dụng
các giá trị đã bị thay đổi sẽ dẫn đến một kết quả sai.
· Để ngăn chặn kiểu lỗi này, yếu tố cần thiết là sự phục hồi một tác vụ phải có
một ngữ cảnh đồng nhất. Nhân hệ điều hành sẽ chịu trách nhiệm xác định
chắc chắn trường hợp nào cần chuyển ngữ cảnh và thực hiện nhiệm vụ đó
khi tác vụ bị dừng. Khi tác vụ được phục hồi, ngữ cảnh đã được lưu lại sẽ
được trao trả cho tác vụ đó thực hiện tiếp.
d) Các ứng dụng thời gian thực
Hệ điều hành thời gian thực thực hiện đa nhiệm cũng với nguyên lý trên nhưng
các đối tượng của nó thì rất khác so với các đối tượng của hệ không phải thời gian
Đồ án tốt nghiệp
Nghiên cứu và port hệ điều hành thời gian thực FreeRTOS lên vi điều khiển PIC
23
thực. Sự khác biệt này được phản ánh bởi cơ chế lập lịch trình. Hệ thời gian thực/ hệ
nhúng được thiết kế sao cho các đáp ứng về mặt thời gian là thực đối với các sự kiện
xảy ra trên thế giới thật. Các sự kiện này xảy ra trên thế giới thực có thể có thời điểm
kết thúc trước ngay cả hệ nhúng/hệ thời gian thực phải đáp ứng và cơ chế lập lịch của
hệ RTOS phải xác định được thời điểm kết thúc mà nó phải gặp.
Để thực hiện những mục tiêu trên, kỹ sư lập trình phải gán quyền ưu tiên cho
mỗi một tác vụ. Sau đó cơ chế lập lịch của hệ RTOS chỉ đơn giản là xác định tác vụ có
quyền ưu tiên cao nhất được phép thi hành ở thời điểm đang xử lý. Điều này dẫn đến
cần chia sẻ thời gian xử lý một cách công bằng giữa các tác vụ có cùng ưu tiên và sẵn
sàng thực thi.
Tác vụ điều khiển có quyền ưu tiên cao nhất vì:
chạy các hàm này khi gọi từ hàm này đền hàm khác).
nên những cách phân phối RAM là không nhiều. Một hệ thống nhúng hay thời gian
thực sẽ có số lượng RAM và các đòi hỏi về thời gian khác nhưng hệ thông khác nên
nếu chỉ có 1 cách phân phối RAM sẽ chỉ đáp ứng được một số ít ứng dụng.
Để giải quyết vấn đề này, phương pháp phân phối bộ nhớ API nằm trong lớp
portable cung cấp các giải pháp thích đáng cho từng ứng dụng riêng biệt. Khi kernel
yêu cầu RAM, thay vì gọi malloc() có thể gọi pvPortMalloc(). Khi RAM được giải
phóng, thay vì gọi free() có thể gọi vPortFree().
Có ba kiểu cấp phát bộ nhớ API mã nguồn của FreeRTOS :
scheme1 – heap1.c:
Đây là cách sắp xếp đơn giản nhất. Nó không cho phép giải phóng bộ nhớ khi
chúng đã được phân phối nhưng mặc dù vậy nó vẫn thích hợp cho phần lớn các ứng
dụng. Thuật toán đơn giản là chia các mảng đơn vào các khối khi có các yêu cầu về
RAM. Dung lượng tổng của dãy được đặt bằng cách định nghĩa
configTOTAL_HEAP_SIZE trong FreeRTOSconfig.h. Sự phân phối này:
· Có thể sử dụng trong các ứng dụng không bao giờ xóa task hoặc hàng đợi
· Luôn tiền định (luôn mất cùng một khoảng thời gian để trở về block)
· Được sử dụng trong PIC, AVR và 8051 vì không linh hoạt trong việc tạo ra
và xóa task sau khi vTaskStartScheduler() được gọi.
Mục Lượng RAM sử dụng (bytes)
Bộ lập lịch 83 (có thể giảm khi sử dụng kiểu dữ liệu khác nhỏ hơn)
Mỗi task mới 20 (TCB trong đó có 2 byte cho tên) + vùng cho ngăn xếp
Mỗi mức ưu tiên 16
Mỗi hàng đợi 45 + vùng lưu trữ hàng đợi
Mỗi semaphore 45
Bảng 3: Bảng phân phối RAM của heap1