我正在尝试从家里开展Arduino项目。但是,当我尝试运行示例代码时,我收到错误:
avr-gcc:找不到命令
这个程序在大学计算机上运行良好。但是,我的Ubuntu虚拟机上根本没有工作。我对此完全陌生。所以,老实说,我不知道出了什么问题。
答案 0 :(得分:4)
avr-gcc:找不到命令
这正是它的含义:avr-gcc
命令无法找到。
avr-gcc
上的搜索会快速显示AVR Libc project:
AVR Libc是一个自由软件项目,其目标是为Atmel AVR微控制器上的GCC提供高质量的C库。
avr-binutils,avr-gcc和avr-libc共同构成了Atmel AVR微控制器自由软件工具链的核心。
自从Arduino uses Atmel CPUs以来,这听起来很有希望。
在搜索字词中添加ubuntu
会找到the gcc-avr
package。在VM上运行sudo apt-get install gcc-avr
应该安装软件包。
答案 1 :(得分:1)
我尝试过的是:
yum install *avr*gcc*
那发现我在centos上找到了其他一些带有通配符的较长软件包。我发布此答案,因为这适用于更多情况和其他情况。
答案 2 :(得分:1)
您可能需要flex,byacc,bison,gcc和libusb-dev:
sudo apt-get install flex byacc bison gcc libusb-dev
和libusb点信息中的libusb,然后在终端中使用以下命令从其根安装目录进行安装:
./configure
make
sudo make install
或
sudo apt-get install libusb-1.0-0
然后下载binutils: http://ftp.gnu.org/gnu/binutils/ 配置它:
./configure --target=avr --program-prefix="avr-"
然后制作并安装它。 然后,从以下位置下载最新版本的GCC: http://gcc.gnu.org/mirrors.html。 尝试安装后出现错误,说我需要gmp,mpfr和mpc,所以我下载了它们 这些网站的顺序如下:
https://www.mpfr.org/mpfr-current/
并使用
安装它们./configure
make
sudo make install
在Ubuntu终端中。
幸运的是,此后,gcc成功安装。 然后,您需要从以下位置安装avr-libc: http://download.savannah.gnu.org/releases/avr-libc/
和avrdude访问物理板: http://download.savannah.gnu.org/releases/avrdude/
使用
./configure --enable-linuxgpio
在avrdude上按以启用通用输入/输出(并在avrdude.conf中设置引脚复位,sck,mosi和味o)。 Avrdude(最后)检查您是否具有libelf,libftdi1,libftdi和libhid
从以下位置下载libelf https://web.archive.org/web/20160430090619/http://www.mr511.de/software/libelf-0.8.3.tar.gz 或
sudo apt-get update -y
sudo apt-get install -y libelf-dev
ftdi(用于ftdi芯片和usb到ft的ft芯片)是可选的,您可以从intra2net获得它,或使用以下命令:
sudo apt-get update -y
sudo apt-get install -y libftdi1-dev
sudo apt-get install -y libftdi-dev
最后是libhid(人机界面设备):
sudo apt-get install libhidapi-dev
由于某种奇怪的原因甚至无法检测到。
您可能不需要执行所有这些步骤。您可以尝试仅安装AVR以达到最低要求,但是为了安全起见,建议您执行其他步骤。
在编译AVR程序时(如果使用IDE的代码,则将Arduino IDE库编译为一个库),则需要使用g ++,而不是gcc。 这是一些使用Arduino编译简单程序的代码和说明:
//After calling it ardcpp.cpp, I compiled this and got it working for Arduino Uno (atmega328p) in Linux Terminal with the following 3 commands:
//avr-g++ ardcpp.cpp -O1 -Os -Wall -DF_CPU=16000000L -mmcu=atmega328p -I/snap/arduino/41/hardware/arduino/avr/cores/arduino -I/snap/arduino/41/hardware/tools/avr/avr/include/ -I/snap/arduino/41/hardware/arduino/avr/variants/circuitplay32u4 -I/usr/include/ -o ardcpp.bin
//avr-objcopy -j .text -j .data -O ihex ardcpp.bin ardcpp.hex
//avrdude -c arduino -P /dev/ttyUSB0 -p m328p -U flash:w:ardcpp.hex
#include <avr/io.h>
#include <util/delay.h>
//#include <Arduino.h>
int main (void) {
DDRB |= _BV(DDB4);//data direction register sets 4th bit as output (pin 12)
//0 thru 7 bits equal pins 8 thru 13, GND, and AREF on Arduino (SDA, and SCL for input from devices such as a gyroscope or a pressure/temperature/humidity sensor are not in PORTB, so use I2C/TWI for them)
while(1) {
//4=12,5=13
PORTB |= (1<<4);//Set pin 12 to HIGH/ON
_delay_ms(50);//wait 50 ms
PORTB &= ~(1<<4);//Set pin 12 to LOW/OFF
_delay_ms(50);//wait 50 ms
}
}
'