TÌM HIỂU về hệ điều HÀNH THỜI GIAN THỰC FREERTOS

24 949 4
TÌM HIỂU về hệ điều HÀNH THỜI GIAN THỰC FREERTOS

Đ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

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 sẻ thông tin (tài nguyên phần mềm), khi đó hệ điều hành cần đảm bảo việc truy xuất đến các tài nguyên này là hợp lệ, không xảy ra tranh chấp, mất đồng nhất. Ở quan điểm là các máy mở rộng, công việc của hệ điều hành là cung cấp cho người sử dụng các máy ảo (virtural machine) sử dụng thuận tiện hơn các máy thực (actual machine). Hệ điều hành làm ẩn đi các chi tiết phần cứng, người sử dụng được cung cấp giao diện đơn giản, dễ hiểu và không phụ thuộc vào thiết bị cụ thể.Thực tế, ta có thể xem hệ điều hành như hệ thống bao gồm nhiều máy tính trừu tượng xếp thành nhiều lớp chồng lên nhau, máy tính mức dưới phục vụ cho máy tính mức trên. Lớp trên cùng là giao diện trực quan nhất để chúng ta điều khiển.

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI KHOA CÔNG NGHỆ THƠNG TIN - - LẬP TRÌNH NHÚNG ĐỀ TÀI : TÌM HIỂU VỀ HỆ ĐIỀU HÀNH THỜI GIAN THỰC FREERTOS GVHD : TS Phạm Văn Hà Thành viên nhóm : Trương Quốc Trọng Bùi Tuấn Anh Lê thùy linh MỤC LỤC Phần I: Tổng quan hệ điều hành thời gian thực I Tổng quan loại hệ điều hành 1.1 Các chức hệ điều hành 1.1.1 Quản lý trình (process management): 1.1.2 Quản lý nhớ (memory management): 1.1.3 Quản lý hệ thống lưu trữ (storage management): hệ điều hành quản lý lưu trữ ổ đĩa, đĩa CD 1.1.4 Giao tiếp với người dùng (user interaction) Có loại hệ điều hành : II Tìm hiểu hệ điều hành thời gian thực Hệ điều hành thời gian thực (RTOS) b) Các đặc điểm RTOS Các loại hệ điều hành thời gian thực Tầm quan trọng hệ điều hành thời gian thực Các hệ điều hành thời gian thực phổ biến Phần II: Tìm hiểu chi tiết FreeRTOS 11 I Tổng quan FreeRTOS Khái niệm FreeRTOS 11 Các đặc điểm FreeRTOS 12 Tại chọn FreeRTOS? 12 Các vấn đề FreeRTOS .14 a) Đa nhiệm 14 b) Lập lịch .14 Chuyển đổi ngữ cảnh 15 Các ứng dụng thời gian thực 16 Bộ lập lịch thời gian thực 16 Cách phân phối tài nguyên FreeRTOS 17 a) Phân phối RAM [1] 17 Các file kernel FreeRTOS 20 Phần I: Tổng quan hệ điều hành thời gian thực I Tổng quan loại hệ điều hành Những hệ thống máy tính bao gồm hay nhiều vi xử lý, nhớ chính, bàn phím nhiều thiết bị vào Tất hệ thống phức tạp Viết chương trình kiểm sốt sử dụng tất chương trình cách xác, tối ưu cơng việc khó máy tính trang bị lớp phần mềm gọi hệ điều hành [2], nhiệm vụ quản lý thiết bị cung cấp chương trình ứng dụng với giao diện đơn giản xuống phần cứng Ứng dụng Hình 1: Sơ đồ hệ điều hành Hệ điều hành 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 hệ điều hành quản lý phần khác hệ thống cách hiệu Tài nguyên hệ thống (CPU, nhớ, thiết bị ngoại vi, ) vốn giới hạn, hệ thống đa nhiệm, nhiều người sử dụng đồng thời yêu cầu nhiều tài nguyên Để thỏa mãn yêu cầu sử dụng với tài nguyên hữu hạn nâng cao hiệu sử dụng tài nguyên, hệ điều hành cần phải có chế 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 phải chia sẻ thơng tin (tài ngun phần mềm), hệ điều hành cần đảm bảo việc truy xuất đến tài nguyên hợp lệ, không xảy tranh chấp, đồng Ở quan điểm máy mở rộng, công việc hệ điều hành cung cấp cho người sử dụng máy ảo (virtural machine) sử dụng thuận tiện máy thực (actual machine) Hệ điều hành làm ẩn chi tiết phần cứng, người sử dụng cung cấp giao diện đơn giản, dễ hiểu không phụ thuộc vào thiết bị cụ thể.Thực tế, ta xem hệ điều hành hệ thống bao gồm nhiều máy tính trừu tượng xếp thành nhiều lớp chồng lên nhau, máy tính mức phục vụ cho máy tính mức Lớp giao diện trực quan để điều khiển 1.1 Các chức hệ điều hành 1.1.1 Quản lý trình (process management): hệ điều hành quản lý tiến trình, xếp cho tiến trình chạy tiến trình dừng, phối hợp nhịp nhàng tiến trình 1.1.2 Quản lý nhớ (memory management): Hệ điều hành quản lý phân phối tài nguyên nhớ cho tiến trình chạy 1.1.3 quản 1.1.4 hành Quản lý hệ thống lưu trữ (storage management): hệ điều hành lý lưu trữ ổ đĩa, đĩa CD Giao tiếp với người dùng (user interaction) Có loại hệ điều : - Hệ điều hành cho Mainframe - Hệ điều hành cho Server - Hệ điều hành đa vi xử lý - Hệ điều hành cho máy tính cá nhân - Hệ điều hành thời gian thực - Hệ điều hành nhúng - Hệ điều hành cho thẻ thông minh Hệ điều hành cho Mainframe Hệ điều hành cho máy Mainframe hệ điều hành mức cao nhất, loại máy tính thấy nhiều trung tâm sở liệu lớn Những máy tính phân biệt với máy tính cá nhân giới hạn xử lý sức chứa chúng Một máy tính Mainframe với hàng nghìn đĩa hàng nghìn gigabybe liệu điều bình thường khơng có máy tính cá nhân thơng thường có tính mạnh Hầu hết mainframe dùng cho ứng dụng 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à việc cần lượng lớn I/O Chúng thường sử dụng kiểu: mẻ, quản lý xử lý phân chia thời gian Hệ thống mẻ hệ thống mà công việc xử lý đặn ảnh hưởng đến người sử dụng Nó vận dụng để giải số lượng lớn yêu cầu nhỏ, ví dụ trình kiểm tra nhà băng sân bay Mỗi phần cơng việc nhỏ hệ thống phải xử lý hàng trăm hay hàng nghìn cơng việc nhỏ giây Hệ thống chia sẻ thời gian chấp nhận điều khiển từ xa để thực công việc máy tính lần, yêu cầu liệu Những chương trình gần với: hệ điều hành mainframe thường thực tất Ví dụ hệ điều hành mainframe OS/390, hệ sau OS/360 Hệ điều hành cho Server Dưới hệ điều hành mainframe cấp hệ điều hành chạy server, loại máy tính cá nhân lớn, máy trạm, kiểu mainframe Chúng phục vụ nhiều user thời điểm qua mạng chấp nhận để user chia sẻ nguồn phần cứng hay phần mềm Các Server cung cấp dịch vụ in ấn, dịch vụ file dịch cụ web Các cung cấp Internet chạy nhiều server để hỗ trợ khách hàng Website sử dụng server để lưu trữ trang Web trả lời yêu cầu đến Điển hình hệ điều hành UNIX Window2000 Linux sử dụng cho server Hệ điều hành đa vi xử lý Cách kết hợp nhiều tổ hợp máy tính phổ biến kết nối nhiều CPU hệ thống Phụ thuộc vào chuẩn xác kết nối chia sẻ gì, hệ thống gọi máy tính song song, hệ đa máy tính hay hệ đa xử lý Chúng cần hệ điều hành đặc biêt thường biến đổi diễn hệ điều hành server, với tính đặc biệt cho giao tiếp kết nối Hệ điều hành cho máy tính cá nhân Loại hệ điều hành cho máy tính cá nhân Cơng việc cung cấp giao diện tốt cho người sử dụng Nó dùng chủ yếu để soạn thảo văn bản, sửdụng bảng tính, truy cập Internet Ví dụ Windows98, hệ điều hành Macintosh Linux Hệ điều hành máy tính cá nhân biết đến rộng rãi cần dẫn Trên thực tế, nhiều người có trình độ khác sử dụng Hệ điều hành thời gian thực Một loại hệ điều hành khác hệ điều hành thời gian thực Hệ điều hành mô tả quản lý thời gian thơng số chìa khóa Ví dụ hệ thống điều khiển cơng nghiệp, máy tính thời gian thực cần phải thu thập liệu trình sản xuất sử dụng liệu để điều khiển máy xí nghiệp theo deadline cứng phải thỏa mãn Một ví dụ khác với dây chuyền lắp ráp ôtô, hành động định phải thực thời điểm định đó, robot thực sớm muộn xe bị lỗi dẫn đến phá hủy Trong hệ thống mà hành động buộc phải thực vào thời điểm định (hoặc khoảng cho phép) hệ thống thời gian thực cứng Một hệ thời gian thực khác hệ thời gian thực mềm, có đáp ứng deadline khơng thỏa mãn tồn bộ, hệ truyền tiếng nói số hay đa phương tiện ví dụ cho hệ Điển hình cho hệ điều hành thời gian thực VxWorks QNX Hình 2: Sơ đồ hệ thống thời gian thực ô tô Hệ điều hành nhúng Tiếp tục với hệ nhỏ hơn, đến với máy tính palmtop hệ nhúng Palmtop hay PDA loại máy tính nhỏ hoạt động với số lượng nhỏ chương trình Hệ nhúng chạy máy tính điều khiển thiết bị nói chung khơng giống với máy tí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 kích cỡ, nhớ hạn chệ lượng làm chung đặc biệt Hệ điều hành cho thẻ thông minh Hệ điều hành nhỏ chạy thẻ thông minh, credit card, thiết bị bao gồm chip CPU Chúng quản lý nghiêm ngặt lượng sử dụng cách nén nhớ Một số hệ sử dụng cho chương trình toán điện tử, hệ khác phục vụ nhiều chương trình thẻ thơng minh Đó thường hệ thống độc quyền Một số thẻ thông minh viết Java, ROM thẻ thơng minh cần chương trình dịch cho JVM Java applet tải thẻ dịch để sử dụng Một số thẻ chạy nhiều Java applet thời điểm, để quản lý nhiều chương trình cần lập lịch Cần quản lý đảm bảo cho hệ thống có hai hay nhiều applet chạy thời điểm Những vấn đề cần quản lý hệ điều hành thẻ II Tìm hiểu hệ điều hành thời gian thực Trong phần ta sâu vào tìm hiểu hệ điều hành thời gian thực với khái niệm, đặc điểm tầm quan trọng hệ điều hành thời gian thực thực tế Từ liên hệ trình bày cụ thể hệ điều hành thời gian thực mã nguồn mở FreeRTOS vấn đề Hệ điều hành thời gian thực (RTOS) a) Khái niệm hệ điều hành thời gian thực Hệ thống thời gian thực hệ thống mà hoạt động tin cậy khơng phụ thuộc vào xác kết quả, mà phụ thuộc vào thời điểm đưa kết quả, hệ thống có lỗi u cầu thời gian khơng thoả mãn Hình 3: Hệ điều hành thời gian thực điều khiển Một RTOS thường có tính mềm dẻo có tính cấu trúc Nó cho phép tích hợp thêm dịch vụ gia tăng theo vòng tròn đồng tâm Vòng hay nhân cung cấp đặc tính quan trọng hệ điều hành thời gian thực Các đặc điểm khác thêm vào vòng ngồi cần thiết Nhân nhỏ RTOS thích hợp cho ứng dụng xử lý nhỏ, vòng ngồi giúp đỡ xây dựng hệ thống thời gian thực lớn Các RTOS thường cung cấp mức xử lý ưu tiên Các công việc ưu tiên cao thực trước Ngoài chức hệ điều hành trên, hệ điều hành thời gian thực hỗ trợ thêm chức sau: Lập lịch phân chia thời gian sử dụng tài nguyên, đặt mức ưu tiên tác vụ Truyền thông đồng tác vụ tác vụ ngắt Phân phối nhớ động Quản lý thiết bị vào Hình 4: Sơ đồ chức hệ điều hành thời gian thực Nhiều hệ điều hành không thời gian thực cung cấp nhân tương tự điểm khác biệt lớn hệ điều hành thời gian thực hệ điều hành không thời gian thực nói chung tính tiền định (deterministic) Thời gian tiền định tức dịch vụ hệ điều hành thực yêu cầu khoảng thời gian định, muốn tiền định tức phải tính tốn xác theo tốn học Các đáp ứng thời gian nghiêm ngặt 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 phần thời gian ngẫu nhiên tạo trễ ngẫu nhiên, từ gây đáp ứng deadline không thoả mãn b) Các đặc điểm RTOS Một RTOS ứng dụng thành công vào vi điều khiển thường phải bao gồm nhóm sau: RTOS Kernel: nhân hệ điều hành, thực thi nhiệm vụ RTOS Kernel dùng chung cho tất platform cập nhật theo version Port: thường phát triển nhà sản xuất MCU, khác họ MCU BSP (Board Support Package): chứa hàm chức truy xuất đến ngoại vi, thực chất driver cho ngoại vi MCU Một RTOS tốt có nhân tốt, tài liệu tốt phân phát công cụ tốt để phát triển vận hành ứng dụng Vì vậy, tính tốn khoảng thời gian ngắt thời gian chuyển mạch ngữ cảnh quan trọng, với thông số khác làm nên RTOS tốt Xây dựng khối phần mềm RTOS tác vụ - task Việc tạo tác vụ RTOS đơn giản Một tác vụ đơn giản thủ tục Tại số điểm chương trình, thực nhiều lời gọi tới hàm RTOS để bắt đầu tác vụ Mỗi tác vụ RTOS ln ln ba trạng thái chính: Hình 5: Trạng thái tác vụ Running: Với ý nghĩa xử lý thực tác vụ Với xử lý chạy tác vụ thời điểm định Ready: Với ý nghĩa số tác vụ khác sẵn sàng chạy xử lý rỗi Blocked: Với ý nghĩa tác vụ không sẵn sàng chạy kể xử lý trạng thái nghỉ - Idle Tác vụ trạng thái chúng đợi kiện bên ngồi tác động để kích hoạt trở lại trạng thái sẵn sàng Các loại hệ điều hành thời gian thực Hệ điều hành thời gian thực cứng (Hard Real Time Operating Systems): hệ điều hành thời gian thực mà tác vụ không thực thi mà phải thời gian, khơng cho phép sai lệch thời gian Nó thường tìm thấy lớp thấp với tầng vật lý Ví dụ hệ thống điều khiển lượng ô tô hệ điều hành thời gian thực cần trễ điều khiển chút gây lỗi lượng gây hỏng hóc phá huỷ Một ví dụ khác hệ điều hành thời gian thực cứng y học máy điều hoà nhịp tim điều khiển q trình cơng nghiệp Hệ điều hành thời gian thực mềm (Soft Real Time Operating Systems): hệ điều hành thời gian thực cho phép sai lệch thời gian dung sai lỗi mức độ Nó thường tìm thấy chỗ xảy tranh chấp cần giữ số kết nối hệ thống phản ứng với thay đổi hồ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 thoả mãn yêu cầu cho hầu hết tác vụ thoả mãn deadline đó, cho phép số deadline khơng thoả mãn dung sai Ví dụ phần mềm trì cập nhật kế hoạch bay cho hãng hàng không thương mại, hệ thống truyền hình 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 giới hạn Thực thi thời điểm dự báo trước tải nặng giảm sút Độ an toàn Dung lượng liệu Điều khiển nhịp độ Đoạn liệu Bắt lỗi tranh chấp lớn phụ thuộc vi diều khiển đoạn dài phụ thuộc người dùng thường tranh chấp nhỏ trung bình phụ thuộc môi trường đoạn ngắn tự động Bảng 1: Bảng so sánh hai loại hệ điều hành thời gian thực Tầm quan trọng hệ điều hành thời gian thực Do yêu cầu khắt khe thời gian, việc sử dụng tài nguyên, quan trọng việc lập lịch, hệ điều hành thời gian thực đóng vai trò quan trọng Chúng giống thư viện, dùng, thêm bớt dịch vụ cho phù hợp với ứng dụng thời gian thực để phát triển ứng dụng thời gian thực cách nhanh hơn, tin tưởng Vì tồn hệ điều hành thời gian thực cần thiết quan trọng Có thể tìm thấy hệ điều hành thời gian thực nơi Chúng phổ biến hệ điều hành mà bạn quen thuộc Windows, Mac OS Unix Chúng âm thầm làm việc bên định tuyến chuyển mạch mạng, động xe, máy nhắn tin, điện thoại di động, thiết bị y tế, thiết bị đo lường điều khiển công nghiệp vô số ứng dụng khác Một thuộc tính quan trọng RTOS khả tách biệt với ứng dụng Nếu có chương trình bị "chết" hay hoạt động không hợp lệ, hệ điều hành thời gian thực nhanh chóng lập chương trình này, kích hoạt chế phục hồi bảo vệ chương trình khác hay thân hệ điều hành khỏi hậu lệnh sai Cơ chế bảo vệ tương tự áp dụng để tránh tình trạng tràn nhớ chương trình gây RTOS xuất hai dạng: cứng mềm Nếu tính xử lý ứng với kiện khơng xảy hay xảy không đủ nhanh, RTOS cứng chấm dứt hoạt động giữ không gây ảnh hưởng đến độ tin cậy tính sẵn sàng phần lại hệ thống RTOS máy tính nhúng trở nên phổ biến ứng dụng quan trọng nên nhà phát triển thương mại tạo nên RTOS với tính sẵn sàng cao Những sản phẩm có thành phần phần mềm chuyên dụng làm chức cảnh báo, chạy chương trình chẩn đốn hệ thống để giúp xác định xác vấn đề trục trặc hay tự động chuyển đổi sang hệ thống dự phòng Hiện thời RTOS sẵn sàng cao hỗ trợ bus Compact PCI tổ chức PCI Industrial Computer Manufacturers Group, bus dùng cho phần cứng trao đổi nóng Trong nhiều năm, ứng dụng dựa RTOS chủ yếu hệ thống nhúng gần chúng có mặt khắp nơi, từ thiết bị y tế điều khiển máy ảnh máy pha cà phê, ứng dụng tính tốn phân tán thúc đẩy nhà phát triển hệ điều hành thực nghiên cứu phát triển chuẩn Chính phủ Mỹ có số chương trình lĩnh vực công nghệ quản lý tài nguyên thời gian thực, mạng, quản lý liệu phần mềm điều khiển trung gian Mục đích chương trình làm cho hệ thống cộng tác, phân tán giao tiếp chia sẻ tài nguyên với Một uỷ ban chuyên trách đẩy mạnh việc tạo khung cơng nghệ cho tính tốn phân tán thời gian thực, áp dụng cho ứng dụng quân thương mại Các hệ điều hành thời gian thực phổ biến a) LynxOS LynxOS [12] loại hệ điều hành thời gian thực cứng, làm việc với Unix Java Các thành phần LynxOS thiết kế tiền định (thời gian thực cứng) có nghĩa phải đáp ứng khoảng thời gian biết trước Thời gian đáp ứng tiền định đảm bảo cổng vào phải tải nặng mơ hình đơn luồng kernel, làm cho chương trình phục vụ ngắt ngắn nhanh LynxOS 3.0 phát triển từ kiến trúc nguyên gốc (chỉ gồm mô đun làm tất việc) phiên ban đầu lên đến thiết kế microkernel Dung lượng microkernel 28Kbyte cung cấp dịch vụ lập lịch, phần luồng ngắt đồng Các dịch vụ khác cung cấp mô đun dịch vụ nhỏ gọi Kernel Plug-Ins (KPIs) Nhờ thêm KPIs vào microkernel, hệ thống cấu hình để hỗ trợ vào quản lý file, TCP/IP, hoạt động hệ điều hành UNIX đa nhiệm giống phiên trước b) Vxworks VxWorks [11] hệ điều hành thời gian thực sử dụng hệ nhúng điển hình kể đến hệ điều hành cho robot Hỏa năm 1997 VxWorks hỗ trợ khách hàng dễ dàng chạy hầu hết vi xử lý thiết kế tính tốn phân tán Nó sử dụng điều khiển mạng thiết bị truyền thông, thiết bị đo kiểm tra, thiết bị ngoại vi, hệ thống tự động hố, thiết bị hàng khơng vũ trụ, loại sản phẩm tiêu dùng khác Vxworks có vài điểm giống với Unix shell, hàm debugging, quản lý nhớ, giám sát thực thi hỗ trợ đa nhiệm Hệ điều hành bao gồm lõi cho lập lịch đa nhiệm, trả lời ngắt, truyền thông tiến trình hệ thống file Lập trình VxWorks khó cho người lập trình lập trình viên phải viết code yêu cầu tối thiểu Tuy nhiên, thực tế cho thấy lượng nhỏ nội dung cần lưu trữ phục hồi VxWorks, sử dụng tài ngun Unix, chạy nhanh 10 c) QNX/Neutrino Mục đích QNX Neutrino [11] phổ biến rộng rãi hệ thống mở POSIX API theo mơ hình bậc thang mạnh cho hệ thống diện rộng từ hệ nhúng tài nguyên hẹp đến môi trường máy tính phân tán mạnh Hệ điều hành QNX Neutrino hỗ trợ nhiều dòng vi xử lý Intel x86, ARM, XScale, PowerPC, MIPS SH-4 QNX Neutrino chuẩn mực cho ứng dụng nhúng thời gian thực Nó co giãn tới kích thước nhỏ cung cấp nhiều tác vụ hoạt động đồng thời, tiến trình, điều khiển lập lịch thứ tự ưu tiên chuyển ngữ cảnh nhanh… tất thành phần ứng dụng nhúng thời gian thực QNX Neutrino mềm dẻo Người phát triển dễ dàng tuỳ biến OS cho phù hợp với ứng dụng Từ cấu hình nhân nhỏ (microkernel) với vài module nhỏ tới hệ thống 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 mức độ chun mơn hố tính hiệu quả, tính module hố tính đơn giản với hai yếu tố sau: Kiến trúc microkernel QNX đảm bảo cách ly nhớ process, không cho chúng sơ ý phá hoại lẫn Giao tiếp liên trình dựa thơng điệp d) uCOS µC/OS [10] nhân hệ điều hành thời gian thực J Labrosse xây dựng Nó 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 ưu tiên, thời gian thực đa tác vụ µC/OS hỗ trợ tính sau: lập lịch, truyền thơng điệp, đồng chia sẻ liệu tác vụ, quản lý nhớ, thiết bị vào ra, hệ thống file, mạng µC/OS hỗ trợ nhiều vi xử lý gọn nhẹ để sử dụng cho nhiều hệ thống nhúng Phiên µC/OS-II tăng cường thêm khả đặt tên tới đối tượng nhân Đặc biệt với phiên V2.6, gán tên tới tác vụ, đèn báo, mailbox, hàng đợi, nhóm kiện hay vùng nhớ Do đó, phất lỗi hiển thị tên đối tượng đó, cho phép nhanh chóng xem thơng tin đối tượng Ngoài ra, V2.6 cho phép sửa lỗi đọc thơng tin cấu hình ứng dụng hiển thị thơng tin 11 Phần II: Tìm hiểu chi tiết FreeRTOS I Tổng quan FreeRTOS Khái niệm FreeRTOS Thương mại hố Chuẩn IEC 61508 Hình :Sơ đồ phát triển FreeRTOS FreeRTOS [1] lõi hệ điều hành thời gian thực miễn phí Hệ điều hành Richard Barry công bố rộng rãi từ năm 2003, phát triển mạnh đến cộng đồng mạng mã nguồn mở ủng hộ FreeRTOS có tính khả chuyển, mã nguồn mở, lõi down miễn phí dùng cho ứng dụng thương mại Nó phù hợp với hệ nhúng thời gian thực nhỏ Hầu hết code viết ngơn ngữ C nên có tính phù hợp cao với nhiều khác Ưu điểm dung lượng nhỏ chạy mà nhiều hệ khơng chạy Có thể port cho nhiều kiến trúc vi điều khiển cơng cụ phát triển khác Mỗi port thức bao gồm ứng dụng ví dụ tiền cấu hình biểu riêng biệt lõi, kiến thức hướng phát triển Những hỗ trợ miễn phí cung cấp cộng đồng mạng Hỗ trợ thương mại với dịch vụ phát triển đầy đủ cung cấp FreeRTOS cấp giấy phép chỉnh sửa GPL (General Public License) sử dụng ứng dụng thương mại với giấy phép Ngồi liên quan đến FreeRTOS có OpenRTOS SafeRTOS OpenRTOS thương mại FreeRTOS.org khơng liên quan đến GPL SafeRTOS dựa FreeRTOS phân tích, chứng minh tài liệu kiểm tra nghiêm ngặt với chuẩn IEC61508 Và chuẩn IEC61508 SIL3 tạo phát triển độc lập để hoàn thiện tài liệu cho SafeRTOS Cụ thể hỗ trợ khác FreeRTOS OpenRTOS: FreeRTOS Có Có Có Khơng Có Có, đường dẫn Có Miễn phí Có thể sử dụng ứng dụng thương mại? Miễn phí ứng dụng thương mại? Phải đưa mã nguồn code ứng dụng? Phải đưa thay đổi mã nguồn lõi? Phải đưa vào báo cáo sử dụng FreeRTOS.org? Phải cung cấp mã FreeRTOS cho người sử dụng? Có thể nhận hỗ trợ thương mại? Không Bảng 2: Các hỗ trợ khác từ FreeRTOS OpenRTOS OpenRTOS Khơng Có Có Khơng Khơng Khơng Khơng Có 12 Các đặc điểm FreeRTOS Các chức cung cấp FreeRTOS FreeRTOS.org lõi hệ điều hành thời gian thực thiết kế cho hệ thống nhúng nhỏ, với chức sau [1] : Lõi FreeRTOS hỗ trợ preemptive, cooperative lựa chọn cấu hình lai hai phần SafeRTOS 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 dễ sử dụng Cấu trúc mã nguồn linh động viết ngôn ngữ C  Hỗ trợ task co-routine Mạnh hàm theo vết Có lựa chọn nhận biết tràn ngăn xếp Khơng giới hạn số task tạo ra, phụ thuộc vào tài nguyên chip Không giới hạn số mức ưu tiên sử dụng Không giới hạn số task mức ưu tiên Hỗ trợ truyền thông đồng task task ngắt: queues, binary semaphores, counting semaphores and recursive mutexes Mutexes với ưu tiên kế thừa Các công cụ phát triển miễn phí, port cho Cortex-M3, ARM7, PIC, MSP430, H8/S, AMD, AVR, x86 8051 Miễn phí mã nguồn phần mềm nhúng Miễn phí ứng dụng thương mại Tiền cấu hình cho ứng dụng demo, từ dễ dàng tìm hiểu phát triển Tại chọn FreeRTOS? Đây số nguyên nhân cho thấy lại chọn FreeRTOS cho ứng dụng thời gian thực [1]: Cung cấp giải pháp cho nhiều kiến trúc công cụ phát triển khác Được biết đáng tin cậy Sự tin cậy đảm bảo hoạt động đảm nhận SafeRTOS Đang tiếp tục hoạt động phát triển mở rộng Sử dụng ROM, RAM it bị tải Mã nguồn viết C nên phù hợp với nhiều khác Rất đơn giản, lõi hệ điều hành gồm file (phụ thuộc vào việc có sử dụng co-routine hay không) Phần lớn file nằm file zip tải về, cung cấp hầu hết ứng dụng Có thể sử dụng miễn phí ứng dụng thương mại (xem kỹ điều kiện quyền) Hỗ trợ nhiều: porting, phát triển, dịch vụ phát triển ứng dụng mà yêu cầu 13 Là tổ chức tốt với số người sử dụng lớn ngày tăng Bao gồm nhiều ví dụ tiền cấu hình cho port Khơng cần tính toán xem làm cài đặt, tải dịch! Có hỗ trợ miễn phí từ cộng đồng mạng Các vi điều khiển trình dịch hỗ trợ port FreeRTOS Vi điều khiển: Vi điều khiển ST STM32 Cortex-M3 ARM Cortex-M3 dựa vi điều khiển sử dụng ARM Keil (RVDS), IAR, Rowley công cụ GCC Atmel AVR32 AT32UC3A: vi điều khiển flash sử dụng GCC IAR Các vi điện tử ST: STR71x (ARM7), STR75x( ARM7), STR9 (ARM9) (STR711F, STR712F, … ) LPC2106, LPC2124 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 lwIP nhúng vào Ethernet TCP/IP AT91FR40008 với Embest ATEB40X demo MSP430 với demo cho LCD driver MSPGCC and Rowley CrossWorks hỗ trợ HCS12 (MC9S12C32 loại nhớ nhỏ MC9S12DP256B kiểu bank nhớ) Fujitsu MB91460 series (32bit) and MB96340 series (16FX 16bit) sử dụng trình dịch Softune Euroscope debugger Cygnal 8051 / 8052 Microchip PICMicro PIC18 (8 bit), PIC24 (16bit MCU) dsPIC (16bit DSC) PIC32 (32bit) Atmel AVR (MegaAVR) với STK500 demo Vi điều khiển RDC8822 với demo cho Flashlite 186 SBC PC (chạy FreeDOS DOS khác) ColdFire, ý port nàyko hỗ trợ Zilog Z80, ý port nàyko hỗ trợ Xilinx Microblaze chạy Virtex4 FPGA Xilinx PowerPC (PPC405) chạy Virtex4 FPGA Ngồi trình dịch hỗ trợ port: Rowley CrossWorks, Keil, CodeWarrior, IAR, GNU GCC (nhiều loại), MPLAB, SDCC, Open Watcom, Paradigm Borland 14 Các vấn đề FreeRTOS Các vấn đề FreeRTOS [1] nằm vấn đề RTOS nói chung: Đa nhiệm (Mutiltasking) Bộ lịch trình(Scheduling) Chuyển đổi ngữ cảnh (Context Switching) Ứng dụng thời gian thực (Real Time Application) Lập lịch thời gian thực (Real Time Scheduling) a) Đa nhiệm Thuật ngữ kernel dùng để đến thành phần cốt lõi bên hệ điều hành Các hệ điều hành Linux sử dụng nhân kernel cho phép nhiều người dùng truy cập vào máy tính dường liên tục mặt thời gian Nhiều người dùng thi hành chương trình nhìn bề ngoại đồng thời với hệ điều hành Thực ra, chương trình thi hành nhiệm vụ phân chia điều khiển hệ điều hành Nếu hệ điều hành có khả thi hành nhiều tác vụ gọi đa nhiệm (multitasking) Sử dụng hệ điều hành đa nhiệm làm đơn giản q trình thiết kế tốn mà gánh nặng chuyển hết cho phần mềm ứng dụng xử lý Đa nhiệm tính liên lạc nội tác vụ hệ điều hành cho phép ứng dụng phức tạp phân chia thành tác vụ nhỏ hơn, đơn giản hơn, dễ quản lý Các phần chia nhỏ giúp dễ dàng có kết trình kiểm tra phần mềm, sử dụng lại mã chương trình Những tính tốn thời gian phức tạp trình chi tiết tách biệt khỏi chương trình ứng dụng chuyển nhiệm vụ cho hệ điều hành đảm trách Thường vi xử lý thực tác vụ thời điểm với chuyển đổi cách nhanh tác vụ hệ điều hành đa nhiệm làm cho chúng dường chạy đồng thời với Điều mô tả sơ đồ với tác vụ giản đồ thời gian chúng Hình 7: Sơ đồ phân chia thời gian tác vụ thực b) Lập lịch Bộ lịch trình phần nhân hệ điều hành chịu trách nhiệm định nhiệm vụ thi hành thời điểm Nhân kernel cho dừng tác vụ phục hồi lại tác vụ sau nhiều lần suốt trình sống tác vụ Scheduling policy - chế lập lịch trình thuật tốn sử dụng lịch trình để định tác vụ thi hành thời điểm dịnh Cơ chế hệ thống nhiều người dùng (không phải thời gian thực) gần cho phép nhiệm vụ chiếm lĩnh hoàn toàn thời gian vi xử lý Còn chế hệ thời gian thực hay hệ nhúng mô tả sau 15 Hình 8: Sơ đồ chuyển giao tác vụ Các task 1, 2, có mức ưu tiên giảm dần tác vụ ưu tiên cao yêu cầu task ưu tiên thấp phải nhường Tại (1), nhiệm vụ thứ thi hành Tại (2), nhân kernel dừng tác vụ Tại (3), phục hồi lại tác vụ Tại (4), tác vụ thi hành, cấm ngoại vi vi xử lý cho phép thân tác vụ truy cập vào Tại (5), nhân kernel dừng tác vụ Tại (6) phục hồi lại tác vụ Tác vụ cố thử truy cập vào ngoại vi vi xử lý thấy bị cấm, khơng thể tiếp tục tự dừng vị trí (7)  Tại (8), nhân kernel phục hồi lại task Tại (9), thời điểm tác vụ thi hành kết thúc với ngoại vi vi xử lý cho phép tác vụ khác truy cập Thời điểm tiếp tác vụ thi hành thấy truy cập vào ngoại vi nên tiếp tục thực thi cho bị dừng nhân kernel Chuyển đổi ngữ cảnh Khi tác vụ thi hành, sử dụng ghi truy cập vào ROM, RAM tác vụ khác Những tài nguyên bao gồm : ghi, RAM, ROM, stack gọi ngữ cảnh thực thi nhiệm vụ tác vụ Một tác vụ đoạn mã liên tục, khơng biết khơng báo trước bị dừng phục hồi kernel Phân tích trường hợp mà tác vụ bị dừng cách tức thực lệnh cộng hai ghi vi xử lý Khi tác vụ bị dừng, tác vụ khác thi hành thay đổi giá trị ghi vi xử lý Dựa phục hồi tác vụ không nhận biết ghi vi xử lý bị thay đổi - sử dụng giá trị bị thay đổi dẫn đến kết sai Để ngăn chặn kiểu lỗi này, yếu tố cần thiết phục hồi tác vụ phải có ngữ cảnh đồng Nhân hệ điều hành chịu trách nhiệm xác định chắn trường hợp cần chuyển ngữ cảnh thực nhiệm vụ tác vụ bị dừng Khi tác vụ phục hồi, ngữ cảnh lưu lại trao trả cho tác vụ thực tiếp 16 Các ứng dụng thời gian thực Hệ điều hành thời gian thực thực đa nhiệm với nguyên lý đối tượng khác so với đối tượng hệ thời gian thực Sự khác biệt phản ánh chế lập lịch trình Hệ thời gian thực/ hệ nhúng thiết kế cho đáp ứng mặt thời gian thực kiện xảy giới thật Các kiện xảy giới thựcthời điểm kết thúc trước hệ nhúng/hệ thời gian thực phải đáp ứng chế lập lịch hệ RTOS phải xác định thời điểm kết thúc mà phải gặp Để thực mục tiêu trên, kỹ sư lập trình phải gán quyền ưu tiên cho tác vụ Sau chế lập lịch hệ RTOS đơn giản xác định tác vụ có quyền ưu tiên cao phép thi hành thời điểm xử lý Điều dẫn đến cần chia sẻ thời gian xử lý cách công tác vụ có ưu tiên sẵn sàng thực thi Tác vụ điều khiển có quyền ưu tiên cao vì: Thời hạn cho tác vụ điều khiển có yêu cầu nghiêm ngặt tác vụ xử lý bàn phím Hậu việc thời hạn kết thúc (dead line) tác vụ điều khiển lớn tác vụ xử lý phím Bộ lập lịch thời gian thực Sơ đồ trình bày tác vụ định nghĩa phần trước lịch trình hệ thời gian thực Hệ RTOS trước tiên tự tạo cho tác vụ gọi Idle Task, tác vụ thực thi khơng có tác vụ có khả thực thi Tác vụ Idle hệ RTOS trạng thái sẵn sàng hoạt động Hình 9: Sơ đồ phân chia kiện theo thời gian Với giản đồ trên, ta thấy tác vụ điều khiển u cầu hoạt động tác vụ bàn phím buộc phải nhường lập trình ta ln để tác vụ điều khiển có mức ưu tiên cao hơn, lập lịch thời gian thực cho phép tác vụ có ưu tiên cao chiếm quyền chạy trước Trong lập lịch ln có tác vụ Idle nhằm quản lý phân phối tài ngun ln mức ưu tiên thấp nhất, chạy khơng có tác vụ chạy Cách phân phối tài nguyên FreeRTOS a) Phân phối RAM [1] Kernel RTOS buộc phải xếp, phối hợp RAM cho để tạo tác vụ, hàng đợi semaphore Gọi hàm malloc() free() sử dụng cho mục đích có số nhược điểm tồn tại: • Khơng phải lúc tồn hệ nhúng • Chiếm nhiều dung lượng code 17 • Đây khơng phải đoạn tin cậy • Khơng thể tiên liệu (sẽ khoảng thời gian khác chạy hàm gọi từ hàm đền hàm khác) nên cách phân phối RAM không nhiều Một hệ thống nhúng hay thời gian thực có số lượng RAM đòi hỏi thời gian khác hệ thông khác nên có cách phân phối RAM đáp ứng số ứng dụng Để giải vấn đề này, phương pháp phân phối nhớ API nằm lớp portable cung cấp giải pháp thích đáng cho ứng dụng riêng biệt Khi kernel u cầu RAM, thay gọi malloc() gọi pvPortMalloc() Khi RAM giải phóng, thay gọi free() gọi vPortFree() Có ba kiểu cấp phát nhớ API mã nguồn FreeRTOS : scheme1 – heap1.c: Đây cách xếp đơn giản Nó khơng cho phép giải phóng nhớ chúng phân phối thích hợp cho phần lớn ứng dụng Thuật toán đơn giản chia mảng đơn vào khối có yêu cầu RAM Dung lượng tổng dãy đặt cách định nghĩa configTOTAL_HEAP_SIZE FreeRTOSconfig.h Sự phân phối này: • Có thể sử dụng ứng dụng khơng xóa task hàng đợi • Luôn tiền định (luôn khoảng thời gian để trở block) • Được sử dụng PIC, AVR 8051 khơng linh hoạt việc tạo xóa task sau vTaskStartScheduler() gọi Mục Bộ lập lịch Mỗi task Mỗi mức ưu tiên Mỗi hàng đợi Lượng RAM sử dụng (bytes) 83 (có thể giảm sử dụng kiểu liệu khác nhỏ hơn) 20 (TCB có byte cho tên) + vùng cho ngăn xếp 16 45 + vùng lưu trữ hàng đợi 18 Mỗi semaphore 45 Bảng 3: Bảng phân phối RAM heap1 heap phù hợp với ứng dụng thời gian thực nhỏ, task hàng đợi tạo trước kernel tạo scheme – heap 2: Sự xếp coi thuật toán tốt nhất, khơng giống 1, cho phép khối nhớ trước giải phóng Nó khơng kết hợp khối nhớ giải phóng liền kề thành khối lớn Ngoài tổng lượng RAM đặt cách định nghĩa configTOTAL_HEAP_SIZE FreeRTOSconfig.h Sự xếp này: Có thể dùng ứng dụng gọi lại nhiều lần vTaskCreate() / vTaskDelete() Không nên sử dụng nhớ phân phối giải phóng với dung lượng bất kỳ, trường hợp đơn giản sau: task bị xóa có độ sâu stack khác nhau, hàng đợi bị xóa có độ dài khác Có thể xảy vấn đề phân mảnh nhớ ứng dụng tạo khối, task, hàng đợi khơng theo trật tự Có thể khơng xảy với ứng dụng gần ghi nhớ để ý Khơng tiền định khơng phải khơng có khả đặc biệt Có thể sử dụng ARM7 Flashlite linh động việc tạo xóa task heap_2.c thích hợp cho ứng dụng thời gian thực tạo task cách linh động Mục Bộ lập lịch Lượng RAM sử dụng (bytes) 216 (có thể giảm sử dụng kiểu liệu khác nhỏ hơn) Mỗi task 64 (TCB có byte cho tên) + vùng cho ngăn xếp Mỗi hàng đợi 76 + vùng lưu trữ hàng đợi Bảng 4: Bảng phân phối RAM heap2 scheme – heap_3.c Đây chuẩn cho malloc() free(), làm cho chức thread an toàn: Yêu cầu liên kết để cài đặt heap thư viện dịch để giúp malloc() free() thực Không tiền định Sẽ gia tăng dung lượng kernel lên nhiều b) Cách lập lịch Khi FreeRTOS lập lịch theo kiểu preemtive, sử dụng kiểu lập lịch ưu tiên kế thừa (Priority Inheritance), báo hiệu qua mutex Ưu tiên kế thừa tức trình chạy đến thời điểm task có mức ưu tien thấp nắm giữ tài nguyên mà task có mức ưu tiên cao yêu cầu task ưu tiên thấp nhận mức ưu tiên task cao để chạy Khi task ưu tiên thấp giải phóng tài nguyên mà task ưu tiên cao cần mức ưu tiên trở lại cũ Ta lấy ví dụ minh họa với tiến trình sau: 19 Tiến trình Mức ưu tiên Chuỗi tài nguyên Thời điểm bắt đầu P4 EEQVE P3 EVVE P2 EE P1 EQQQE Bảng 5: Bảng phân chi tiết tiến trình Trong đó: E: đơn vị không cần tài nguyên  Q: đơn vị thời gian cần tài nguyên Q V: đơn vị thời gian cần tài nguyên V Ta có sơ đồ chạy sau: Hình 10: Sơ đồ lập lịch ví dụ ưu tiên kế thừa Có thể giải thích sơ đồ sau: Ở thời điểm P1 chạy có u cầu Khi P3 bắt đầu P2 bắt đầu, P3 có mức ưu tiên cao P1 P2 nên giành lại quyền chạy từ P1 Tương tự điểm P4 chạy Khi P4 cần tài nguyên Q P1 giữ, P4 phải dừng lại, P1 kế thừa mức ưu tiên từ P4 P1 chạy Đến P1 giải phóng tài nguyên Q trở mức ưu tiên Tiếp sau tiến trình mức ưu tiên cao chạy trước hồn thành Các file kernel FreeRTOS Trong phần tìm hiểu kỹ FreeRTOS ta tiếp cận theo file Mỗi file modun, tiếp cận file tiếp cận modun FreeRTOS, từ ta trình bày cụ thể vấn đề - FreeRTOS.h: kiểm tra xem FreeRTOSconfig,h định nghĩa ứng dụng macro phụ thuộc vào chương trình cách rõ ràng hay chưa - task.h: tạo hàm macro liên quan đến task, khởi tạo, xóa, treo,… 20 - list.h: tạo hàm macro liên quan đến việc tạo xoá danh sách trạng thái task danh sách ready, running, block, suppend, waiting -croutine.h: tạo hàm macro liên quan đến task queue chủ yếu dùng cho coorporative - portable.h: tạo tính linh động cho lớp API Với chương trình port cho vi điều khiển trình dịch khác cần thay đổi file để phù hợp API a) FreeRTOS.h File nhằm định hướng cho hệ điều hành xem sử dụng chức Kiểm tra xem FreeRTOSconfig,h định nghĩa ứng dụng macro phụ Đồ án tốt nghiệp Nghiên cứu port hệ điều hành thời gian thực FreeRTOS lên vi điều khiển PIC 30 thuộc vào chương trình cách rõ ràng hay chưa Nếu hàm macro muốn sử dụng cần đặt lên 1, ngược lại đặt b) task.h Gồm năm phần: Các macro định nghĩa: khai báo số kiểu dùng file, khai báo macro tskIDLE_PRIORITY(), taskYIELD(), taskENTER_CRITICAL(),… định nghĩa số số để sử dụng Các task tạo API: có hai nhiệm vụ quan trọng tạo xóa task - Tạo task thêm vào danh sách task sẵn sàng chạy nhiệm vụ xTaskCreate(), hàm phải khai báo tên task, độ sâu stack sử dụng cho task, mức ưu tiên task, ngồi số nhiệm vụ khác - Task bị xoá gỡ bỏ từ tất danh sách sẵn sàng, khoá, ngắt kiện Chú ý idle task có nhiệm vụ giải phóng vùng nhớ dành cho kernel khỏi task cừa bị xố Vì điều quan trọng idle task phải có thời gian vi điều khiển ứng dụng có gọi đến vTaskDelete() Các task điều khiển API: tạo hàm điều khiển API cụ thể nhiệm vụ sau: - Tạo trễ: vTaskDelay() vTaskDelayUntil() vTaskDelay() dùng để tạo trễ khoảng thời gian định, vTaskDelayUntil() tạo trễ đến thời điểm định - Mức ưu tiên: xTaskPriorityGet() vTaskPrioritySet() Hai hàm làm nhiệm vụ giành lại mức ưu tiên đặt mức ưu tiên cho task - Thay đổi trạng thái task treo, khôi phuc vTaskSuspend() nhằm để treo task vTaskResume() gọi sau task bị treo muốn quay trạng thái sẵn sàng Muốn gọi hàm vTaskResume() từ ngắt sử dụng xTaskResumeFromISR() Ngồi hai hàm vTaskSuspendAll() vTaskResumeAll() tương tự thực với tất task trừ ngắt - Lập lịch: vTaskStartScheduler() vTaskEndScheduler() hàm thực việc bắt đầu kết thúc việc lập lịch Chú ý bắt đầu việc lập lịch Idle task tự động tạo Sau gọi vTaskEndScheduler() mà gọi lại vTaskStartScheduler() phục hồi từ thời điểm Các task tiện ích - xTaskGetTicksCount: trả lại giá trị ticks đếm từ vTaskStartScheduler bị hủy bỏ Đồ án tốt nghiệp Nghiên cứu port hệ điều hành thời gian thực FreeRTOS lên vi điều khiển PIC 31 - uxTaskGetNumberOfTasks(void): trả lại số lượng task mà kernel quản lý Hàm bao gồm task sẵn sàng, bị khóa bị treo Task bị delete mà chưa giải phóng idle tính vào - vTaskList(): hàm khơng cho phép ngắt khoảng thời gian làm việc Nó khơng tạo để chạy ứng dụng bình thường giúp cho việc debug - vTaskStartTrace(): đánh dấu việc bắt đầu hoạt động kernel Việc đánh dấu chia để nhận task chạy vào lúc Đánh dấu file lưu trữ dạng nhị phân Sử dụng tiện ích độc lập 21 DOS gọi convtrce.exe để chuyển chúng sang kiểu text file dạng mà xem vẽ Hình 14: Ví dụ đánh dấu hoạt động kernel - ulTaskEndTrace(): Dừng đánh dấu kernel hoạt động, trả lại số byte mà viết vào đệm đánh dấu Lập lịch nội cho mục đích port - vTaskIncrementTick(): không sử dụng để code cho ứng dụng Gọi từ kernel tick, tăng đếm tick kiểm tra xem có phải thời điểm cần chuyển trạng thái task hay khơng, ví dụ task bị khóa đến thời điểm khôi phục loại bỏ khỏi danh sách bị khóa thay vào danh sách sẵn sàng Đồ án tốt nghiệp Nghiên cứu port hệ điều hành thời gian thực FreeRTOS lên vi điều khiển PIC 32 - vTaskPlaceOnEventList(): không sử dụng để code cho ứng dụng Hàm gọi không cho phép ngắt Loại bỏ tất task gọi từ danh sách sẵn sàng thay vào thêm vào danh sách task chờ kiện danh sách task trễ Task giải phóng trở lại kiện xảy hết thời gian trễ - xTaskRemoveFromEventList(): không sử dụng để code cho ứng dụng Hàm gọi không cho phép ngắt Loại bỏ task từ list kiện list task bị khóa thay vào hàng đợi sẵn sàng - vTaskCleanUpResources(): không sử dụng để code cho ứng dụng Xóa hàng đợi sẵn sàng trễ khối điều khiển task, giải phóng nhớ cấp phát cho khối điều khiển task ngăn xếp task - xTaskGetCurrentTaskHandle(): trả lại kênh điều khiển cho task gọi - vTaskSetTimeOutState(): giữ lại trạng thái thời để tham chiếu sau - xTaskCheckForTimeOut(): kiểm tra xem có time out hay khơng - vTaskMissedYield(): sử dụng để ngăn cản lời gọi hàm taskYield() không cần thiết - vTaskPriorityInherit: nâng mức ưu tiên mutex holder lên đến task gọi mutex holder có mức ưu tiên thấp task gọi - vTaskPriorityDisinherit: đặt mức ưu tiên cho task trở lại mức ưu tiên trường hợp mà kế thừa mức ưu tiên cao giữ semaphore c) list.h Trong file list.h, FreeRTOS định nghĩa cấu trúc, macro hàm phục vụ cho tiện ích danh sách Chức file tạo mới, thêm, bớt tác vụ vào danh sách task chạy (running), sẵn sàng (ready), khoá (block), treo (suppend) Các chức cụ thể là: - Khởi tạo danh sách - Khởi tạo phần tử danh sách - Đặt đối tượng sở hữu phần tử danh sách - Đặt giá trị phần tử danh sách Trong hầu hết trường hợp giá trị dùng để xếp danh sách theo thứ tự định - Để lấy giá trị phần tử danh sách Giá trị biểu thị gì, ví dụ mức ưu tiên tác vụ thời gian mà task bị khố Đồ án tốt nghiệp Nghiên cứu port hệ điều hành thời gian thực FreeRTOS lên vi điều khiển PIC 33 - Xác định xem danh sách chứa phần tử khơng, có giá trị true danh sách rỗng 22 - Kiểm tra số phần tử danh sách - Xác định phần tử danh sách - Tìm chương trình chủ phần tử danh sách - Kiểm tra xem phần tử có nằm danh sách khơng - Thêm phần tử vào danh sách - Loại bỏ phần tử từ danh sách d) croutine.h Tạo hàm macro liên quan đến task queue chủ yếu dùng cho coorporative Các chức file sau: - Ẩn thực thi khối điều khiển co-routine - Tạo co-routine thêm vào danh sách co-routine sẵn sàng - Lập lịch cho co-routine, cho phép co-routine có mức ưu tiên cao chạy Co-routine chạy đến bị khóa, phải nhường bị ngắt tác vụ Co-routine chạy cooperatively coroutine khơng bị ngắt co-routine khác bị ngắt task Nếu ứng dụng bao gồm task co-routine vCoRoutineScheduler gọi từ idle task ( idle task hook) - Các co-routine phải bắt đầu với lời gọi macro crSTART() - Các co-routine phải kết thúc với lời gọi macro crEND()  Tạo trễ cho co-routine khoảng thời gian cố định - Các macro crQUEUE_SEND(), crQUEUE_RECEIVE() co-routine tương đương với hàm xQueueSend() xQueueReceive() sử dụng task - Macro crQUEUE_SEND_FROM_ISR() crQUEUE_RECEIVE_ FROM_ISR() co-routine tương đương với xQueueSendFromISR() xQueueReceiveFromISR() sử dụng task - vCoRoutineAddToDelayedList: sử dụng co-routine macro Các macro ngun thủy thực thi co-routie đòi hỏi có nguyên mẫu Hàm loại bỏ co-routine thời từ list sẵn sàng đặt chúng vào list trễ thích hợp e) portable.h Đây coi file header port.c, hàm tìm hiểu kỹ phần port.c Bên cạnh file làm số nhiệm vụ quan trọng nhằm tạo project: Đồ án tốt nghiệp Nghiên cứu port hệ điều hành thời gian thực FreeRTOS lên vi điều khiển PIC 34 - Khai báo đường dẫn vào file portmacro.h cho project riêng biệt cho phù hợp với vi điều khiển chương trình dịch - Với số vi điều khiển file mày include thêm số file cần thiết để tạo project Ví dụ tạo project cho PC ngồi tạo đường dẫn đến portmacro.h phải include thêm file frconfig.h Ngồi đặt chương trình quản lý nhớ yêu cầu cho port Các file lại trongkernel FreeRTOS Các file lại kernel ba file: - project.h: định nghĩa kiểu ban đầu mà hàm thực phải phù hợp - queue.h: tạo hàm nhằm sử dụng hàng đợi - semphr.h: tạo hàm nhằm sử dụng semaphore a) projdef.h Nhiệm vụ file định nghĩa số mà hàm nên theo mà sử dụng Nếu khơng sử dụng hồn tồn bỏ file 23 ý phải sửa lại hết số file dùng sẵn người viết mã nguồn FreeRTOS ln tn thủ chuẩn Ngồi file định nghĩa lỗi b) queue.h Như tên gọi file, tất hàm macro khai báo file nhằm phục vụ cho việc sử dụng hàng đợi cho thuận tiện Các chức cụ thể: - Tạo hàng đợi - xQueueSendToToFront(): Gửi phần tử vào đầu hàng đợi - xQueueSendToToBack(): Gửi phần tử vào sau hàng đợi - xQueueGernericSend(): Gửi phần tử vào hàng đợi - xQueuePeek(): Lấy phần tử khỏi hàng đợi mà khơng loại bỏ khỏi hàng đợi Phần tử gửi từ hàng đợi cách copy đệm nên phải cung cấp cho đệm dung lượng đủ Số lượng byte copy vào đệm phải khai báo từ tạo hàng đợi - xQueueReceive(): Nhận phần tử từ hàng đợi Phần tử gửi từ hàng đợi cách copy đệm nên phải cung cấp cho đệm dung lượng đủ Lượng byte copy vào đệm phải khai báo từ tạo hàng đợi - Tương tự hàm với hàng đợi phạm vi phục vụ ngắt có hàm: xQueueSendToFrontFromISR(), xQueueSendToBackFromISR(), xQueueGenericSendFromISR(), xQueueReceiveFromISR() - Tìm số message lưu trữ hàng đợi - Xóa hàng đợi, giải phóng nhớ phân phối cho hàng đợi Đồ án tốt nghiệp Nghiên cứu port hệ điều hành thời gian thực FreeRTOS lên vi điều khiển PIC 35 c) semphr.h Tất hàm macro khai báo file nhằm phục vụ cho việc sử dụng semaphore cho thuận tiện Các chức cụ thể:  Tạo semaphore nhị phân, kiểu sử dụng đồng tác vụ tác vụ ngắtThis type of semaphore can be used for pure synchronisation between tasks or between an interrupt and a task Kiểu semaphore nhị phân nên task sản xuất task khác tiêu thụ khơng thỏa mãn Do kiểu khơng sử dụng cho thuật toán ưu tiên kế thừa mà sử xSemaphoreCreateMutex() - Lấy semaphore qua hàm xSemaphoreTake(), sử dụng xQueueReceive() - Trả semaphore qua hàm xSemaphoreGive(), sử dụng xQueueGenericSend() - Tương tự có semaphore phục vụ ngắt xSemaphoreGiveFromISR( ), sử dụng hàm xQueueGenericSendFromISR( ) - Tạo mutex qua xSemaphoreCreateMutex(), sử dụng xQueueCreateMutex() 24 ... loại hệ điều : - Hệ điều hành cho Mainframe - Hệ điều hành cho Server - Hệ điều hành đa vi xử lý - Hệ điều hành cho máy tính cá nhân - Hệ điều hành thời gian thực - Hệ điều hành nhúng - Hệ điều hành. .. 4: Sơ đồ chức hệ điều hành thời gian thực Nhiều hệ điều hành không thời gian thực cung cấp nhân tương tự điểm khác biệt lớn hệ điều hành thời gian thực hệ điều hành không thời gian thực nói chung... thời gian thực Trong phần ta sâu vào tìm hiểu hệ điều hành thời gian thực với khái niệm, đặc điểm tầm quan trọng hệ điều hành thời gian thực thực tế Từ liên hệ trình bày cụ thể hệ điều hành thời

Ngày đăng: 23/01/2018, 10:18

Từ khóa liên quan

Mục lục

  • 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

    • 1.1 Các chức năng của hệ điều hành

      • 1.1.3 Quản lý hệ thống lưu trữ (storage management): hệ điều hành quản lý lưu trữ trên các ổ đĩa, đĩa CD.

      • 1.1.4 Giao tiếp với người dùng (user interaction) Có 7 loại hệ điều hành :

        • Hệ điều hành cho Mainframe

        • Hệ điều hành cho các Server

        • Hệ điều hành đa vi xử lý

        • Hệ điều hành cho máy tính cá nhân

        • Hệ điều hành thời gian thực

        • Hệ điều hành nhúng

        • Hệ điều hành cho thẻ thông minh

        • II. Tìm hiểu hệ điều hành thời gian thực

          • 1. Hệ điều hành thời gian thực (RTOS)

            • a) Khái niệm hệ điều hành thời gian thực

            • b) Các đặc điểm của RTOS

            • 2. Các loại hệ điều hành thời gian thực

            • 3. Tầm quan trọng hệ điều hành thời gian thực

            • 4. Các hệ điều hành thời gian thực phổ biến

            • Phần II: Tìm hiểu chi tiết về FreeRTOS

              • I. Tổng quan về FreeRTOS 1. Khái niệm FreeRTOS

              • 2. Các đặc điểm của FreeRTOS

              • Tại sao chọn FreeRTOS?

              • 3. Các vấn đề cơ bản trong FreeRTOS

                • a) Đa nhiệm

                • b) Lập lịch

                • Chuyển đổi ngữ cảnh

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

Tài liệu liên quan