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

Cách biên dịch 1 chương trình đơn giản từ ví dụ của FreeRTOS

Bài trước: Chap 5: Memory Management (Quản lý bộ nhớ)
Bây giờ mình sẽ hướng dẫn cách biên dịch chương trình viết cho Atmega323, cái này đã có sẵn trong ví dụ của FreeRTOS rồi. Mình chỉ hướng dẫn chi tiết lại thôi bởi vì đợt trước vì cái này mà mình phải xoay sở 1 thời gian rất dài :-(
Mình biên dịch chương trình bằng WinAVR với trình biên dịch AvrStudio.
NOTE: Những file mình nói xóa là những file không cần thiết nên mình bảo xóa để có cái nhìn rõ ràng hơn về cấu trúc của Demo này thôi, chứ nếu mà để lại thì cũng không bị lỗi gì đâu.

Bước 1: lấy các file cần thiết.
Mở thư mục FreeRTOS sau khi giải nén, xóa các tệp trừ 2 tệp Demo và Source.
Vào tệp Source, vào tệp portable và xóa hết các tệp trong đó chỉ trừ lại 2 tệp MemMang ( chứa các file quản lý RAM ) và GCC. Vào tệp GCC lại thấy 1 đống tệp nữa, ta lại xóa hết chỉ trừ tệp ATmega323 ( Chứa các file cần thiết để định nghĩa về tool biên dịch).
Thoát ra tệp Source vào tệp Demo, trong này cũng có 1 đống tệp ta lại xóa hết, chỉ trừ 2 tệp là AVR_ATMega323_WinAVR và Common. Vào tệp Common xóa các tệp chỉ trừ lại 2 tệp Minimal và Include. Xong! đó là tất cả những File ta cần.

 Bước 2: vào AvrStudio, tạo 1 project cho Atmega32 dùng AVR-GCC, Bỏ dấu tích khởi tạo các file và thư mục khi tạo Project đâu. Để project này vào tệp FreeRTOS (Cái mà lúc nãy xóa bớt các file bên trong rồi ấy).

Bước 3: Add file Makefile của file demo vào.
Trong màn hình của AvrStudio vào Project chọn Configuration Options, Tick vào Use Extenal Makefile rồi chọn đường dẫn vào file Makefile trong thư mục AVR_ATMega323_WinAVR
Nhấn OK là xong.
Nhấn F7 để biên dịch và xem thành quả :))

Nếu không sai bước nào thì trình biên dịch sẽ báo thành công, bạn vào AVR_ATMega323_WinAVR sẽ thấy 1 file rtosdemo.hex xuất hiện.

Rồi đó, mình gửi kèm 1 chương trình cơ bản dùng để nháy 2 led dùng Atmega 32 đây cho ai gặp rắc rối ở các bước trên:
Demo_Atmega32

Good luck!

Bài tiếp: Dùng FreeRTOS cho MCU khác không có trong Demo. (Ex Atmega128)

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ư...

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); ...

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ằn...