Lâu không viết bài, muốn góp bài viết có ích cho box anh bqviet. Mặc dù tôi biết có rất nhiều người dùng Linux để lập trình AVR nhưng k phải bạn nào cũng biết, người biết thì k có time để viết mà thôi. AVR được cộng đồng Linux hỗ trợ khá nhiều, công cụ rất đầy đủ chẳng thiếu thứ gì cả.
Luồng này ghi lại nhật kí học AVR trên Linux của tôi. Trước kia chưa dùng AVR cảm thấy ngại động vào, nhưng khi đã dùng tới tôi bị chinh phục luôn Cảm giác đầu tiên là: AVR chân cẳng sắp xếp khoa học hơn thằng PIC rất nhiều. Cái thứ 2, tôi rất thích là các công cụ như trình biên dịch, ... đều là miễn phí, và hay nhất ở chỗ là nó hỗ trợ Linux khá tốt, thằng PIC thì không có cửa rồi.
1. Trình biên dịch
Để bắt đầu với AVR thì cần tìm hiểu các trình biên dịch có thể dùng. Thông tin đầy đủ và chi tiết nhất là đọc tại đây , khỏi cần dịch lại dài dòng làm gì cả. Thêm nữa là trang này giải thích cực kì rõ, hãy chú ý đọc về GCC và GNU Binutils
Nên nhớ là trên AVR nó không phải chỉ dùng mỗi 1 trình biên dịch, quá trình dịch của nó bao gồm rất nhiều công đoạn nhỏ, như avr-gcc chỉ dịch ra assembly, còn công việc chuyển sang .hex, ... lại do thằng khác làm đó
Điều quan trọng lúc này là hãy dành thời gian đọc hết chỗ User manual của AVR Libc đã. Bạn sẽ thấy khá nhiều điều thú vị.
Tóm lại cuối cùng là, kiểu gì cũng phải cài đầy đủ các gói sau: avr-libc, binutils-avr, gcc-avr, avrdude
Trên Ubuntu thì gõ lệnh:
Trên ArchLinux (cái mà tôi đang dùng) thì gõ lệnh:
2. IDE
Về IDE, tùy theo thói quen, có thể dùng IDE hoặc không. Nếu không dùng IDE thì phải tự viết makefile hoặc sửa từ makefile mẫu tùy vào từng project. Nhược điểm của phương pháp này là hơi tốn thời gian, vì cái nào cũng phải viết makefile cả. Các công cụ tự sinh makefile như CMake dùng rất phức tạp và không hiệu quả trong trường hợp này. Nên tôi khuyên các bạn dùng Eclipse với AVR Plugin.
Trước hết download phiên bản Eclipse mới nhất (Bản Eclipse CDT), sau đó chọn install new plugin với đường dẫn là: http://avr-eclipse.sourceforge.net/updatesite/
Thông tin thêm về cách cấu hình với Eclipse xem tại trang chủ
3. Thư viện cho AVR
Bản thân khi cài đặt xong avr-libc thì chỉ có các header định nghĩa chân cẳng và vài file định kiểu ở trong thư mục /usr/avr/include và /usr/avr/lib nên túm lại là làm với module nào thì cũng phải viết lại cả.
Cộng đồng dùng AVR có thư viện Procyon AVRlib viết bởi Pascal Stang, giảng viên của trường Stanford viết từ lâu rồi, nhưng vẫn được nhiều người sử dụng, thể hiện ở sự logic của thư viện. Thư viện được phổ biến dưới giấy phép GPL.
Thông tin chi tiết về thư viện tại đây
Tuy nhiên, có thể hơi khó download vì một vài lần k down được, nên tôi đã upload toàn bộ file lên host riêng của tôi tại: http://pptutorials.com/doc/avrlib/
4. Nạp cho chip
Có thể dùng AVRDude để nạp cho chip bằng các mạch nạp thông dụng ngon lành. Định nghĩa các mạch hỗ trợ bởi avrdude ở trong /etc/avrdude.conf
Tuy nhiên, khi nạp có thể sẽ báo về k có quyền truy xuất IO gì đó, thì hãy dùng quyền của superuser để nạp đã rồi tính tiếp. ở đây dùng sudo.
Cách khắc phục nhược điểm trên là tạo rule cho udev được hướng dẫn tại đây ở phần "Operation not permitted" error đó.
Minh họa dùng Eclipse IDE để biên dịch AVR:
Luồng này ghi lại nhật kí học AVR trên Linux của tôi. Trước kia chưa dùng AVR cảm thấy ngại động vào, nhưng khi đã dùng tới tôi bị chinh phục luôn Cảm giác đầu tiên là: AVR chân cẳng sắp xếp khoa học hơn thằng PIC rất nhiều. Cái thứ 2, tôi rất thích là các công cụ như trình biên dịch, ... đều là miễn phí, và hay nhất ở chỗ là nó hỗ trợ Linux khá tốt, thằng PIC thì không có cửa rồi.
1. Trình biên dịch
Để bắt đầu với AVR thì cần tìm hiểu các trình biên dịch có thể dùng. Thông tin đầy đủ và chi tiết nhất là đọc tại đây , khỏi cần dịch lại dài dòng làm gì cả. Thêm nữa là trang này giải thích cực kì rõ, hãy chú ý đọc về GCC và GNU Binutils
Nên nhớ là trên AVR nó không phải chỉ dùng mỗi 1 trình biên dịch, quá trình dịch của nó bao gồm rất nhiều công đoạn nhỏ, như avr-gcc chỉ dịch ra assembly, còn công việc chuyển sang .hex, ... lại do thằng khác làm đó
Điều quan trọng lúc này là hãy dành thời gian đọc hết chỗ User manual của AVR Libc đã. Bạn sẽ thấy khá nhiều điều thú vị.
Tóm lại cuối cùng là, kiểu gì cũng phải cài đầy đủ các gói sau: avr-libc, binutils-avr, gcc-avr, avrdude
Trên Ubuntu thì gõ lệnh:
Code:
sudo apt-get install avr-libc binutils-avr gcc-avr avrdude
Trên ArchLinux (cái mà tôi đang dùng) thì gõ lệnh:
Code:
sudo pacman -S avr-libc binutils-avr gcc-avr avrdude
Về IDE, tùy theo thói quen, có thể dùng IDE hoặc không. Nếu không dùng IDE thì phải tự viết makefile hoặc sửa từ makefile mẫu tùy vào từng project. Nhược điểm của phương pháp này là hơi tốn thời gian, vì cái nào cũng phải viết makefile cả. Các công cụ tự sinh makefile như CMake dùng rất phức tạp và không hiệu quả trong trường hợp này. Nên tôi khuyên các bạn dùng Eclipse với AVR Plugin.
Trước hết download phiên bản Eclipse mới nhất (Bản Eclipse CDT), sau đó chọn install new plugin với đường dẫn là: http://avr-eclipse.sourceforge.net/updatesite/
Thông tin thêm về cách cấu hình với Eclipse xem tại trang chủ
3. Thư viện cho AVR
Bản thân khi cài đặt xong avr-libc thì chỉ có các header định nghĩa chân cẳng và vài file định kiểu ở trong thư mục /usr/avr/include và /usr/avr/lib nên túm lại là làm với module nào thì cũng phải viết lại cả.
Cộng đồng dùng AVR có thư viện Procyon AVRlib viết bởi Pascal Stang, giảng viên của trường Stanford viết từ lâu rồi, nhưng vẫn được nhiều người sử dụng, thể hiện ở sự logic của thư viện. Thư viện được phổ biến dưới giấy phép GPL.
Thông tin chi tiết về thư viện tại đây
Tuy nhiên, có thể hơi khó download vì một vài lần k down được, nên tôi đã upload toàn bộ file lên host riêng của tôi tại: http://pptutorials.com/doc/avrlib/
4. Nạp cho chip
Có thể dùng AVRDude để nạp cho chip bằng các mạch nạp thông dụng ngon lành. Định nghĩa các mạch hỗ trợ bởi avrdude ở trong /etc/avrdude.conf
Tuy nhiên, khi nạp có thể sẽ báo về k có quyền truy xuất IO gì đó, thì hãy dùng quyền của superuser để nạp đã rồi tính tiếp. ở đây dùng sudo.
Cách khắc phục nhược điểm trên là tạo rule cho udev được hướng dẫn tại đây ở phần "Operation not permitted" error đó.
Minh họa dùng Eclipse IDE để biên dịch AVR:
Comment