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.
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"
Sửa lại linker flags từ "LDFLAGS = -Wl,-Map=$(TARGET).map,--cref"
thành "LDFLAGS = -Wl,-Map=atmega128.map,--cref"
Xong. Nhớ lưu lại nhé.
Bước 2: Vì Atmega32 chỉ có 1 USART mà con Atmega128 lại có tận 2 USART nên các thanh ghi chức năng cũng có thay đổi. Chúng ta sẽ sửa chúng ở trong file "serial.c".
(Chú ý: dùng Ctrl + H để tìm và thay thế cho nhanh nhé )
Tìm tất cả UCSRB thay bằng UCSR0B.
UCSRC thay bằng UCSR0C.
UBRRL thay bằng UBRR0L.
UBRRH thay bằng UBRR0H.
SIG_UART_RECV thay bằng SIG_UART0_RECV.
SIG_UART_DATA thay bằng SIG_UART0_DATA.
UDR thay bằng UDR0.
Xong. Lưu lại và biên dịch thử coi.
À. Cái trên này là mình chuyển về UART0 của con Atmega128 đó, nếu ai không thích chuyển sang UART1 cũng không sao cả.
Chương trình demo nháy led với Atmega128 cho những ai làm theo những bước trên mà vẫn không được nhé. Ex Atmega128
Cảm ơn bạn rất nhiều! Bài viết của bạn rất chi tiết và dễ hiểu cho những bạn bắt đầu tìm hiểu về FreeRTOS như mình. :)
Trả lờiXóa