Báo lỗi cant open include file avr io.h codevision

I am trying to use the atmega328p as standalone microchip and program it. I ama using an Arduino Uno as ISP. I have written a simple program to test it however when I try to compile it using

avr-gcc -mmcu=atmega328p -o main.out main.c

I get the error:

main.c:1:20: fatal error: avr/io.h: No such file or directory
compilation terminated.

I am running OpenSUSE Leap 42.3 and i have installed avr-gcc, avr-libc.

My code:


# include                                                                                                                                                                     
int main() {
    DDRB = 1;
    PORTB = 1;
}

Thank you in advance!

VE7JRO

2,56018 gold badges25 silver badges29 bronze badges

asked Feb 16, 2018 at 19:33

7

I’m guessing you started with the toolchain Arduino put on your machine.

Try explicitly including the header files on the include path with the -I switch.

avr-gcc -mmcu=atmega328p -I /path/to/avr/include -o main.out main.c

Just search for the io.h file. It should be somewhere close by to where you found the compiler.

answered Feb 17, 2018 at 11:45

Báo lỗi cant open include file avr io.h codevision

RubberDuckRubberDuck

3321 silver badge9 bronze badges

Bài viết đầu tay của mình trên diễn đàn arduino.vn, mời các bạn đón đọc: Cách xuất file .HEX từ Arduino IDE và mô phỏng Arduino trên phần mềm Proteus.

Mẹo I: Báo lỗi nạp

Trường hợp 1: Báo lỗi "avrdude: stk500_getsync(): not in sync: resp=0x00"

Nguyên nhân: Lỗi này là do bạn chọn Board hoặc Port kết nối không đúng. Có nhiều nguyên nhân dẫn đến lỗi này:

Mẹo: Các bạn mở Manage lên bằng cách chuột phải vào Computer chọn Manage. Tại cửa sổ Computer Management bạn chọn Tab Divice Manage. Nhìn qua phải thì trong phần Ports (COM & LPT) đã có những thông số cần thiết để bạn cài đặt cho Arduino IDE: Arduino Uno (COM5) (nhớ là những thông số này chỉ xuất hiện khi bạn kết nối board Arduino với máy tính thôi nhé). Cách này rất thích hợp khi ta có một board Arduino mới mà không biết nó thuộc loại board gì. Mời bạn xem hình nếu chưa rõ:

Báo lỗi cant open include file avr io.h codevision
hoặc
Báo lỗi cant open include file avr io.h codevision

Báo lỗi cant open include file avr io.h codevision

Sau đó các bạn mở Arduino IDE lên, kiểm tra lại xem đã khớp chưa, nếu chưa khớp thì vào Tools - Board/Port để chỉnh lại cho đúng. Một mẹo nhỏ nữa là các bạn cũng có thể nhìn hàng chữ nhỏ mép dưới của Arduino IDE để xem nhanh thông tin đã thiết lập.

Báo lỗi cant open include file avr io.h codevision

Trường hợp 2: Báo lỗi "avrdude: ser_open(): can't open device "\\.\COM5": The system cannot find the file specified.​"

Báo lỗi cant open include file avr io.h codevision

Nguyên nhân: Lỗi này thường xảy ra khi bạn lập trình nút nhấn. Do quên pinMode nút nhấn là pinMode(nut_nhan, INPUTPULLUP) dẫn đến pin nút nhấn là mức cao mà khi bạn ấn nút nhấn sẽ kéo xuống mass và điều gì xảy ra, bạn biết đấy - ngắn mạch (bạn có thể xem bài viết này để hiểu hơn về lập trình nút nhấn). Cũng tương tự như vậy chỉ cần bạn nối pin 5V với pin GND cũng có thể tạo ra hiện tượng ngắn mạch (để có được hình ảnh trên mình đã phải "hi sinh" chập 5V với GND đấy

Báo lỗi cant open include file avr io.h codevision
- tuy nhiên mình không khuyến khích bạn thử, bạn đọc qua bài viết sẽ rõ). Khi xảy ra hiện tượng ngắn mạch máy tính của bạn sẽ lập tức ngắt kết nối giữa board Arduino và máy tính, dẫn đến bạn không thấy cổng COM5 hồi nãy ở đâu.

Khắc phục: Nhiều bạn theo quán tính sẽ rút cổng USB ra khỏi máy tính, đợi một lúc và gắn lại xem có nhận cổng USB không, tuy nhiên sẽ thất vọng. Bạn khác cao thủ hơn thì sẽ Reset máy. OK tất nhiên là được rồi. Tuy nhiên nếu chẳng may bị 3-4 lần thì bạn sẽ "ức chế" cho mà xem. Có một mẹo nho nhỏ sẽ tiết kiệm rất nhiều thời gian và công sức của bạn khi gặp tình trạng này. Mời bạn đọc mẹo.

Mẹo: Thay vì Reset máy bạn có thể mở cửa sổ Computer Management mà phần trên mình đã nói đến, trong phần Universal Serial Bus controllers bạn tìm đến cái cổng USB nào bị cảnh báo

Báo lỗi cant open include file avr io.h codevision
- có thể bị nhiều cái. Sau đó bạn làm theo các bước như trong hình sau: (Đối với WIN XP, VISTA, WIN8 các bạn cũng tìm và làm tương tự nhé, các hệ điều hành khác như Lux, Ubuntu...thì mình không rõ lắm nhưng mình nghĩ chắc nó cũng tương tự nhau thôi :D)

Báo lỗi cant open include file avr io.h codevision

Báo lỗi cant open include file avr io.h codevision

Báo lỗi cant open include file avr io.h codevision

Sau khi làm xong các bước trên thì chắc chắn cổng USB của bạn sẽ hoạt động trở lại và bạn có thể tiếp tục công việc lập trình của mình.

Mẹo II: Làm thế nào để tạo nhanh một thư viện .h?

Mẹo: Bạn hãy ấn Ctrl + Shift + N. Sau đó nhập tên thư viện vào khung Name for new file sau đó ấn OK. Ví dụ: gõ "test.h" vào khung. Bạn cũng có thể tạo 1 file khác bất kì .c, .cpp chẳng hạn. Bạn xem bài Bài 12: Phát nhạc bằng Arduino với một cái loa hoặc buzzer sẽ thấy được ứng dụng của nó :D

Báo lỗi cant open include file avr io.h codevision

Mẹo III: Add thư viện mà báo lỗi hoài :(

Nguyên nhân: thường là do Arduino không chấp nhận tên thư viện có khoảng trắng " " hoặc kí tự lạ.

Mẹo: Ta chỉ cần sửa lại tên thư viện một chút là được ấy mà :D

Ví dụ trong bài viết Infrared remote control (điều khiển bằng hồng ngoại) với Arduino có đoạn như sau:

Đoạn mã này dùng để đọc tín hiệu từ remote. Các bạn vào link sau để tải thư viện hỗ trợ IR remote nhé: https://github.com/shirriff/Arduino-IRremote/ Sau khi tải thư viện về, bạn mở cửa sổ Arduino, chọn Sketch->Import Library...-> Add Library....sau đó chọn file .zip mà bạn vừa tải về để có thể sử dụng thư viện.

Bạn làm theo y chang luôn nhưng add xong nó sẽ báo lỗi như thế này:

Báo lỗi cant open include file avr io.h codevision

Bây giờ bạn hãy giải nén file .zip đó ra, sau đó ấn F2 để Rename lại tên thư mục vừa giải nén. Bạn hãy thay những dấu "-" thành "_" hoặc bỏ luôn hoặc thay bằng một tên ngắn gọn khác nhưng không chứa khoảng trắng và kí tự lạ. Ví dụ: mình đổi thành: "Arduino_IRremote_master". Rồi! Bây giờ bạn lại chuột phải chọn chức năng nén tập tin lại với file .zip (cái này cũng đòi hỏi bạn phải có chút ít kiến thức về sử dụng máy tính cơ bản đấy - nếu có thắc mắc về phần này thì đừng ngại để lại bình luận phía dưới), tham khảo các bước trong hình bạn sẽ làm được thôi:

Báo lỗi cant open include file avr io.h codevision

Báo lỗi cant open include file avr io.h codevision

Vậy là cơ bản chỉnh sửa xong, giờ thì bạn add file Arduino_IRremote_master.zip này là sẽ không còn báo lỗi nữa :D.

Mẹo IV: Để tiến bộ hơn trong lập trình Arduino?

Mẹo: Bạn nên:

  • Bỏ một chút thời gian mỗi tối để tìm hiểu về ngôn ngữ C cơ bản. Chỉ cần chút kiến thức về C cơ bản là bạn đã có thể lập trình Arduino rồi đấy.
  • Đọc qua Ngôn ngữ lập trình trên Arduino
  • Tích cực ghé thăm arduino.vn để đọc được những bài viết bổ ích, "địa" được những thuật toán, giải thuật hay :D
  • Có điều kiện thì hãy mua một board Arduino thực tế để "vọc" và làm. Nếu không có điều kiện thực hành thực tế thì bạn có thể mô phỏng trên máy tính, thông qua bài viết của mình chắc chắn bạn sẽ làm được: Cách xuất file .HEX từ Arduino IDE và mô phỏng Arduino trên phần mềm Proteus
  • Cùng tham gia viết bài, đăng bài, thảo luận và chia sẻ trên arduino.vn. Share link arduino.vn cho bạn bè cùng biết để arduino.vn quy tụ nhiều PRO hơn, chúng ta sẽ học hỏi được rất nhiều kinh nghiệm quý báu từ PRO.

Mẹo V: Sau một thời gian việc khởi động Arduino bị chậm và những thứ khác cũng chậm luôn?

Cảm ơn bạn hoàng quốc phương đã gửi nội dung hướng dẫn vào Thứ sáu, 14 Tháng 11, 2014 - 17:38

Chào các bạn, sau một thời gian sử dụng chắc nhiều bạn sẽ cảm thấy chương trình arduino IDE của mình chạy chậm hơn rất nhiều so với lúc mới cài đặt. Những biểu hiện của nó như khởi động chậm, load chậm, chạy thử chậm, nạp vào rất chậm, mở cổng serial cũng chậm nốt. Qua tìm hiểu thì cách khắc phục rất đơn giản như sau. Vào link sau: http://k1.arduino.vn/img/2014/11/14/0/861_123450-1415962849-0-rxtxserial.zip và tải về file rxtxSerial.dll . Sau đó bạn copy đè file này vào thư mục gốc cài đặt của arduino IDE. Như vậy là bạn có thể khắc phục được sự chậm chạp của chương trình không rõ nguyên nhân sau một thời gian sử dụng.