1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Giới thiệu ứng dụng thời gian thực và hệ điều hành RTOS

69 619 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 69
Dung lượng 4,34 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Giải thích về thời gian thực và ứng dụng của thời gian thực trong thực tế.Giới thiệu sơ bộ các thành phần chính thường gặp trong hệ điều hành RTOSCơ chế đồng bộ hay gặp trong RTOSWhat is RealTime and its application in real world?Introduce on RealTime Operating System – RTOS RTOS Kernel RTOS Tasks and Processes RTOS Scheduler RTOS NonPreemptive Kernel and Preemptive KernelBasic Synchronization in RTOS Semaphore Event Message Mailboxes Message QueueResearching the proscons on most popular RTOS in the market (VxWorks, ThreadX, FreeRTOS, Freescale MQX, uItron)

Trang 1

LECTURE 10: INTRODUCE TO

BASIC REAL-TIME APPLICATIONS

AND RTOS.

Trang 4

RTOS là gì?

 RTOS là viết tắt của Real-Time Operating System.

 Thuật ngữ Operating System dùng để mô tả sự kết hợp của

phần mềm để quản lý tài nguyên phần cứng của hệ thống.

 Phần mềm có thể bao gồm 1 tập tin mô-đun hệ thống, một giao

diện và các thành phần khác.

 Thông thường Kernel được hiểu như là 1 tập con của tập hợp

này.

Freescale MQX Overview

Trang 5

o MQX RTOS được phát hành bởi Freescale Semiconductor Nó được nhắm

tới nhiều vi điều khiển như Freescale ColdFire, Kinetis Arm® CorTex M4 và Freescale Power Architecture.

o Freescale MQX RTOS được dựa trên MQX phiên bản 2.5 nó được phát

hành bởi công ty ARC International Freescale MQX RTOS phát hành bao gồm kernel thời gian thực, thành phần lõi hệ thống, tích hợp TCP/IP

network stack-RTCS, file hệ thống (MFS), USB host và ngăn xếp thiết bị.

Freescale MQX Overview

Trang 7

2 MQX RTOS BSPs

• Code từ /mqx/source/bsp/<board> được xây dựng với file điều khiển

I/O từ /mqx/source/bsp/io Tạo thành thư viện bsp.

• Khi liên quan đến ứng dụng người dùng, cho phép the board và hệ

thống hoạt động được khởi động và sử dụng dịch vụ điều khiển I/O.

• Hỗ trợ nhiều kiểu điều khiển I/O: I2C, SPI, Flex CAN, RTC, Serial, ADC,

DAC, Flash, ENET,….

Freescale MQX Overview

Trang 10

5 MQX USB host

 File USB HDK từ thư mục /usb/host/source được xây

dựng thành thư viện.

 Khi sử dụng thư viện USB HDK cho phép ứng dụng giao tiếp với các

thiết bị USB khác được kết nối trên USB bus.

Freescale MQX Overview

Trang 12

7 MQX Shell

Mã shell va dòng lệnh xử lý được hoàn toàn như là những thư viện tách biệt gọi là shell

Freescale MQX Overview

Trang 13

8 Thay đổi file nguồn của MQX

• Ta cần thêm vào

<install_dir>/mqx/source/bsp

<install_dir>/mqx/source/io

Freescale MQX Overview

Trang 14

Freescale MQX Overview

Trang 15

Freescale MQX Overview

Trang 16

Thay đổi cấu hình tùy chọn

Để đảm bảo các kênh nối tiếp (trường hợp này là ttyc) thì ta kích hoạt trong tập tin:

#define BSPCFG_ENABLE_TTYB 1

Để thiết lập các kênh mặc định I/O cho giao diện nối tiếp UART (ánh xạ tới ttyc: thiết bị trong MQX RTOS), sử dụng:

#define BSP_DEFAULT_IO_CHANNEL "ttyb:"

Cấu hình tùy chọn được cài đặt trong

<mqx_installation>/config/<board>/user.config.h

Freescale MQX Overview

Trang 18

MQX Basics: Tasks

II CÁC TÁC VỤ (TASK).

2.1 KHÁI NIỆM VỀ TASK .

- Một hệ thống thời gian thực được gọi là “điều khiển sự kiện”

kiện như thế nào? một giải pháp đưa ra có tên Đa nhiệm.

- Giải pháp này đã được chứng minh là một mô hình chuẩn cho các hệ

thống điều khiển sự kiện và hệ thống sử dụng ngắt Ý tưởng cơ bản của

giải pháp này là chúng ta có thể phân chia một vấn đề lớn thành các nhánh nhỏ và đơn giản hơn để giải quyết Mỗi một vấn đề con (sub-problem)

trở thành một tác vụ - task.Mỗi một tác vụ chỉ làm một việc đơn giản

Trang 19

KHÁI NIỆM VỀ TASK .

- Cũng giống như các chương trình khác, một tác vụ bao gồm mã lệnh

để thực hiện các chức năng tác vụ phải thực hiện (do người lập trình đã thiết kế) Mã lệnh được chứa trong một hàm tương tự như hàm main() trong ngôn ngữ lập trình C Điều làm nên sự khác biệt của tác vụ chính

là ngữ cảnh (context) chứa trong ngăn xếp (stack) của nó.

Hình ảnh một task.

Trang 20

KHÁI NIỆM VỀ TASK .

- Chú ý rằng, đôi khi (nhiều khi khá hữu dụng) ta có thể tạo ra nhiều tác

vụ từ một hàm chung Như đã nói, điều làm cho một tác vụ có thể tách

biệt và khác biệt với các tác vụ khác chính là ngăn xếp của nó

Cấu trúc thông thường của một task.

Trang 21

-Mỗi tác vụ trong RTOS luôn luôn ở một trong ba trạng thái chính:

1 Running: Với ý nghĩa bộ xử lý đang thực hiện tác vụ Với một bộ xử

lý thì chúng ta chỉ chạy một tác vụ tại một thời điểm nhất định.

2 Ready : Với ý nghĩa một số tác vụ khác sẵn sàng chạy nếu bộ xử lý rỗi.

3 Blocked : Với ý nghĩa tác vụ không sẵn sàng chạy kể cả khi bộ xử lý

trong trạng thái nghỉ - Idle Tác vụ ở trong trạng thái này vì chúng đợi

một sự kiện bên ngoài tác động để kích hoạt nó trở lại trạng thái sẵn sàng.

CÁC TRẠNG THÁI CỦA TASK.

Trang 22

CÁC TRẠNG THÁI CỦA TASK.

Mô hình trạng thái của các tác vụ.

Trang 24

 User tasks should run at priority 8 or higher

 Used by scheduler to determine which task to run next

Each task is assigned a priority :

 Higher number means lower priority

 0 is highest priority

Trang 25

Common Scheduling Configurations:

Scheduler

 FIFO (also called priority-based preemptive)

The active task is the highest-priority task that has been ready the longest

 Round Robin

The active task is the highest-priority task that has been ready the

longest without consuming its time slice

Trang 26

Priority Basead FIFO Scheduling

high

FIFO list of

Trang 27

Priority Based FIFO Scheduling

high

FIFO list of

Trang 28

Priority Based FIFO Scheduling

high

FIFO list of

Trang 29

Round-Robin Scheduling

time 50ms 100ms 150ms

Trang 30

MQX Tasks

 If _task_create_blocked is used the task is

not ready until _task_ready() is called

_task_block

_task_ready

 Tasks can be automatically created when MQX Starts;

also, any task can create another task by calling

_task_create() or

_task_create_blocked()

 The function _task_create() puts the child task in

the ready state and the scheduler puts the higher

priority task to run

Trang 31

Creating a Task

• When creating a task you have to:

 Make the task prototype and index definition

 Add the task in the Task Template List

Using the init_task example:

#define INIT_TASK 5 extern void init_task(uint_32);

TASK_TEMPLATE_STRUCT MQX_template_list[] = {

{ TASK_INDEX, TASK, STACK, TASK_PRIORITY, TASK_NAME, TASK_ATTRIBUTES,

CREATION_PARAMETER, TIME_SLICE}

}

TASK_TEMPLATE_STRUCT MQX_template_list[] = {

{INIT_TASK, init_task, 1500, 9, "init",

MQX_AUTO_START_TASK, 0, 0}, }

Trang 32

Creating a Task

• When creating a task you have to:

 Make the task definition

 During execution time, create the task using

(if it is not an autostart task)

void init_task(void) {

/* Put the Task Code here */

}

task_create()

Trang 33

{ WORLD_ID, world_task, 0x3000, 9, "world_task",

MQX_AUTO_START_TASK, 0L, 0},

{ HELLO_ID, hello_task, 0x1000, 8, “hello_task",

MQX_TIME_SLICE_TASK, 0L, 100},

{ LED_ID, led_task, 0x2000, 10, “LED Task",

MQX_AUTO_START_TASK | MQX_TIME_SLICE_TASK, 0L, 50},

Trang 34

void init_task(void) {

void Task_B(void) {

.

_task_abort(TASK_B);

}

void Task_A(void) {

{TASK_A, Task_A, 1500, 10,

“Task A", 0, 0, 0},

{TASK_B, Task_B, 1500, 9,

“Task B", 0, 0, 0},

Trang 35

Hầu hết các Real – time Kernel sử dụng giải thuật lịch trình thay thế theo độ ưu tiên ( preemptive priority- based

scheduling) làm mặc định.

Các task sẽ được thực thi tại bất kì một thời điểm là task có độ ưu tiên cao nhất so với các task khác đang ở trạng thái

sẵn sàng.

Real –Time Kernel hỗ trợ 256 cấp độ ưu tiên, với 0 là độ ưu tiên cao nhất và 255 là độ ưu tiên thấp nhất Một số Kernel

thì ngược lại với 255 là độ ưu tiên cao nhất và 0 là độ ưu tiên thâp nhất.

Với bộ chuyển đổi theo đọ ưu tiên, mỗi task phải có một độ ưu tiên, và task có độ ưu tiên cao nhất chạy đầu tiên Nếu

một Task có độ ưu tiên cao hơn task đang chạy trở nên sẵn sàng để chạy thì kernel sẽ ngay lập tức lưu lại trạng thái Task hiện tại và chuyển sang Task có độ ưu tiên cao hơn.

Mặc dù việc phân chia độ ưu tiên của Task được thực hiện khi task đó được tạo nhưng độ ưu tiên của Task là có thể

thay đổi một cách linh động sử dụng Lời gọi do kernel cung cấp ( Kernel – provided calls) Khả năng này

dùng để thay đổi một cách linh động cho phép một ứng dụng nhúng có độ linh hoạt để ứng xử với sự kiện bên ngoài

khi chúng xuất hiện, tạo ra một hệ thống thời gian thực và đáp ứng tốt Lưu ý là việc sử dụng không đúng khả năng

thay đổi độ ưu tiên này có thể dẫn đến đảo độ ưu tiên ( priority inversion), vùng chết ( deadlock), và có thể dẫn đến

treo hệ thống ( system failure).

Trang 36

Hình 1.8 : Lịch trình theo Round- Robin

Mỗi Task sẽ cùng chia sẻ thời gian thực thi của CPU Round- Robin thuần túy không thỏa mãn yêu cầu của hệ thống

thời gian thực bởi vì một hệ thống thời gian thực các task phải làm việc theo mức độ quan trong khác nhau.

Ví dụ : ( Hình 8)

Thay vì thay thế theo độ ưu tiên, các task round –robin được phân chia thời giant thực thi theo các khoảng thời gian ( time slice).

Vơi time slicing , mỗi task sẽ được thực thi trong một khoảng thời gian nhất định, và theo vong trong Một bộ đếm

thời gian sẽ giám sát thời gian của mỗi Task, tăng lên theo mỗi xung clock Khi thời gian thực thi một task đã hết, bộ

đếm sẽ bị xóa, và task này sẽ được đặt ở cuổi cùng của chu kì ( end of circle)

Nếu như một task round-robin bị thay thế bởi mọt task có độ ưu tiên cao hơn, thì bộ đếm thời gian sẽ lưu lại và phục hồi khi task bị thay thế dành quyền thực thi lại.

Trang 38

Tại sao phải đồng bộ hóa?

MQX Basics: Task Synchronization

Trang 39

Đồng bộ hóa

• Một cách tổng quát, một Task phải đồng bộ hoạt động của nó với Task

khác để việc thực thi đa luồng( multi- thread) được đảm bảo Hoạt

động đồng bộ đảm bảo rằng thứ tự thực thi các Task được sử dụng.

Trang 40

• Là đối tượng bắt sự kiện để đồng bộ giữa các tasks, có thể tăng hoặc giảm.

Trang 41

Binary semaphore

Mutex semaphore

Trang 42

Giám sát việc đồng bộ hóa

Tín hiệu đồng bộ

Trang 43

Đồng bộ hóa trong chia sẽ đa tài nguyên hệ thống Đồng bộ hóa trong chia sẻ tài nguyên hệ thống

Trang 44

Ready Suspended

Ready

Running

Running Running

Running Running

release resource

occupy resource

Trang 45

Debugging MQX Applications

 Debugging MQX Applications

- MQX RTOS and all other MQX components are statically linked to application code

- Plain CodeWarrior debugger can be used for basic tasks

- Without additional support from TAD, it is a challenge to

 What is TAD (Task Aware Debugger)?

- Debugger Plug-in helping it to understand task state, descriptors and stack

- CodeWarrior IDE Plug-in able to display its content in a easy-to-understand way (selected variables, structure members etc)

Trang 46

Debugging MQX Applications

CodeWarrior Development Studio How does TAD appear in CodeWarrior Development Studio ?

Trang 47

TAD Installation and Activation

 Download

Step 1

Step 3

Step 2

Trang 48

Debugging MQX Applications

 Installing TAD

 Activating MQX TAD in Project

Trang 49

Other TAD Featuers

Check for Errors

Trang 51

TAD Screens

Task Summary

Stack Usage

Trang 52

TAD Development

Available Today

◦ Classic CodeWarrior Debugger only with Professional Edition

 CodeWarrior Studio for ColdFire V2-V4

 CodeWarrior Studio for PowerPC (not public, EAI uses it to support PPC customers)

Prototype Avaialble

◦ EAI developed the TAD for IAR Debugger

◦ IAR toolset not yet supported by Freescale MQX (question of priorities)

Current Development (targeting 2010)

◦ Support Eclipse CodeWarrior 10

◦ Java & CORBA wrappers to make use of existing TAD code

◦ Resource and prioritization issues (MQX/CW10 support in general)

Trang 54

MQXUG User Guide

1.1 MQXUG User Guide

1.1.1 MQXUG User Guide

Trang 55

BẢO VỆ VÀ KHÔI PHỤC ĐƯỜNG

Trang 56

BẢO VỆ VÀ KHÔI PHỤC ĐƯỜNG

1.3 MQXUSBHOSTAPIRM USB Host API

Refrence Manual

1.3.2 USB Host API Overview

1.3.3 Host API Functions

1.3.4 Device Framework Functions

1.3.5 Data Type Descriptions

Trang 57

BẢO VỆ VÀ KHÔI PHỤC ĐƯỜNG

1.4 MQXUSBDEVAPI USB Devide API Reference

1.4.2 Overview

1.4.3 USB Device Layer API

1.4.4 USB Device Layer API

1.4.5 USB Descriptor API function listings

1.4.6 USB Descriptor API function listings

1.4.7 Reference Data Types

http://cache.nxp.com/files/32bit/doc/ref_manual/

MQX_USB_Device_Reference_Manual.pdf?fpsp=1&WT_TYPE=Reference

%20Manuals&WT_VENDOR=FREESCALE&WT_FILE_FORMAT=pdf&WT_ASSET=D

Freescale MQX Docummentation

Trang 59

BẢO VỆ VÀ KHÔI PHỤC ĐƯỜNG

1.5.2 Developing Applications

 Compiling Freescale MQX™ USB Host Stack

 Host Applications

Freescale MQX Docummentation

Trang 60

Freescale MQX Docummentation

1.6 Freescale MQX™ I/O Drivers – User Guide

Trang 61

BẢO VỆ VÀ KHÔI PHỤC ĐƯỜNG

MCF5225X & Freescale MQX introduction

Further Reading and Training(Cont)

Trang 62

BẢO VỆ VÀ KHÔI PHỤC ĐƯỜNG

MCF5225X & Freescale MQX introduction

Further Reading and Training(Cont)

Trang 63

BẢO VỆ VÀ KHÔI PHỤC ĐƯỜNG

MCF5225X & Freescale MQX introduction

Further Reading and Training(Cont)

Trang 64

BẢO VỆ VÀ KHÔI PHỤC ĐƯỜNG

Further Reading and Training(Cont)

Introducing a modular system, Serial-to-Ethernet V1 ColdFire® MCU and Complimentary MQX™

RTOS

Trang 65

BẢO VỆ VÀ KHÔI PHỤC ĐƯỜNG

Further Reading and Training(Cont)

Introducing a modular system, Serial-to-Ethernet V1 ColdFire® MCU and Complimentary MQX™

RTOS

Trang 66

BẢO VỆ VÀ KHÔI PHỤC ĐƯỜNG

Further Reading and Training(Cont)

Introducing a modular system, Serial-to-Ethernet V1 ColdFire® MCU and Complimentary MQX™

RTOS

Trang 67

Further Reading and Training(Cont)

Introducing a modular system, Serial-to-Ethernet V1 ColdFire® MCU and Complimentary MQX™

RTOS

Trang 68

BẢO VỆ VÀ KHÔI PHỤC ĐƯỜNG

Further Reading and Training(Cont)

Introducing a modular system, Serial-to-Ethernet V1 ColdFire® MCU and Complimentary MQX™

RTOS

Trang 69

Thanks You!

Ngày đăng: 27/06/2016, 09:05

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w