Cài đặt HĐH Frertos cho STM PDF

Title Cài đặt HĐH Frertos cho STM
Author Thanh Lê
Pages 19
File Size 210.4 KB
File Type PDF
Total Downloads 73
Total Views 145

Summary

HANOI UNIVERSITY OF SCIENCE AND TECHNOLOGY Đề tài : Cài đặt (Porting) cho CPU cụ thể (STM32) Nhóm 3: FreeRTOS Tạ Đức Anh 20121237 Nguyễn Đức Dương 20121451 Hoàng Phan Đại 20120227 Âu Dương Kim Sơn 20122331 Giảng viên hướng dẫn: PGS.TS Nguyễn Quốc Cường 4/26/2017 1 NỘI DUNG III. Porting FreeRTOS lên ...


Description

HANOI UNIVERSITY OF SCIENCE AND TECHNOLOGY

Đề tài : Cài đặt (Porting) cho CPU cụ thể (STM32) Nhóm 3: FreeRTOS Tạ Đức Anh

20121237

Nguyễn Đức Dương

20121451

Hoàng Phan Đại

20120227

Âu Dương Kim Sơn

20122331

Giảng viên hướng dẫn: PGS.TS Nguyễn Quốc Cường 4/26/2017

1

NỘI DUNG III. Porting FreeRTOS lên vi điều khiển STM32 3.1 Tạo Project 3.2 Quản lý và sử dụng RAM 3.3 Bộ lập lịch 3.4 Các thanh ghi phục vụ ngắt 3.5 Tùy chỉnh và nạp chương trình

4/26/2017

III. Porting FreeRTOS lên vi điều khiển STM32 3.1 Tạo Project 3.2 Quản lý và sử dụng RAM 3.3 Bộ lập lịch 3.4 Các thanh ghi phục vụ ngắt 3.5 Tùy chỉnh và nạp chương trình

2

III. Porting FreeRTOS lên vi điều khiển STM32 3.1 Tạo Project 3.2 Quản lý và sử dụng RAM 3.3 Bộ lập lịch 3.4 Các thanh ghi phục vụ ngắt 3.5 Tùy chỉnh và nạp chương trình

4/26/2017

III. Porting FreeRTOS lên vi điều khiển STM32

3

3.1 Tạo Project III. Porting FreeRTOS lên vi điều khiển STM32 3.1 Tạo Project 3.2 Quản lý và sử dụng RAM 3.3 Bộ lập lịch 3.4 Các thanh ghi phục vụ ngắt 3.5 Tùy chỉnh và nạp chương trình

4/26/2017

Cần chuẩn bị: 1. FreeRTOS package 2. STM32F4 Standard Peripheral Driver Library 3. DISCOVERY board GPIO library 4. Keil uVision

4

3.1 Tạo Project

Các file chính trong kernel:

III. Porting FreeRTOS lên vi điều khiển STM32 3.1 Tạo Project 3.2 Quản lý và sử dụng RAM 3.3 Bộ lập lịch 3.4 Các thanh ghi phục vụ ngắt 3.5 Tùy chỉnh và nạp chương trình

4/26/2017

Trong kernel của FreeRTOS có năm file chính, tất cả các chương trình port buộc phải có: · FreeRTOS.h: kiểm tra xem FreeRTOSconfig,h đã định nghĩa các ứng dụng macro phụ thuộc vào từng chương trình một cách rõ ràng hay chưa. · task.h: tạo ra các hàm và các macro liên quan đến các task, như khởi tạo, xóa, treo,… · list.h: tạo ra các hàm và các macro liên quan đến việc tạo và xoá danh sách trạng thái các task như các danh sách ready, running, block, suppend, waiting. · croutine.h: tạo ra các hàm và các macro liên quan đến task và queue nhưng chủ yếu dùng cho coorporative. · portable.h: tạo tính linh động cho lớp API. Với mỗi chương trình port cho mỗi vi điều khiển và mỗi trình dịch khác nhau đều cần thay đổi file này để phù hợp các API. 5

3.1 Tạo Project

Các file còn lại trong Kernel của FreeRTOS:

Các file còn lại trong kernel là ba file: III. Porting FreeRTOS lên vi điều khiển STM32 3.1 Tạo Project 3.2 Quản lý và sử dụng RAM 3.3 Bộ lập lịch 3.4 Các thanh ghi phục vụ ngắt 3.5 Tùy chỉnh và nạp chương trình

4/26/2017

· project.h: định nghĩa các kiểu ban đầu mà các hàm thực hiện phải phù hợp. · queue.h: tạo các hàm nhằm sử dụng hàng đợi. · semphr.h: tạo các hàm nhằm sử dụng semaphore.

6

3.1 Tạo Project

Các file cần để port lên vi điều khiển: Ba file chính: III. Porting FreeRTOS lên vi điều khiển STM32 3.1 Tạo Project 3.2 Quản lý và sử dụng RAM 3.3 Bộ lập lịch 3.4 Các thanh ghi phục vụ ngắt 3.5 Tùy chỉnh và nạp chương trình

4/26/2017

· FreeRTOSconfig.h: file này định nghĩa riêng cho từng ứng dụng. Các định nghĩa này phải được phù hợp với phần cứng · port.c: đây là file quan trọng nhất trong việc tạo ra các hàm định nghĩa trong portable.h cho việc port lên vi điều khiển. · portmacro.h: định nghĩa cho riêng phần port. Các định nghĩa này cấu hình cho FreeRTOS đúng với từng phần cứng và từng trình dịch

7

3.1 Tạo Project III. Porting FreeRTOS lên vi điều khiển STM32 3.1 Tạo Project 3.2 Quản lý và sử dụng RAM 3.3 Bộ lập lịch 3.4 Các thanh ghi phục vụ ngắt 3.5 Tùy chỉnh và nạp chương trình

4/26/2017

Các bước thực hiện:

1. Tạo project mới sử dụng STM32F4 2. Tạo thư mục Libraries’, ‘Source’, ‘Startup’ and ‘Include’ 3. Tạo system_stm32f4xx.c 4. Sao chép 'STM32F4xx_StdPeriph_Driver' vào thư mục ‘Libraries’ 5. Sao chép 'CMSIS‘vào thư mục ‘Libraries’ 6. Sao chép stm32f4xx_it.c vào thư mục ‘Source’ 7. Sao chép stm32f4xx_conf.h và stm32f4xx_it.h vào thư mục ‘Include’ 8. Sao chép thư mục FreeRTOS vào project folder 9. Sao chép FreeRTOSConfig.h vào thư mục FreeRTOS\include 10. Sao chép discoveryf4utils.h vào thư mục ‘Include’ và discoveryf4utils.c vào thư mục ‘Source’. 8

3.1 Tạo Project Để sử dụng thư viện FreeRTOS, chúng ta cần add thêm đường dẫn và các tập tin cần thiết vào project III. Porting FreeRTOS lên vi điều khiển STM32 3.1 Tạo Project 3.2 Quản lý và sử dụng RAM 3.3 Bộ lập lịch 3.4 Các thanh ghi phục vụ ngắt 3.5 Tùy chỉnh và nạp chương trình

4/26/2017

• FreeRTOSV6.1.0/

9

3.2 Quản lý và sử dụng RAM III. Porting FreeRTOS lên vi điều khiển STM32 3.1 Tạo Project 3.2 Quản lý và sử dụng RAM 3.3 Bộ lập lịch 3.4 Các thanh ghi phục vụ ngắt 3.5 Tùy chỉnh và nạp chương trình

4/26/2017

1. Hàng đợi sử dụng nhiều RAM? 2. FreeRTOS sử dụng bao nhiêu ROM? 3. Mỗi task được phân phối RAM như thế nào? 4. Mỗi hàng đợi được phân phối RAM như thế nào? 5. Ngăn xếp nên lớn bao nhiêu?

10

3.2 Quản lý và sử dụng RAM III. Porting FreeRTOS lên vi điều khiển STM32 3.1 Tạo Project 3.2 Quản lý và sử dụng RAM 3.3 Bộ lập lịch 3.4 Các thanh ghi phục vụ ngắt 3.5 Tùy chỉnh và nạp chương trình

4/26/2017

Quản lý và sử dụng RAM - Kernel RTOS buộc phải sắp xếp, phối hợp RAM cho để tạo ra mỗi tác vụ, hàng đợi hoặc semaphore. - 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().

11

3.2 Quản lý và sử dụng RAM

Quản lý và sử dụng RAM III. Porting FreeRTOS lên vi điều khiển STM32 3.1 Tạo Project 3.2 Quản lý và sử dụng RAM 3.3 Bộ lập lịch 3.4 Các thanh ghi phục vụ ngắt 3.5 Tùy chỉnh và nạp chương trình

4/26/2017

Có ba kiểu cấp phát bộ nhớ API mã nguồn của FreeRTOS : 1. 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. 2. scheme 2 – heap 2: Sự sắp xếp này được coi là thuật toán tốt nhất, không giống 1, nó cho phép các khối nhớ trước được giải phóng. Nó không kết hợp các khối nhớ được giải phóng liền kề nhau thành một khối lớn hơn. Ngoài ra tổng lượng RAM được đặt bằng cách định nghĩa trong configTOTAL_HEAP_SIZE trong FreeRTOSconfig.h. 3. scheme 3 – heap_3.c Đây là chuẩn cho malloc() và free(), làm cho chức năng này là thread an toàn 12

3.3 Bộ lập lịch III. Porting FreeRTOS lên vi điều khiển STM32 3.1 Tạo Project 3.2 Quản lý và sử dụng RAM 3.3 Bộ lập lịch 3.4 Các thanh ghi phục vụ ngắt 3.5 Tùy chỉnh và nạp chương trình

4/26/2017

1. Làm thế nào với các task có mức ưu tiên ngang nhau trong bộ lập lịch? 2. Các task mà chia sẻ idle priority scheduled?

13

3.3 Bộ lập lịch III. Porting FreeRTOS lên vi điều khiển STM32 3.1 Tạo Project 3.2 Quản lý và sử dụng RAM 3.3 Bộ lập lịch 3.4 Các thanh ghi phục vụ ngắt 3.5 Tùy chỉnh và nạp chương trình

4/26/2017

Cách lập lịch: Khi FreeRTOS lập lịch theo kiểu preemtive, nó sẽ 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 là trong quá trình chạy đến một thời điểm nào đó task có mức ưu tiên thấp hơn nắm giữ tài nguyên mà task có mức ưu tiên cao hơn đang yêu cầu thì task ưu tiên thấp hơn sẽ nhận mức ưu tiên của task cao hơn để chạy. Khi nào task ưu tiên thấp giải phóng tài nguyên mà task ưu tiên cao cần thì mức ưu tiên trở lại như cũ.

14

3.3 Các thanh ghi phục vụ ngắt III. Porting FreeRTOS lên vi điều khiển STM32 3.1 Tạo Project 3.2 Quản lý và sử dụng RAM 3.3 Bộ lập lịch 3.4 Các thanh ghi phục vụ ngắt 3.5 Tùy chỉnh và nạp chương trình

4/26/2017

1. Chuyển đổi ngữ cảnh có thể được thực hiện trong ISR 2. Các ngắt có thể gọi lồng nhau được không?

15

3.3 Các thanh ghi phục vụ ngắt III. Porting FreeRTOS lên vi điều khiển STM32 3.1 Tạo Project 3.2 Quản lý và sử dụng RAM 3.3 Bộ lập lịch 3.4 Các thanh ghi phục vụ ngắt 3.5 Tùy chỉnh và nạp chương trình

4/26/2017

Khác nhau ở ngắt trong FreeRTOS và ngắt thông thường ở chỗ: Khi ngắt thông thường xảy ra nó sẽ nhảy vào hàm ngắt và các công việc cần phải làm đều đặt trong hàm ngắt. Còn ở FreeRTOS thì khi ngắt xảy ra nó sẽ nhảy vào hàm thủ tục ngắt, hàm thủ tục ngắt lại phát đi 1 "tín hiệu" để hàm thực hiện chức năng của ngắt Unblocking và hàm này có Priority cao hơn tất cả các task khác nên nó sẽ thực hiện ngay lập tức. “Tín hiệu” ở đây chính là Semaphore, có 2 loại Semaphore là Binary Semaphore và Counting Semaphore.

16

3.5 Tùy chỉnh và nạp chương trình III. Porting FreeRTOS lên vi điều khiển STM32 3.1 Tạo Project 3.2 Quản lý và sử dụng RAM 3.3 Bộ lập lịch 3.4 Các thanh ghi phục vụ ngắt 3.5 Tùy chỉnh và nạp chương trình

4/26/2017

1. Vào ‘Options’ tùy chỉnh thông số thạch anh, chọn mạch Debug 2. Nhấn F7 hoặc để Build chương trình 3. Nhấn

để nạp xuống mạch

17

TÀI LIỆU THAM KHẢO [1] Richard Barry, FreeRTOS.org – Copyright (C) 2003-2007, www.freertos.org [2] FreeRTOS Manual, 2005, http://127.0.0.1:800/Default/www.freertos.org/tutorial/solution4.html [3] https://unboxnbeyond.wordpress.com/2015/01/04/using-freertos-in-stm32discovery-board/

4/26/2017

18

THANK FOR WATCHING!

4/26/2017

19...


Similar Free PDFs