Chuyển đến nội dung chính

Chap 5: Memory Management (Quản lý bộ nhớ)

Bài trước: Chapter 4: Resource Management ( Quản lý tài nguyên).
Phù! Vậy là đi đến chương cuối cùng về các kiến thức của hệ điều hành FreRTOS này rồi :D
Phần này nói về phần quản lý bộ nhớ RAM của vi điều khiển. Với hàm C chuẩn thì ta có 2 hàm là malloc() và free() nhưng mà khi sử dụng những hàm này sẽ nảy sinh 1 số vấn đề như:
1. Không phù hợp với các hệ thống nhúng nhỏ.
2. Quá trình thực thi cần 1 không gian tính toán lớn.
3. Không đảm bảo an toàn.
4. Không phải là cấp phát động.
5. Có thể gây nên hiện tượng phân mảnh bộ nhớ.
.........
Do đó nên FreeRTOS sử dụng 2 hàm thay thế là pvPortMalloc(); và vPortFree();
Có ba file định nghĩa sẵn các hàm này là heap_1.c, heap_2.c và heap_3.c nằm ở trong chỉ dẫn: FreeRTOS\Source\Portable\MemMang.

I. Heap_1.c
   Là 1 version cơ bản trong quản lý bộ nhớ, trong này chỉ có hàm pvPortMalloc() mà không có  hàm vPortFree tức là chỉ có cấp phát bộ nhớ mà không thể giải phóng sau khi đã cấp phát.
Cấu hình độ lớn của RAM bằng hằng số configTOTAL_HEAP_SIZE ở file FreeRTOSConfg.c
Khi 1 Task được yêu cầu thì sẽ được cấp khối điều khiển + bộ nhớ RAM đi kèm.
cụ thể được trình bày ở hình:


II. Heap_2.c
    Là Version có giải thuật tốt nhất trong quản lý bộ nhớ,  nó cung cấp chức năng xóa RAM sau khi 1 Task được xóa.


III. Heap_3.c
      Là Version mà sử dụng hàm cơ bản malloc() và free() nhưng mà đã được chỉnh sửa để an toàn hơn hàm C chuẩn.

Xong! chương này chỉ cơ bản vậy thôi :))

Bài tiếp: Cách biên dịch 1 chương trình đơn giản từ ví dụ của FreeRTOS

Nhận xét

  1. Chào bạn. Hình như chưa có ai Cmt. Mình cmt vậy.
    Blog rất hay và có ích với những bạn muốn tìm hiểu về RTOS.
    FreeTOS trên tất cả các nền tảng MCU khác nhau. Cảm ơn và chúc học tập tốt @@.

    Trả lờiXóa
  2. Thanks u. Những thứ này mà có thể giúp được mọi người 1 phần nào đấy là mình cũng thấy vui rồi ^^

    Trả lờiXóa
    Trả lời
    1. thank You...tuy nó không được tổng quát và thêm ví dụ như slide tiếng anh nhưng kết hợp 2 bài đọc thì mình dễ hiểu hơn nhiều

      Xóa
  3. hay lắm, cảm ơn ông bạn nhiều

    Trả lờiXóa

Đăng nhận xét

Bài đăng phổ biến từ blog này

Bắt đầu với FreeRTOS (Bài 1)

NOTE: 1 vài tài liệu mình sử dụng trong bài này là mình sưu tầm được, có thể không có bản quyền, nếu tác giả không muốn đăng lên thì mình sẽ xóa. Trước khi tìm hiểu mọi người có thể biên dịch thử 1 chương trình để lấy khí thế tại  đây. FreeRTOS là 1 hệ điều hành nhúng phù hợp cho các ứng dụng có yêu cầu về thời gian thực 1 cách chặt chẽ. Và vì nó miễn phí, nhỏ gọn và có thể nhúng vào các dòng vi điều khiển thông thường như PIC, AVR, MSP430, ARM...nên mình làm hướng dẫn này cho những ai muốn bắt đầu tìm hiểu về FreeRTOS. Trang chủ của nó  http://www.freertos.org/ Đầu tiên là phải tải FreeRTOS về đã: vào  http://sourceforge.net/projects/freertos/files/   Click vào  Download FreeRTOSV7.5.2.exe (9.3 MB) (thời điểm này bản mới nhất là 7.5.2) để tải về. Sau khi tải về bạn click đúp vào file .exe ấy để giải nén. Ta được 1 folder FreeRTOSV7.5.2. Xong Bước 1  Tiếp theo là nên đọc 1 tài liệu để hiểu sơ qua xem RTOS nó là cái gì và nó hoạt động như...

Chapter 3: Interrupt management (quản lý ngắt).

Bài trước: Chapter 2: Queue Management (Quản lý hàng đợi). Nối tiếp chương 2 về quản lý hàng đợi, hôm nay chúng ta sẽ tìm hiểu về quản lý ngắt. Ngắt là 1 thành phần cực kỳ quan trọng trong lập trình nhúng, nếu bạn đã học qua về vi điều khiển thì chắc không phải nói nhiều về cái này làm gì. Còn nếu chưa thì hiểu nôm na Ngắt là 1 sự kiện mà nó luôn được ưu tiên cao nhất, tức là khi sự kiện ngắt xảy ra thì tất cả mọi sự kiên khác đều phải dừng lại để ngắt thực hiện công việc của mình. Nhưng có 1 sự 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 Semaph...

Chap 1: Task management (Quản lý Task).

Bài trước: Bắt đầu với FreeRTOS (Bài 2) 1 tháng rồi bận bịu quá nà. Bài này sẽ tổng hợp lại những thứ cần chú ý ở trong Chap 1 cuốn "Using the freertos real time kernel" Câu 1: Task là gì? và được tạo ra thế nào? Task được hiểu nôm na như là 1 chương trình thực hiện 1 nhiệm vụ nào đó. 1 Task gồm có: tên, chức năng, giá trị ưu tiên, độ sâu stack, task handle (như kiểu cái móc để tác động ấy), biến tác động vào task. Để tạo task thì đầu tiên phải định nghĩa chức năng của nó trước, cấu trúc hàm cơ bản như sau: void ATaskFunction(void *pvParameters) { // Khởi tạo biến ở đây for( ; ; ) { // Chức năng thực hiện ở đây } } Ví dụ: void vTask1(void *pvParameters) {                const char *pcTaskName = "This is Task 1 \r\n";                for ( ; ; ) { vPrintString(pcTaskName); ...