1. Trang chủ
  2. » Thể loại khác

Tự học FREERTOS hệ điều hành thời gian thực

197 501 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 197
Dung lượng 4,14 MB

Nội dung

.1 Môi trường phát triển 3.2 FreeRTOS hệ thống Tài liệu tham khảo 3,3 FreeRTOS phương pháp gỡ lỗi 3.4 tóm tắt 3.1 môi trường phát triển U IDE : hỗ trợ môi trường phát triển hai IDE, MDK và IAR L MDK4.7X hoặc MDK5.XX thể, MDK4.7X phiên bản sau không làm việc vì các phiên bản thấp không hỗ trợ STM32F429, và không hỗ trợ C biên soạn lồng nhau . l IAR sử dụng IAR7.5 cố định, nhưng do khả năng tương thích ngược của IAR, nên các phiên bản khác không hỗ trợ. u gỡ lỗi sử dụng JLINK, ULINK hoặc STLINK có thể được. u hỗ trợ ban phát triển MCU là STM32F429BIT6.

[Kinh nghiệm] Bật: Chương FreeRTOS bắt đầu chuẩn bị hệ thống Nói đi, thứ khó khăn lúc đầu, học hỏi kiến thức mới, kiến thức thường khó khăn, làm để bắt đầu cách nhanh chóng, nhu cầu môi trường phát triển thông tin, bắt đầu, chuyên sâu nghiên cứu thân nhân dễ dàng Phần đóng vai trò, chủ yếu mô tả bắt đầu hệ điều hành FreeRTOS để làm công việc chuẩn bị 3.1 Môi trường phát triển 3.2 FreeRTOS hệ thống Tài liệu tham khảo 3,3 FreeRTOS phương pháp gỡ lỗi 3.4 tóm tắt 3.1 môi trường phát triển U IDE : hỗ trợ môi trường phát triển hai IDE, MDK IAR L MDK4.7X MDK5.XX thể, MDK4.7X phiên sau không làm việc phiên thấp khơng hỗ trợ STM32F429, không hỗ trợ C biên soạn lồng l IAR sử dụng IAR7.5 cố định, khả tương thích ngược IAR, nên phiên khác không hỗ trợ u gỡ lỗi sử dụng JLINK, ULINK STLINK u hỗ trợ ban phát triển MCU STM32F429BIT6 3.2 Hệ thống FreeRTOS Tài liệu tham khảo 3,2 FreeRTOS hệ thống tài liệu tham khảo học tập FreeRTOS hai liệu tham khảo: 3.2.1 sách nhập FreeRTOS phiên điện tử FreeRTOS có sách giới thiệu đặc biệt, mà phiên PDF sách, hướng dẫn th có phiên PDF FreeRTOS PDF phiên cẩm nang Hướng dẫn Bắt đầu tham khảo API cần thiết để dành tiền thủ cơng Địa chỉ: http://shop.freertos.org/RTOS_primer_books_and_manual_s/1819.htm Hình 3.1 Ảnh chụp hình FreeRTOS Bắt đầu Tài liệu tham khảo PDF cho Tài liệu tham khảo API Nơi mua: http://shop.freertos.org/FreeRTOS_API_and_Configuration_Reference_s/1822.htm Hình 3.2 Ảnh chụp hình FreeRTOS Bắt đầu l Bắt đầu Hướng dẫn Hướng dẫn sử dụng API Reference tải điện tử tải diễn đàn Fu Lai điện tử nêu trên, Bắt đầu Manual Tải (phiên V1.3.2): http://bbs.armfly.com/read.php?tid=14916 API Reference Manual (FreeRTOS V8.1.2) http://bbs.armfly.com/read.php?tid=13444 Nếu vậy, đề nghị bạn nên mua hãng, vì, sau tất cả, mã nguồn mở miễn phí FreeRTOS thân, khía cạnh Diễn đàn cần chi phí bảo trì Để cho biết hỗ trợ cho FreeRTOS 3.2.2 FreeRTOS thủ công phiên trực tuyến FreeRTOS phiên trực tuyến cẩm nang với phần nêu 3.2.1 Bắt đầu tay tài liệu tham khảo API tay nhau, phiên PDF Bắt đầu hướng dẫn chi tiết so với phiên trực tuyến, sau tất cả, hướng dẫn giới thiệu đặc biệt Sách Trong thực tế, không FreeRTOS hệ điều hành là, RTX uCOS mẫu đơn này, cẩm nang chế độ offline điện tử cẩm nang trực tuyến View Online trang web thức địa chỉ: http://www.freertos.org/ góc bên trái danh sách để mở (phần chụp hình): Hình 3.3 Hướng dẫn sử dụng FreeRTOS online Sau giới thiệu hệ điều hành FreeRTOS, chủ yếu phụ thuộc vào hướng dẫn sử dụng trực tuyến tài liệu hướng dẫn sử dụng PDF, giải hầu hết vấn đề 3.2.3 Gói phần mềm FreeRTOS Gói phần mềm FreeRTOS chứa mã nguồn khơng chỉ, mà cho nhà sản xuất vi mạch Demo Board Demo Địa tải xuống gói phần mềm FreeRTOS: https://sourceforge.net/projects/freertos/files/FreeRTOS/ Hình 3.4FreeRTOS phiên lịch sử Tải (một phần ảnh chụp hình) Hình 3.5 cho thấy ví dụ đánh giá FreeRTOS cho ST (ảnh chụp hình phần): Hình 3.5 FreeRTOS cho bảng đánh giá ST hỗ trợ ví dụ Ngồi FreeRTOS gói đường dẫn: \ FreeRTOS \ Demo \ Common \ Ví dụ tối thiểu thành phần khác nhau, hình 3.6 bên dưới: Hình 3.6 FreeRTOS thành phần ví dụ Những ví dụ có giá trị học tập, chẳng hạn FreeRTOS học hỏi sau bắt đầu 3.3 FreeRTOS phương pháp gỡ lỗi hướng dẫn cung cấp hai phương pháp để gỡ lỗi FreeRTOS, FreeRTOS plug-in công việc in nối tiếp thực Chương IAR Chương sử dụng Bắt đầu từ Chương 10, tất ví dụ hỗ trợ làm hỗ trợ cơng việc in nối tiếp 3.4 tóm tắt phần cho tất người để giải thích nhiều, khuyến khích cho người bắt đầu để thời gian cho phiên trực tuyến cẩm nang để tìm hiểu thêm hệ thống FreeRTOS, với học tập tương lai tốt đạt mức độ thành thạo xem hướng dẫn [Thông tin] đến: Chương Ghép ghép hệ điều hành FreeRTOS (phiên MDK) Chương hướng dẫn giới thiệu việc cấy ghép hệ điều hành FreeRTOS dựa MDK việc cấy ghép tương đối đơn giản, người dùng cần thêm tập tin nguồn cần thiết không cần phải làm công việc bản, sau thêm ba macro xác định ghép STM32F103 Cortex-M4 lõi chứa chương hướng dẫn Cortex-M3 STM32F407 lõi, ghép F429 5.1 pretransplant Chuẩn bị Note 5.2 STM32F103 hệ thống ghép FreeRTOS 5.3 STM32F407 hệ thống ghép FreeRTOS 5.4 STM32F429 hệ thống ghép FreeRTOS 5,5 tóm tắt 5.1 Chuẩn bị Lưu ý trước cấy ghép Phần môi trường phát triển IDE MDK, với MDK4.7X MDK5.XX đảm bảo hỗ trợ STM32F103, F407 F429 ( sử dụng MDK4.7X phiên sau, mặt không hỗ trợ F429, người FreeRTOS V8.2.3 sử dụng mã lắp ráp C mã lồng nhau, MDK4.7X phiên sau không hỗ trợ ) tìm kiếm dự án đơn giản, vùng chọn tốt loại tương tự đơn giản tốt, ghép vào dự án đơn giản dự án đơn giản mà khơng thể có tất người sử dụng SysTick, PendSV SVC ba hệ thống sử dụng ngắt, hệ thống FreeRTOS sử dụng ba ngắt 5.2 STM32F103 ghép hệ thống FreeRTOS 5.2.1 FreeRTOS hệ điều hành di cư chuẩn bị đơn giản trần mẫu kim loại kỹ thuật, kỹ thuật sản xuất mẫu khơng giải thích, trọng tâm để dạy cho bạn hệ thống ghép FreeRTOS Mẫu dự án chuẩn bị thể hình 5.1 bên ( chúng tơi tạo mẫu dự án khác mà không giới hạn ): Hình 5.1 Mẫu dự án Khi bạn sẵn sàng mẫu dự án mình, bạn sẵn sàng di chuyển Điều cần làm đặt tất tệp nguồn yêu cầu vào mẫu dự án Sau sáu bước chúng tơi giải thích, tất nhiên, không giới hạn phải sử dụng phương pháp sau để thêm mã nguồn cho dự án, miễn cần thiết phải thêm tệp vào mẫu dự án Bước 1: Từ trang web https://sourceforge.net/projects/freertos/files/FreeRTOS/V8.2.3/ tải phiên V8.2.3, loạt 8.x cao mà phiên bản, phiên 9.0 giai đoạn thử nghiệm , Chúng không sử dụng tạm thời FreeRTOSV8.2.3.zip FreeRTOSV8.2.3.exe nội dung nhau, tỷ lệ nén suffix exe cao Trích xuất sau tải dụng máy tính thời điểm sinh viên có máy tính bạn sử dụng, vài bạn lớp, Cột cất cánh số ít, khơng có máy tính sử dụng lần nữa, trình sử dụng semaphore để quản lý trình chia sẻ tài nguyên Thường sử dụng semaphore để đạt hai chức sau: (1) hai nhiệm vụ gián đoạn chức với đồng hóa tác vụ, chương trước giải thích nhóm kiện cờ tương tự Trong thực tế, tài nguyên chia sẻ cho thời gian (2) quản lý nhiều tài nguyên chia sẻ, phòng máy ví dụ trích dẫn Đối với hai chức này, tương ứng, cung cấp FreeRTOS semaphores nhị phân Cột đếm, số lượng tín hiệu nhị phân hiểu đếm hình thức đặc biệt semaphore, nghĩa là, có nguồn tài nguyên khởi tạo để sử dụng, FreeRTOS hai cung cấp hàm API, RTX, uCOS-II III cung cấp chức semaphore thiết lập giá trị ban đầu khác thư nhị phân đạt cách riêng biệt semaphore đếm Cột Tất nhiên, FreeRTOS đạt hiệu tương tự cách sử dụng semaphores đếm Trong thực tế có nhiều cách sử dụng semaphore khác, khó khăn, bạn mở chân trời tất người quan tâm đến việc đọc "Cuốn sách nhỏ Semaphores "của Allen B Downy Chương chủ yếu cho tất người để giải thích tín hiệu đếm 21.1.2 Thực tín hiệu đếm tác vụ FreeRTOS Việc thực semaphores nhiệm vụ đề cập đến việc sử dụng semaphores task để đồng hóa nhiệm vụ chia sẻ tài nguyên Dưới minh họa việc thực phép tính FreeRTOS theo sơ đồ khối sau, để có hiểu biết hình ảnh Điều kiện hoạt động: 1, tạo hai nhiệm vụ Task1 Task2 2, tạo nguồn số liệu semaphore để Quá trình hoạt động mô tả sau: (1) Task Task1 gọi hàm xSemaphoreTake để lấy tài nguyên semaphore Nếu semaphore không chiếm nhiệm vụ task2 , Task1 trực tiếp thu tài nguyên Nếu semaphore chiếm Task2 , tác vụ Task1 chuyển từ trạng thái chạy sang trạng thái chặn, chờ đợi nguồn lực có sẵn Khi tài nguyên thu thập sử dụng, tài nguyên giải phóng chức xSemaphoreGive (2) Nhiệm vụ Task2 hoạt động gọi hàm xSemaphoreTake có nguồn tài nguyên semaphore, semaphore khơng phải nhiệm vụ task1 chiếm đóng, Task2 nhận nguồn lực trực tiếp Nếu semaphore task1 chiếm đóng, nhiệm vụ Task2Sẽ điều hành nhà nước đến trạng thái bị chặn, chờ đợi sẵn có tài nguyên Khi tài nguyên thu thập sử dụng, tài nguyên giải phóng chức xSemaphoreGive Trên nhiệm vụ FreeRTOS đơn giản việc sử dụng đếm số lượng semaphores 21.1.3 Chế độ gián đoạn FreeRTOS Thực phép thuật Semaphores Chế độ gián đoạn FreeRTOS Semaphores thực cách sử dụng semaphores chức ngắt nh FreeRTOS Semaphore gián đoạn chế độ chủ yếu sử dụng để đạt đồng hóa cơng việc, để giải thích kiện cờ flag nhóm ngắt theo cách Dưới vượt qua sơ đồ khối sau để minh họa việc thực semaphore gián đo để có hiểu biết hình ảnh Điều kiện hoạt động: 1, tạo nhiệm vụ Task1 cổng nối tiếp để nhận ngắt 2, giá trị ban đầu semaphore , cổng nối tiếp gián đoạn gọi hàm xSemaphoreGiveFromISR nhả semaphore, nhiệm vụ task1 gọi hàm xSemaphoreTake thu nguồn lực semaphore Hoạt động mô tả sau: (1) nhiệm vụ task1 chức hoạt động gọi xSemaphoreTake , giá trị semaphore ban đầu , khơng có tín hiệu số tiền có sẵn nguồn lực, nhiệm vụ task1 vào tình trạng chặn lại trạng thái hoạt động (2) task1 trường hợp tắc nghẽn, nhận liệu nối tiếp vào dịch vụ thường xuyên cổng ngắt nối tiếp, gián đoạn dịch vụ gọi thường xuyên chức nối tiếp xSemaphoreGiveFromISR giải phóng tài nguyên semaphore, giá trị semaphore 1, semaphore đếm 1, nhiệm vụ task1 từ trạng thái chặn vào trạng thái sẵn sàng, tác động scheduler từ trạng thái sẵn sàng vào tình trạng hoạt động, nhiệm vụ task1 lấy semaphore, giá trị semaphore giảm 1, vào thời điểm giá trị đếm semaphore thành (3) Khi lặp lại lần nữa, nhiệm vụ Task1 gọi hàm xSemaphoreTakeBởi khơng có nguồn lực có sẵn lần vào trạng thái bị chặn, chờ đợi cho cổng nối tiếp để giải phóng tài nguyên semaphore, chu kỳ đáp ứng Trên trình đồng hóa gián đoạn FreeRTOS đơn giản ứng dụng thực tế, chế thông điệp ngắt phải ý đến bốn câu hỏi sau đây: 1, ngắt chức thời gian thực ngắn tốt, để ngăn chặn khác thấp so với ngoại lệ ưu tiên ngắt khơng thể có phản ứng kịp thời 2, ứng dụng thực tế, khuyến khích khơng để thực xử lý tin nhắn ngắt, người dùng gửi tin nhắn thơng báo cho gián đoạn dịch vụ cơng việc thường ngày đó, việc thực nhiệm vụ xử lý tin nhắn, mà hiệu đảm bảo chương trình phục vụ ngắt thời gian thực Nhiệm vụ cần phải đặt thời gian ưu tiên cao, để từ bỏ nhiệm vụ sau chức ngắt thực cách kịp thời 3, dịch vụ ngắt thường xuyên phải gọi cho chức ngắt chức thiết lập semaphore, FromISR dựa chức 4, hệ điều hành để đạt khác biệt ngắt dịch vụ thường xuyên lập trình kim loại trần (1) Nếu FreeRTOS không gọi hàm ngắt làm việc FreeRTOS semaphore API chức năng, lập trình bare-metal (2) Nếu FreeRTOS ngắt chức làm việc gọi FreeRTOS semaphore API chức để thoát khỏi thời gian để phát xem có nhiệm vụ ưu tiên cao sẵn sàng, có sẵn sàng, nhu cầu công việc chuyển đổi sau khỏi ngắt, kim loại trần Lập trình chút khác biệt, xem 21.4thường xuyên thực nghiệm Phần mô tả (chế độ ngắt): (3) việc bổ sung khuyến khích mạnh mẽ CortexM3 lõi STM32F103 Cortex-M4 lõi STM32F407 CAO , F429 NVIC gói ưu tiên thiết lập để 4, cụ thể là: NVIC_PriorityGroupConfig (NVIC_PriorityGroup_4); Quản lý ưu tiên gián đoạn thuận tiện (4) Để người dùng FreeRTOS để thiết lập gói ưu tiên trước đa nhiệm trên, thiết lập nhớ sửa đổi 21,2 chức đếm semaphore API sử dụng chức sau 18 tuổi thực FreeRTOS Cột (bao gồm Cột đếm, mutexes semaphores nhị phân tín hiệu): ( 1) xSemaphoreCreateBinary () (2) xSemaphoreCreateBinaryStatic () vSemaphoreCreateBinary ((3) ) ( 4) xSemaphoreCreateCounting () ( 5) xSemaphoreCreateCountingStatic () (6) xSemaphoreCreateMutex () (7) xSemaphoreCreateMutexStatic () ( 8) xSem'CreateRecursiveMutex () (9) xSem'CreateRecursiveMutexStatic () (10) vSemaphoreDelete () ( 11) xSemaphoreGetMutexHolder () (12 được) uxSemaphoreGetCount () (13 là) xSemaphoreTake () (14) xSemaphoreTakeFromISR () (15) xSemaphoreTakeRecursive () (16) xSemaphoreGive () (17) xSemaphoreGiveRecursive () (18) xSemaphoreGiveFromISR () giải thích việc sử dụng chức 18 nhìn thấy FreeRTOS hướng dẫn sử dụng trực tuyến: Ở tập trung vào để nói sau bốn chức năng: (1) xSemaphoreCreateCounting () (2) xSemaphoreGive () (3) xSemaphoreGiveFromISR () (4) xSemaphoreTake () ví dụ chương hỗ trợ việc sử dụng bốn chức 21.2.1 chức xSemaphoreCreateCounting Prototype: chép mã SemaphoreHandle_t xSemaphoreCreateCounting (UBaseType_t uxMaxCount, / * giá trị đếm tối đa hỗ trợ * / UBaseType_t uxInitialCount); / * ban đầu đếm * / Chức Mô tả: Chức để tạo xSemaphoreCreateCounting Cột đếm (1) Các tham số thiết lập để giá trị đếm hỗ trợ counting semaphore tối đa (2) Thông số thứ hai đặt giá trị ban đầu tín hiệu đếm (3) giá trị trả về, bạn tạo lợi nhuận thành công tay cầm vào hàng đợi tin nhắn, thiếu tập tin FreeRTOSConfig.h kích thước heap, bạn cung cấp không gian cần thiết cho hàng đợi thông điệp trả NULL Sử dụng chức để ý đến câu hỏi sau: Chức chức sở xQueueCreateCountingSemaphore thực hiện: #definexSemaphoreCreateCounting (uxMaxCount, uxInitialCount) \ xQueueCreateCountingSemaphore ((uxMaxCount), (uxInitialCount)) Chức thực dựa hàng đợi thông điệp xQueueCreateCountingSemaphore chức xQueueGenericCreate đạt Để sử dụng chức FreeRTOSConfig.h định nghĩa vĩ mơ tập thao tác: #defineconfigUSE_COUNTING_SEMAPHORES Ứng dụng Ví dụ: Sao chép Mã tĩnh SemaphoreHandle_t xSemaphore = NULL; /* ******************************************************** ************************************************** ************************************** * Chức Tên: AppObjCreate * Chức Mô tả: Tạo Truyền thông Nhiệm vụ Cơ chế * Tham số: Khơng có * Giá trị trả về: Khơng có ************************************* ************************************************** ********************************************************* */ static void AppObjCreate (void) { / * khởi tạo có nguồn tài nguyên có sẵn, nguồn lực có 0, sau đếm semaphores nhị phân chức tương đương Semaphore * / = XSemaphoreCreateCounting xSemaphore (1, 0.); IF (xSemaphore == NULL) { / * không tạo thành công, người dùng tạo xử lý thất bại chế bổ sung * / } } 21.2.2 chức xSemaphoreGive Prototype: chép mã xSemaphoreGive (SemaphoreHandle_t xSemaphore); / * Semaphore xử lý * / Chức Mô tả: Chức xSemaphoreGive nhiệm vụ cho phát hành mã semaphore (1) Tham số xử lý semaphore (2) giá trị trả về, semaphore phát hành thành công pdTRUE Đổi lại, hàng đợi thơng điệp khác pdFALSE, semaphore đếm thực dựa hàng đợi thông điệp, lý cho thất bại trả lại đầy Sử dụng chức để lưu ý điều sau: Chức dựa chức hàng đợi thông điệp xQueueGenericSend thực hiện: #define xSemaphoreGive (xSemaphore) \ xQueueGenericSend ((QueueHandle_t) (xSemaphore), NULL, semGIVE_BLOCK_TIME, \ queueSEND_TO_BACK) Chức sử dụng gọi mã cơng việc, khơng thể gọi thói quen gián đoạn dịch vụ, dịch vụ thường xuyên ngắt sử dụng xSemaphoreGiveFromISR Trước sử dụng chức này, đảm bảo tạo semaphore với hàm xSemaphoreCreateBinary (), xSemaphoreCreateMutex (), xSemaphoreCreateCounting () Chức không hỗ trợ semaphores tạo cách sử dụng xSemaphoreCreateRecursiveMutex () Sử dụng Ví dụ: Sao chép Mã tĩnh SemaphoreHandle_t xSemaphore = NULL; /* ************************************* ************************************************** ****************** * Chức Tên: vTaskTaskUserIF * Chức Mô tả: Giao diện xử lý tin nhắn * Thông số: pvParameters tham số truyền trình tạo nhiệm vụ * Giá trị trả về: Khơng có * Ưu tiên: (giá trị nhỏ thấp độ ưu tiên, đối nghịch uCOS) *********** ************************************************** ************************************************ */ static void vTaskTaskUserIF ( void * pvParameters) { ucKeyCode uint8_t; uint8_t pcWriteBuffer [500]; (1) { ucKeyCode bsp_GetKey = (); IF (= ucKeyCode KEY_NONE!) { Switch (ucKeyCode) { / * K2 phím nhấn để gửi tín hiệu đồng trực tiếp giao nhiệm vụ * vTaskMsgPro / Trường hợp KEY_DOWN_K2 : printf ( "key K2 nhấn, tín hiệu đồng hóa gửi trực tiếp đến nhiệm vụ vTaskMsgPro \ R & lt \ n-"); xSemaphoreGive (xSemaphore); / * không xử lý phím * / } } } } default: BREAK; vTaskDelay (20 là); 21.2.3 chức xSemaphoreGiveFromISR Prototype: Sao chép mã xSemaphoreGiveFromISR ( SemaphoreHandle_t xSemaphore, / * semaphore xử lý * / Signed BaseType_t pxHigherPriorityTaskWoken * / * cho dù nhiệm vụ ưu tiên cao để đánh thức nhà nước tiết kiệm * / ) Chức Mô tả: chức sử dụng để làm gián đoạn dịch vụ xSemaphoreGiveFromISR Semaphore phát hành chương trình (1) Tham số xử lý semaphore (2) Tham số thứ hai sử dụng để tiết kiệm cho dù có nhiệm vụ ưu tiên cao sẵn sàng Nếu chức kết thúc, giá trị tham số pdTRUE, minh họa cho nhiệm vụ ưu tiên hàng đầu thực hiện, khơng khơng (3) giá trị trả về, semaphore phát hành thành công pdTRUE trở lại, không errQUEUE_FULL Sử dụng chức để ý đến câu hỏi sau: Chức dựa thông báo hàng đợi chức xQueueGiveFromISR thực hiện: #define xSemaphoreGiveFromISR (xSemaphore, pxHigherPriorityTaskWoken) \ xQueueGiveFromISR ((QueueHandle_t) (xSemaphore), (pxHigherPriorityTaskWoken)) Chức sử dụng để ngắt gọi dịch vụ thường lệ, khơng thể gọi hàm mã nhiệm vụ, mã công việc sử dụng xSemaphoreGive Trước sử dụng chức này, đảm bảo tạo semaphore với hàm xSemaphoreCreateBinary () xSemaphoreCreateCounting () Chức không hỗ trợ semaphores tạo với xSemaphoreCreateMutex () Sử dụng Ví dụ: Sao chép Mã tĩnh SemaphoreHandle_t xSemaphore = NULL; /* ************************************* ************************************************** ****************** * Chức Tên: TIM2_IRQHandler * Chức Mô tả: Timer ngắt * Thơng số: Khơng có * Giá trị trả về: Khơng có **************************************** ************************************************** *************** */ tĩnh void TIM2_IRQHandler (void) { XHigherPriorityTaskWoken = pdFALSE BaseType_t; / * xử lý thông báo ngắt bỏ qua * / / * truyền tín hiệu đồng hóa * / xSemaphoreGiveFromISR (xSemaphore, & xHigherPriorityTaskWoken); sau / * Nếu xHigherPriorityTaskWoken = pdTRUE, sau khỏi ngắt để cắt nhiệm vụ ưu tiên cao thực * / portYIELD_FROM_ISR (xHigherPriorityTaskWoken); } [Dữ liệu] lần lượt: Chương 22 Chuỗi nhị phân FreeRTOS Phần giải thích chế đồng chia sẻ tài nguyên nhiệm vụ FreeRTOS, semaphore nhị phân Nhị phân semaphore hình thức đặc biệt đếm semaphore, có nghĩa nguồn chia sẻ (Lưu ý: kiến thức mô tả phần trước phần vào đầu đếm semaphores tương tự, Mục đích để tạo điều kiện cho người sử dụng để xem) FreeRTOS hai giá trị nguồn gốc việc thực semaphore dựa thực hàng đợi thơng điệp Chương hướng dẫn với ví dụ hỗ trợ cốt lõi STM32F103 Cortex-M3 STM32F407 Cortex-M4 lõi F429 22,1 semaphore 22,2 nhị phân semaphore hàm API 22,3 nghiệm thường xuyên Mô tả (inter-nhiệm vụ thông tin liên lạc ) 22,4 nghiệm Mô tả thường xuyên (thơng tin liên lạc bị gián đoạn) 22,5 tóm tắt 22,1 semaphore khái niệm tác dụng 22.1.1 semaphore semaphore (semaphore) EdgserDijkstra phát minh vào năm 1960 Mục đích ban đầu việc sử dụng semaphores thiết lập cờ cho tài nguyên chia sẻ cho biết tài nguyên chia sẻ sử dụng Bằng cách này, nhiệm vụ truy cập tài nguyên chia sẻ, trước tiên bạn truy vấn cờ, nguồn lực chiếm tình hình, sau xác định hành vi Các ứng dụng thực tế, vai trò semaphores làm để phản ánh nó? Ví dụ, có phòng máy tính cho 30 người, tạo giá trị ban đầu semaphore 30, đại diện cho 30 nguồn lực sẵn có, khơng hiểu người bắt đầu tín hiệu đại diện cho số lượng giá trị ban đầu? Vâng, lượng semaphore lượng tài ngun dùng chung Bên cạnh đó, chúng tơi yêu cầu sinh viên sử dụng máy tính, người có sinh viên sử dụng máy tính, giá trị semaphore giảm máy tính 30 chiếm đóng, giá trị semaphore vào lúc Nếu có số sinh viên thời điểm khơng có máy tính sử dụng, sau sinh viên phải đợi bạn lớp Có bạn học lớp để lại, sau giá trị semaphore cộng thêm 1, hai cộng 2, vân vân Chỉ cần khơng sử dụng máy tính thời điểm sinh viên có máy tính bạn sử dụng, vài bạn lớp, Cột cất cánh số ít, khơng có máy tính sử dụng lần nữa, trình sử dụng semaphore để quản lý trình chia sẻ tài nguyên Thường sử dụng semaphore để đạt hai chức sau đây: 1, hai nhiệm vụ gián đoạn đồng chức năng, nhiệm vụ chương trước giải thích nhóm kiện cờ tương tự Trong thực tế, tài nguyên chia sẻ cho thời gian 2, quản lý nhiều tài ngun chia sẻ, phòng máy ví dụ trích dẫn Đối với hai chức này, tương ứng, cung cấp FreeRTOS semaphores nhị phân Cột đếm, số lượng tín hiệu nhị phân hiểu đếm hình thức đặc biệt semaphore, nghĩa là, có nguồn tài nguyên khởi tạo để sử dụng, FreeRTOS hai cung cấp API chức năng, thứ tương tự RTX , uCOS-II III cung cấp chức semaphore thiết lập giá trị ban đầu khác thư nhị phân đạt cách riêng biệt semaphore đếm Cột Tất nhiên, FreeRTOSHiệu tương tự đạt cách sử dụng số lượng tín hiệu đếm Ngồi ra, gọi semaphore nhị phân? Bởi nguồn semaphore mua, giá trị semaphore 0, tài nguyên semaphore giải phóng, giá trị semaphore 1, semaphore với gọi semaphore nhị phân Trong thực tế, có nhiều semaphores sử dụng khác, khó khăn, bạn mở rộng nhiều lĩnh vực tầm nhìn, sinh viên có quan tâm đọc " The Little Book Of Semaphores " Allen B Downy Chương chủ yếu dành cho bạn để giải thích chức đồng nhị phân semaphore tin nhắn, loại trừ lẫn semaphore nhị phân chương làm độc quyền giải thích semaphore mutex 22.1.2 FreeRTOS tác vụ semaphore nhị phân đạt thực semaphore tác vụ semaphore thực sử dụng tác vụ đồng chia sẻ tài nguyên nhiệm vụ chức khác Dưới minh họa việc thực nhị phân FreeRTOS nhị phân sơ đồ khối sau đây, để có hiểu biết hình ảnh Điều kiện hoạt động: 1, tạo hai nhiệm vụ Task1 Task2 2, tạo semaphore mặc định giá trị ban đầu nhị phân , có nghĩa là, khơng có nguồn lực sẵn có Hoạt động mô tả sau: (1) nhiệm vụ task1 hoạt động gọi hàm xSemaphoreTake có nguồn lực semaphore, kể từ tín hiệu nhị phân để tạo giá trị ban đầu , semaphore khơng có nhiệm vụ task1 trạng thái chạy sang trạng thái bị chặn, chờ đợi Tài nguyên có sẵn Trong hoạt động, nhiệm vụ Task2 chức xSemaphoreGive nhả semaphore, nhiệm vụ task1 từ trạng thái chặn vào trạng thái sẵn sàng, tác động scheduler từ trạng thái sẵn sàng vào tình trạng hoạt động Trên nhiệm vụ FreeRTOS đơn giản việc sử dụng semaphores nhị phân ... configMINIMAL_STACK_SIZE ((unsigned ngắn) 128) #define configTOTAL_HEAP_SIZE ((size_t) ( 17 * 1024 )) #define configMAX_TASK_NAME_LEN (16) #define configUSE_TRACE_FACILITY #define configUSE_16_BIT_TICKS... #define configTOTAL_HEAP_SIZE ((size_t) (30 * 1024)) #define configMAX_TASK_NAME_LEN (16) #define configUSE_TRACE_FACILITY #define configUSE_16_BIT_TICKS #define configIDLE_SHOULD_YIELD / * Định... configUSE_PREEMPTION #define configUSE_IDLE_HOOK configUSE_TICK_HOOK #define #define configCPU_CLOCK_HZ ((unsigned Long) 72000000) #define configTICK_RATE_HZ ((TickType_t) 1000) configMAX_PRIORITIES

Ngày đăng: 26/02/2018, 20:38

TỪ KHÓA LIÊN QUAN

w