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

Bài đăng

Hiển thị các bài đăng có nhãn FreeRTOS

Dùng FreeRTOS cho MCU khác không có trong Demo. (Ex Atmega128)

Bài trước: Cách biên dịch 1 chương trình đơn giản từ ví dụ của FreeRTOS Atmega 32 chỉ có 32 Kbytes Flash, mà FreeRTOS viết 2 cái Task nháy led thôi mà cũng đã ngốn hết mất 31 Kbytes rồi, còn đâu bộ nhớ mà viết nữa chứ, vậy nên nhu cầu biên dịch nó cho 1 MCU có Flash lớn hơn là cần thiết. Mình đang hướng đến dùng với con Atmega128 với 128 Kbytes tha hồ mà code. Nhưng chính cái này đã làm mình đau đầu mấy hôm nay, chương trình mình viết lại cho Atmega128 biên dịch đúng rồi, không có lỗi lầm gì cả vậy mà khi nạp vô chip lại không chạy được :(( Và hôm nay vào 1 chiều đầy gió mình đã phát hiện ra được vấn đề nó nằm ở đâu < mừng kinh khủng khiếp > nên viết luôn bài này kẻo lại quên thì khổ. Để biên dịch cho Atmega 128 thì phải làm những  bước sau: Bước 1: Vào file makefile ở trong tệp demo, ta sẽ sửa file này đầu tiên.                Sửa lại MCU sử dụng từ "MCU = atmega323" thành "MCU =atmega128"         ...

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ỉ t...

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

Chapter 4: Resource Management ( Quản lý tài nguyên).

Bài trước: Chapter 3: Interrupt management (quản lý ngắt). Qua 3 chương 1,2,3 thì mình cũng gần như đã nắm được cơ bản về hoạt động của FreeRTOS, thấy nó cũng gần giống như 1 OS thực chạy trên PC như Ubuntu, Windown... tất nhiên là cái này đơn giản hơn nhiều rồi. Và có 1 tin cực vui là bây giờ mình đã có thể built thành công 1 chương trình FreeRTOS thực tế nhỏ nhỏ rồi :D dù nó chạy chưa được chuẩn cho lắm nhưng mà cũng là 1 thành công sau mấy tháng cố gắng nghiên cứu. hehe Tiếp theo là chương 4 về quản lý tài nguyên, đây là 1 chương cũng khá quan trọng, những kiến thức của chương này sẽ đảm bảo cho 1 chương trình không chỉ chạy được mà phải chạy đúng và ổn định theo thời gian. Trong chương này chúng ta sẽ trả lời các câu hỏi sau:        + 1 critial section là gì? (kiểu như là 1 khu vực được bảo vệ ấy)        + Loại trừ lẫn nhau là gì?        + Trạng thái suspend (lơ lửng) là như thế nào?        + Mut...

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

Chapter 2: Queue Management (Quản lý hàng đợi).

Bài trước: Chap 1: Task management (Quản lý Task). Ở chap này chúng ta sẽ học về hàng đợi, cách khởi tạo và thức hoạt động của nó. Hàng đợi là nơi lưu trữ dữ liệu của các Task, không gian của hàng đợi có giới hạn và do người dùng định nghĩa. Về cơ bản thì hàng đợi hoạt động theo nguyên tắc FIFO (vào trước thì ra trước), tất nhiên bình thường là thế nhưng trong những trường hợp đặc biệt ta vấn có thể cho nó vào sau mà ra trước. 1 hàng đợi có thể dùng để phục vụ nhiều Task khác nhau. Khi 1 task chờ để ghi dữ liệu vào hàng đợi hoặc là đọc dữ liệu ra từ hàng đợi thì nó sẽ bị rơi vào trạng thái Block, nó sẽ thoát khỏi trạng thái này khi công việc của nó thành công hoặc là Time Out (Thời gian đợi mà mình cho phép kết thúc). 1. Khởi tạo 1 hàng đợi:     xQueueHandle xQueueCreate ( unsigned portBASE_TYPE uxQueueLength,                                               ...

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

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

Bài trước: Bắt đầu với FreeRTOS (Bài 1) Sau khi kết thúc bài đầu tiên ta đã có cái nhìn cơ bản về hệ điều hành FreeRTOS và các công cụ để học rồi, bây giờ ta sẽ bắt tay vào nghiên cứu code. NOTE: Nhớ phải copy cả folde source-code-for-standard-edition-examples vào C:\WATCOM              và đổi tên nó thành 1 cái tên đơn giản như Source chẳng hạn . Vào folde đó, vào mục examples\example001 đây là code của ví dụ của example 1 trong sách. Chạy rtosdemo.wpj ta được: Ta thấy có 1 cây chứa các files mà dùng trong chương trình này. Khi cần muốn xem hoặc sửa đổi ở file nào thì ta chỉ cần click vào đó ok. Để built code ta click vào nút màu đỏ mà mình đánh dấu. Nếu không có lỗi gì thì khi quay lại thư mục ta sẽ thấy có nhiều file được sinh ra trong đó có file rtosdemo.exe chính là cái mà ta sẽ chạy. Xong! tiếp đến là bật DOSBOX lên. và gõ vào các dòng lệnh: Z:\>  MOUNT c c:\WATCOM\Source\examples\example001 Câu lệnh này để trỏ đến nơ...

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