Arduino no Atmel Studio 7 – Parte 2

Compilando Shield Arduino no Atmel Studio 7:

Tópicos:

1- Introdução,
2- Para saber mais,
3- Adicionando um módulo LCD no projeto ‘Blink’,
4- O que é a Toolchain e como acessar,
5- Configurando a Toolchain,
6- Compilando o código sem erros
Finalizando

Se você curtir esse artigo, não esqueça de dar uns cliques nos anúncios para ver o que os anunciantes tem para te oferecer. Vou ficar muito contente.

Introdução:

Baseado no artigo anterior vamos modificar a solução ‘Arduino_No_AtmelStudio’ para instanciar um objeto LiquidCrystal (um shield LCD) objetivando mostrar erros comuns de configuração do compilador e os passos para corrigi-los. Como o debug só fala que está errado e não consegue dizer o que está errado, saber consertar esse tipo de erro, só isso vale a leitura desse artigo.

Saber adicionar as classes dos shields Arduino no Atmel Studio e acertar a configuração do compilador é uma etapa fundamental para se fazer o uso profissional da plataforma Arduino quando integrada com a ferramenta Atmel Studio 7.

Caro leitor, antes de prosseguir no assunto, saiba que sua presença em meu site é mais que uma honra. Sinta-se a vontade para contribuir e propor melhorias no artigo. Boa leitura!

Para saber mais:

O man do avr-g++ -> nesse link aqui <-
O man do make -> nesse link aqui <-
Biblioteca LiquidCrystal -> nesse link aqui <-
A documentação do AtMega328p pode ser encontrado -> nesse link aqui <-

Adicionando ‘#include <LiquidCrystal.h>’ no projeto Blink

O primeiro passo para adicionar um LCD no projeto Blink seria inserir a diretiva de pré processamento ‘#include <LiquidCrystal.h>’ indicando ao compilador para procurar na lista de diretórios padrão a biblioteca LiquidCrystal.

Cuidado:

Conforme figura 1, ao começar a inserir a diretiva de pré processamento ‘#include < …’ (3), a  funcionalidade ‘code completion’ do Atmel Studio deveria listar o header da biblioteca LiquidCrystal. Mas ele, o header da biblioteca LiquidCrystal, não está disponível nem na raiz e nem nos subdiretórios sugeridos pelo ‘code completion’. Só isso é sinal de que algo está errado.

Ainda conforme figura 1, forçar a inclusão da diretiva de pré processamento ‘#include <liquidCrystal.h>'(1) a escrevendo na mão e rodar o build em seguida é a maneira mais rápida de se conseguir um erro de compilação.

Rodar o build nessa condição fará com que o compilador aborte imediatamente, retornando a mensagem ‘liquidCrystal.h: No such file or directory'(2) informando que a biblioteca LiquidCrystal não foi encontrada. Note que o ‘code completion’ já tinha avisado educadamente sobre a ausência da biblioteca em questão.

Figura 1: Erro de compilação. Biblioteca LiquidCrystal não foi encontrada.

Isso acontece por dois motivos:

  1. Porque a biblioteca ‘LiquidCrystal’ não está disponível em um dos diretórios padrão do compilador.
  2. O projeto ‘ArduinoCore’ precisa saber em qual caminho se encontra a biblioteca ‘LiquidCrystal’.
  3. O projeto ‘Blink’ também precisa saber em qual caminho se encontra essa biblioteca.
  4. Precisa adicionar a biblioteca ‘LiquidCrystal’ dentro do projeto ‘ArduinoCore’.

*Os tópicos a seguir descrevem uma possível solução. Variações e abordagens diferentes são possíveis, cada qual com seus prós e contras.

Adicionando a Biblioteca LiquidCrystal:

Conforme figura 2 e abaixo, seguem as instruções para adicionar a biblioteca LiquidCrystal no projeto ‘ArduinoCore’.

  • Clique com o botão direito do mouse sobre o projeto ‘ArduinoCore’ no ‘Solution Explorer’ (1),
  • No menu de contexto selecione a opção ‘Add Arduino Library’ (2),
  • A janela ‘Import Arduino library’ irá abrir (3),
  • Assegure que o caminho da IDE do Arduino esteja selecionado (4),
  • Para esse caso selecione o checkbox ‘LiquidCrystal’ (5) e clique em Add (6).
Figura 2: Adicionando biblioteca Arduino no projeto ‘ArduinoCore’.

A biblioteca será copiada do diretório da instalação do Arduino para dentro do projeto ‘ArduinoCore’.

Note que essa biblioteca não precisa ser copiada para o projeto ‘Blink’ que é o programa do usuário.

Informando o caminho da biblioteca liquidCrystal:

Embora a biblioteca ‘LiquidCrystal’ tenha sido copiada para dentro do projeto ‘ArduinoCore’ nos caminhos abaixo:

  • ~\Arduino_No_AtmelStudio\ArduinoCore\include\libraries\LiquidCrystal\src\LiquidCrystal.h
  • ~\Arduino_No_AtmelStudio\ArduinoCore\src\libraries\LiquidCrystal\src\LiquidCrystal.cpp

Ainda é necessário informar ao compilador para onde que a biblioteca ‘LiquidCrystal’ foi copiada.

Sendo específico: Para resolver o erro de compilação ‘liquidCrystal.h: No such file or directory’ é necessário incluir o caminho da biblioteca ‘LiquidCrystal’ na lista de diretórios padrão que o compilador procura seus includes. Essa configuração é realizada na ‘Toolchain’.

Até o momento, a biblioteca ‘LiquidCrystal’ foi copiada para dentro da solução ‘Arduino_No_AtmelStudio’, no projeto ‘ArduinoCore’. O próximo passo é configurar a ‘Toolchain’.

Não leia isso (TLDR): Copiar a biblioteca para dentro do projeto e deixar tudo organizado em um conjunto de pastas facilita a manutenção do código. Nada impede que um programador configure o compilador para buscar as bibliotecas nos lugares mais esdrúxulos, sombrios e pantanosos, ou adote práticas avançadas e louváveis como buscar direto no GitHub a versão mais atual de uma biblioteca. Cada caso um caso :-).

O que é a Toolchain e como acessar:

No Atmel Studio, a Toolchain nada mais é do que a reunião das diretivas de compilação e montagem do código de um determinado projeto. Ela é a receita de bolo listando os ingredientes e intruções que diz para o compilador onde estão as bibliotecas e como se faz para compilar o código.

Na Toolchain é possível configurar parâmetros dos compiladores C, C++, Assembler e montador como:

  • Diretivas de pré processamento,
  • Indicar Símbolos (tipo de processador, arquitetura, clock…),
  • Diretórios que o compilador vai procurar as bibliotecas do projeto,
  • Opções de otimização de código,
  • Flags de depuração de código,
  • Mensagens de aviso,
  • Configurações de uso de memória e outras opções.

Como nesse tutorial a solução ‘Arduino_No_AtmelStudio’ tem dois projetos, existem duas Tollchains a serem configuradas: Uma para o projeto ‘ArduinoCore’ e outra para o projeto ‘Blink’, conforme diagrama da figura 3 abaixo.

Figura 3: Framework Atmel Studio comportando a solução ‘Arduino_No_AtmelStudio’.

Detalhando um pouco mais, precisa ter em mente que a solução ‘Arduino_No_AtmelStudio’ engloba dois projetos que são o projeto ‘ArduinoCore’ e o projeto ‘Blink’. Cada projeto tem sua própria Toolchain.

Baseado na configuração da ‘Toolchain’ do projeto ‘ArduinoCore’, primeiro é compilado o projeto ‘ArduinoCore’ gerando a biblioteca ‘libArduinoCore.a’. Na sequência o compilador lê a ‘Toolchain’ do projeto ‘Blink’, chama a biblioteca ‘libArduinoCore.a’ e faz a compilação do projeto ‘Blink’ gerando o código binário ‘Blink.hex’.

Terminada a compilação, o programador aciona o programa AVRDUDE para carregar no Arduino o código binário ‘Blink.hex’, conforme veremos em outro artigo.

Como acessar a Toolchain

Conforme figura 4 abaixo, para acessar a página de configuração da Toolchain de um projeto, no quadro ‘Solution Explorer’ (1) basta clicar com o botão direito do mouse sobre o nome do projeto de sua escolha (pode ser ‘ArduinoCore’ ou ‘Blink’ nesse caso) (2) -> selecione ‘Properties’ (3). No quadro principal irá abrir a tela de propriedades do projeto escolhido. Selecione a opção ‘Toolchain’ (4). Selecione a opção de configuração ‘All Configurations’.

Figura 4: Acessando a Toolchain. No caso a Toolchain do projeto ArduinoCore.

Configurando a Toolchain:

Conforme dito anteriormente, quando o projeto usa uma biblioteca que não está disponível na plataforma Arduino, é necessário revisar a configuração da ‘Toolchain’ e adicionar o caminho dessa biblioteca para que a compilação e o ‘code completion’ consigam funcionar adequadamente.

Importante:

  • Como a plataforma Arduino usa o C++, não é necessário alterar os parâmetros do C na ‘Toolchain’, a menos que o desenvolvedor pretenda desenvolver código em C.
  • Caso você esteja compilando código escrito em C, faça o mesmo procedimento deste tópico 5, só que atuando nas opções do ‘AVR/GNU C Compiler’ (compilador do código C).

Segue abaixo o que precisa configurar na ‘Toolchain’ para esse tutorial, lembrando que casos específicos demandam configurações específicas :-).

Perfis de configuração

Com a ‘Toolchain’ aberta, note que o campo ‘Configuration’ permite personalizar a configuração da ‘Toolchain’, criando um perfil para cada tipo de ambiente.

Por default são duas opções e isso é configurável. A menos que seja necessário utilizar ambientes de compilação distintos, recomenda-se selecionar a opção ‘All Configurations’ para assegurar que as configurações sejam idênticas em todos ambientes.

Configurando a’ Toolchain’ do ‘ArduinoCore’:

Conforme item 4.2, acessar a página de configuração da ‘Toolchain’ do projeto ‘ArduinoCore’.

Conforme figura 5 abaixo, para o campo ‘Configuration’, selecionar a opção ‘All Configurations’ (1),

Se estiver compilando código C++, ainda conforme indicado na figura 5 abaixo:

  • Expanda ‘AVR/GNU C++ Compiler’ (2),
  • Selecione a opção ‘Directories’ (3),
  • Clique no botão para adicionar o caminho da biblioteca a ser incluída (4),
  • Navegue até a pasta onde está localizada o header da biblioteca ‘LiquidCrystal’ nesse caso(5)  e clique Ok (6),
  • O caminho será incluído na janela ‘Include Paths (-I)’ (7).
Figura 5: Configurando a Toolchain do projeto ‘ArduinoCore’.

O procedimento acima precisa ser adequado de acordo com a instalação de sua máquina.

Configurando a Toolchain do ‘Blink’:

Conforme item 4.2, acessar a página de configuração da ‘Toolchain’ do projeto ‘Blink’.

Conforme figura 6, para o campo ‘Configuration’, selecione a opção ‘All Configurations’ (8),

Se estiver compilando código C++, ainda conforme indicado na figura 6 abaixo:

  • Expanda ‘AVR/GNU C++ Compiler’ (9),
  • Selecione a opção ‘Directories’ (10),
  • Clique no botão para adicionar o caminho da biblioteca a ser incluída (11),
  • Navegue até a pasta onde está localizada o header da biblioteca ‘LiquidCrystal’ nesse caso(12) e clique Ok (13),
  • O caminho será incluído na janela ‘Include Paths (-I)’ (14).
Figura 6: Configurando a Toolchain do projeto ‘Blink’.

Compilando o código sem erros:

Uma vez adicionada a biblioteca Arduino no projeto e configurada a ‘Toolchain’ nos projetos ‘ArduinoCore’ e ‘Blink’ indicando a localização da biblioteca ‘LiquidCrystal’, é só acessar o ‘Solution Explorer’ -> clicar com o botão direito do mouse na Solução ‘Arduino_No_Atmel’, escolher ‘Clean Solution’ e ‘Build Solution’.

O compilador será iniciado, percorrendo os passos descritos no tópico 4.

Embora não seja obrigatório clicar em ‘Clean Solution’, isso garante que os diretórios ‘Output Files’ sejam apagados dando a certeza que novos arquivos serão criados.

Caso a compilação demore muito, pode-se fazer o build de cada projeto individualmente, tomando o cuidado para compilar primeiro o projeto ‘ArduinoCore’ e depois o projeto ‘Blink’.

Ao final da compilação do projeto ‘ArduinoCore’ deverá ser criado o arquivo ‘libArduinoCore.a’ na pasta ‘Output’.

Ao final da compilação do projeto ‘Blink’ deverá ser criado o arquivo ‘Blink.hex’ na pasta ‘Output’ entre outros.

Segue abaixo o código instanciando o objeto LiquidCrystal para ver se dá erro de compilação:

#include <Arduino.h>
#include <LiquidCrystal.h>
/* O diagrama esquemático para esse programa está disponível no link:
"https://nets-nuts.com.br/eletronica/ligando-o-lcd-no-arduino-4bits/"
Escolher o diagrama esquemático '8 bits Read Write'*/
//Verificando se a biblioteca dá algum erro
LiquidCrystal lcd(10, 11, 12, 2, 3, 4, 5, 6, 7, 8, 9); 
void setup() {
  // Inicializando pino do led como saída.
  pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // Início do pisca pisca
  delay(1000);                       
  digitalWrite(LED_BUILTIN, LOW);    
  delay(1000);                       // Fim do pisca pisca
}

Segue abaixo e para referência, a compilação do código.

------ Build started: Project: ArduinoCore, Configuration: Debug AVR ------
Build started.
Project "ArduinoCore.cppproj" (default targets):
Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!='').
Target "CoreBuild" in file "C:\Program Files (x86)\Atmel\Studio\7.0\Vs\Compiler.targets" from project "C:\Users\renat.DESKTOP-7SIJLUM\Documents\Atmel Studio\7.0\Arduino_No_AtmelStudio\Arduino_No_AtmelStudio\ArduinoCore\ArduinoCore.cppproj" (target "Build" depends on it):
 Task "RunCompilerTask"
 Shell Utils Path C:\Program Files (x86)\Atmel\Studio\7.0\shellUtils
 C:\Program Files (x86)\Atmel\Studio\7.0\shellUtils\make.exe all --jobs 8 --output-sync 
 Building file: ../src/core/abi.cpp
 Invoking: AVR8/GNU C Compiler : 4.9.2
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe" -funsigned-char -funsigned-bitfields -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x0043 -DUSB_MANUFACTURER="\"Arduino LLC\"" -DDEBUG  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\include" -I"..\include\core" -I"..\include\variants\standard" -I"../include/libraries/LiquidCrystal/src"  -Os -fno-threadsafe-statics -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -w -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p" -c -std=gnu++11 -MD -MP -MF "src/core/abi.d" -MT"src/core/abi.d" -MT"src/core/abi.o"   -o "src/core/abi.o" "../src/core/abi.cpp" 
 Finished building: ../src/core/abi.cpp
 Building file: ../src/core/HardwareSerial1.cpp
 Invoking: AVR8/GNU C Compiler : 4.9.2
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe" -funsigned-char -funsigned-bitfields -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x0043 -DUSB_MANUFACTURER="\"Arduino LLC\"" -DDEBUG  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\include" -I"..\include\core" -I"..\include\variants\standard" -I"../include/libraries/LiquidCrystal/src"  -Os -fno-threadsafe-statics -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -w -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p" -c -std=gnu++11 -MD -MP -MF "src/core/HardwareSerial1.d" -MT"src/core/HardwareSerial1.d" -MT"src/core/HardwareSerial1.o"   -o "src/core/HardwareSerial1.o" "../src/core/HardwareSerial1.cpp" 
 Finished building: ../src/core/HardwareSerial1.cpp
 Building file: ../src/core/CDC.cpp
 Invoking: AVR8/GNU C Compiler : 4.9.2
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe" -funsigned-char -funsigned-bitfields -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x0043 -DUSB_MANUFACTURER="\"Arduino LLC\"" -DDEBUG  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\include" -I"..\include\core" -I"..\include\variants\standard" -I"../include/libraries/LiquidCrystal/src"  -Os -fno-threadsafe-statics -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -w -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p" -c -std=gnu++11 -MD -MP -MF "src/core/CDC.d" -MT"src/core/CDC.d" -MT"src/core/CDC.o"   -o "src/core/CDC.o" "../src/core/CDC.cpp" 
 Finished building: ../src/core/CDC.cpp
 Building file: ../src/core/HardwareSerial.cpp
 Invoking: AVR8/GNU C Compiler : 4.9.2
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe" -funsigned-char -funsigned-bitfields -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x0043 -DUSB_MANUFACTURER="\"Arduino LLC\"" -DDEBUG  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\include" -I"..\include\core" -I"..\include\variants\standard" -I"../include/libraries/LiquidCrystal/src"  -Os -fno-threadsafe-statics -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -w -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p" -c -std=gnu++11 -MD -MP -MF "src/core/HardwareSerial.d" -MT"src/core/HardwareSerial.d" -MT"src/core/HardwareSerial.o"   -o "src/core/HardwareSerial.o" "../src/core/HardwareSerial.cpp" 
 Finished building: ../src/core/HardwareSerial.cpp
 Building file: ../src/core/HardwareSerial0.cpp
 Invoking: AVR8/GNU C Compiler : 4.9.2
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe" -funsigned-char -funsigned-bitfields -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x0043 -DUSB_MANUFACTURER="\"Arduino LLC\"" -DDEBUG  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\include" -I"..\include\core" -I"..\include\variants\standard" -I"../include/libraries/LiquidCrystal/src"  -Os -fno-threadsafe-statics -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -w -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p" -c -std=gnu++11 -MD -MP -MF "src/core/HardwareSerial0.d" -MT"src/core/HardwareSerial0.d" -MT"src/core/HardwareSerial0.o"   -o "src/core/HardwareSerial0.o" "../src/core/HardwareSerial0.cpp" 
 Finished building: ../src/core/HardwareSerial0.cpp
 Building file: ../src/core/HardwareSerial2.cpp
 Invoking: AVR8/GNU C Compiler : 4.9.2
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe" -funsigned-char -funsigned-bitfields -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x0043 -DUSB_MANUFACTURER="\"Arduino LLC\"" -DDEBUG  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\include" -I"..\include\core" -I"..\include\variants\standard" -I"../include/libraries/LiquidCrystal/src"  -Os -fno-threadsafe-statics -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -w -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p" -c -std=gnu++11 -MD -MP -MF "src/core/HardwareSerial2.d" -MT"src/core/HardwareSerial2.d" -MT"src/core/HardwareSerial2.o"   -o "src/core/HardwareSerial2.o" "../src/core/HardwareSerial2.cpp" 
 Finished building: ../src/core/HardwareSerial2.cpp
 Building file: ../src/core/HardwareSerial3.cpp
 Invoking: AVR8/GNU C Compiler : 4.9.2
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe" -funsigned-char -funsigned-bitfields -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x0043 -DUSB_MANUFACTURER="\"Arduino LLC\"" -DDEBUG  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\include" -I"..\include\core" -I"..\include\variants\standard" -I"../include/libraries/LiquidCrystal/src"  -Os -fno-threadsafe-statics -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -w -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p" -c -std=gnu++11 -MD -MP -MF "src/core/HardwareSerial3.d" -MT"src/core/HardwareSerial3.d" -MT"src/core/HardwareSerial3.o"   -o "src/core/HardwareSerial3.o" "../src/core/HardwareSerial3.cpp" 
 Finished building: ../src/core/HardwareSerial3.cpp
 Building file: ../src/core/hooks.c
 Invoking: AVR8/GNU C Compiler : 4.9.2
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe"  -x c -funsigned-char -funsigned-bitfields -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x0043 -DUSB_MANUFACTURER="\"Arduino LLC\"" -DDEBUG  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\include" -I"..\include\core" -I"..\include\variants\standard" -I"..\include\libraries\LiquidCrystal\src"  -Os -fno-threadsafe-statics -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -w -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p" -c -std=gnu99 -std=gnu11 -MD -MP -MF "src/core/hooks.d" -MT"src/core/hooks.d" -MT"src/core/hooks.o"   -o "src/core/hooks.o" "../src/core/hooks.c" 
 Finished building: ../src/core/hooks.c
 Building file: ../src/core/new.cpp
 Invoking: AVR8/GNU C Compiler : 4.9.2
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe" -funsigned-char -funsigned-bitfields -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x0043 -DUSB_MANUFACTURER="\"Arduino LLC\"" -DDEBUG  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\include" -I"..\include\core" -I"..\include\variants\standard" -I"../include/libraries/LiquidCrystal/src"  -Os -fno-threadsafe-statics -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -w -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p" -c -std=gnu++11 -MD -MP -MF "src/core/new.d" -MT"src/core/new.d" -MT"src/core/new.o"   -o "src/core/new.o" "../src/core/new.cpp" 
 Finished building: ../src/core/new.cpp
 Building file: ../src/core/main.cpp
 Invoking: AVR8/GNU C Compiler : 4.9.2
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe" -funsigned-char -funsigned-bitfields -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x0043 -DUSB_MANUFACTURER="\"Arduino LLC\"" -DDEBUG  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\include" -I"..\include\core" -I"..\include\variants\standard" -I"../include/libraries/LiquidCrystal/src"  -Os -fno-threadsafe-statics -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -w -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p" -c -std=gnu++11 -MD -MP -MF "src/core/main.d" -MT"src/core/main.d" -MT"src/core/main.o"   -o "src/core/main.o" "../src/core/main.cpp" 
 Finished building: ../src/core/main.cpp
 Building file: ../src/core/IPAddress.cpp
 Invoking: AVR8/GNU C Compiler : 4.9.2
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe" -funsigned-char -funsigned-bitfields -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x0043 -DUSB_MANUFACTURER="\"Arduino LLC\"" -DDEBUG  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\include" -I"..\include\core" -I"..\include\variants\standard" -I"../include/libraries/LiquidCrystal/src"  -Os -fno-threadsafe-statics -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -w -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p" -c -std=gnu++11 -MD -MP -MF "src/core/IPAddress.d" -MT"src/core/IPAddress.d" -MT"src/core/IPAddress.o"   -o "src/core/IPAddress.o" "../src/core/IPAddress.cpp" 
 Finished building: ../src/core/IPAddress.cpp
 Building file: ../src/core/PreprocessingAssembly/wiring_pulse.S
 Invoking: AVR8/GNU Assembler : 4.9.2
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe" -Wa,-gdwarf2 -x assembler-with-cpp -c -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p" -I "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\include"  -MD -MP -MF "src/core/PreprocessingAssembly/wiring_pulse.d" -MT"src/core/PreprocessingAssembly/wiring_pulse.d" -MT"src/core/PreprocessingAssembly/wiring_pulse.o" -Wa,-g   -o "src/core/PreprocessingAssembly/wiring_pulse.o" "../src/core/PreprocessingAssembly/wiring_pulse.S" 
 Finished building: ../src/core/PreprocessingAssembly/wiring_pulse.S
 Building file: ../src/core/PluggableUSB.cpp
 Invoking: AVR8/GNU C Compiler : 4.9.2
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe" -funsigned-char -funsigned-bitfields -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x0043 -DUSB_MANUFACTURER="\"Arduino LLC\"" -DDEBUG  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\include" -I"..\include\core" -I"..\include\variants\standard" -I"../include/libraries/LiquidCrystal/src"  -Os -fno-threadsafe-statics -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -w -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p" -c -std=gnu++11 -MD -MP -MF "src/core/PluggableUSB.d" -MT"src/core/PluggableUSB.d" -MT"src/core/PluggableUSB.o"   -o "src/core/PluggableUSB.o" "../src/core/PluggableUSB.cpp" 
 Finished building: ../src/core/PluggableUSB.cpp
 Building file: ../src/core/Stream.cpp
 Invoking: AVR8/GNU C Compiler : 4.9.2
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe" -funsigned-char -funsigned-bitfields -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x0043 -DUSB_MANUFACTURER="\"Arduino LLC\"" -DDEBUG  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\include" -I"..\include\core" -I"..\include\variants\standard" -I"../include/libraries/LiquidCrystal/src"  -Os -fno-threadsafe-statics -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -w -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p" -c -std=gnu++11 -MD -MP -MF "src/core/Stream.d" -MT"src/core/Stream.d" -MT"src/core/Stream.o"   -o "src/core/Stream.o" "../src/core/Stream.cpp" 
 Finished building: ../src/core/Stream.cpp
 Building file: ../src/core/Print.cpp
 Invoking: AVR8/GNU C Compiler : 4.9.2
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe" -funsigned-char -funsigned-bitfields -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x0043 -DUSB_MANUFACTURER="\"Arduino LLC\"" -DDEBUG  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\include" -I"..\include\core" -I"..\include\variants\standard" -I"../include/libraries/LiquidCrystal/src"  -Os -fno-threadsafe-statics -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -w -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p" -c -std=gnu++11 -MD -MP -MF "src/core/Print.d" -MT"src/core/Print.d" -MT"src/core/Print.o"   -o "src/core/Print.o" "../src/core/Print.cpp" 
 Finished building: ../src/core/Print.cpp
 Building file: ../src/core/Tone.cpp
 Invoking: AVR8/GNU C Compiler : 4.9.2
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe" -funsigned-char -funsigned-bitfields -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x0043 -DUSB_MANUFACTURER="\"Arduino LLC\"" -DDEBUG  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\include" -I"..\include\core" -I"..\include\variants\standard" -I"../include/libraries/LiquidCrystal/src"  -Os -fno-threadsafe-statics -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -w -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p" -c -std=gnu++11 -MD -MP -MF "src/core/Tone.d" -MT"src/core/Tone.d" -MT"src/core/Tone.o"   -o "src/core/Tone.o" "../src/core/Tone.cpp" 
 Finished building: ../src/core/Tone.cpp
 Building file: ../src/core/USBCore.cpp
 Invoking: AVR8/GNU C Compiler : 4.9.2
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe" -funsigned-char -funsigned-bitfields -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x0043 -DUSB_MANUFACTURER="\"Arduino LLC\"" -DDEBUG  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\include" -I"..\include\core" -I"..\include\variants\standard" -I"../include/libraries/LiquidCrystal/src"  -Os -fno-threadsafe-statics -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -w -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p" -c -std=gnu++11 -MD -MP -MF "src/core/USBCore.d" -MT"src/core/USBCore.d" -MT"src/core/USBCore.o"   -o "src/core/USBCore.o" "../src/core/USBCore.cpp" 
 Finished building: ../src/core/USBCore.cpp
 Building file: ../src/core/WInterrupts.c
 Invoking: AVR8/GNU C Compiler : 4.9.2
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe"  -x c -funsigned-char -funsigned-bitfields -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x0043 -DUSB_MANUFACTURER="\"Arduino LLC\"" -DDEBUG  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\include" -I"..\include\core" -I"..\include\variants\standard" -I"..\include\libraries\LiquidCrystal\src"  -Os -fno-threadsafe-statics -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -w -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p" -c -std=gnu99 -std=gnu11 -MD -MP -MF "src/core/WInterrupts.d" -MT"src/core/WInterrupts.d" -MT"src/core/WInterrupts.o"   -o "src/core/WInterrupts.o" "../src/core/WInterrupts.c" 
 Finished building: ../src/core/WInterrupts.c
 Building file: ../src/core/wiring.c
 Invoking: AVR8/GNU C Compiler : 4.9.2
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe"  -x c -funsigned-char -funsigned-bitfields -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x0043 -DUSB_MANUFACTURER="\"Arduino LLC\"" -DDEBUG  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\include" -I"..\include\core" -I"..\include\variants\standard" -I"..\include\libraries\LiquidCrystal\src"  -Os -fno-threadsafe-statics -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -w -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p" -c -std=gnu99 -std=gnu11 -MD -MP -MF "src/core/wiring.d" -MT"src/core/wiring.d" -MT"src/core/wiring.o"   -o "src/core/wiring.o" "../src/core/wiring.c" 
 Finished building: ../src/core/wiring.c
 Building file: ../src/core/wiring_analog.c
 Invoking: AVR8/GNU C Compiler : 4.9.2
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe"  -x c -funsigned-char -funsigned-bitfields -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x0043 -DUSB_MANUFACTURER="\"Arduino LLC\"" -DDEBUG  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\include" -I"..\include\core" -I"..\include\variants\standard" -I"..\include\libraries\LiquidCrystal\src"  -Os -fno-threadsafe-statics -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -w -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p" -c -std=gnu99 -std=gnu11 -MD -MP -MF "src/core/wiring_analog.d" -MT"src/core/wiring_analog.d" -MT"src/core/wiring_analog.o"   -o "src/core/wiring_analog.o" "../src/core/wiring_analog.c" 
 Finished building: ../src/core/wiring_analog.c
 Building file: ../src/core/wiring_digital.c
 Invoking: AVR8/GNU C Compiler : 4.9.2
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe"  -x c -funsigned-char -funsigned-bitfields -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x0043 -DUSB_MANUFACTURER="\"Arduino LLC\"" -DDEBUG  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\include" -I"..\include\core" -I"..\include\variants\standard" -I"..\include\libraries\LiquidCrystal\src"  -Os -fno-threadsafe-statics -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -w -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p" -c -std=gnu99 -std=gnu11 -MD -MP -MF "src/core/wiring_digital.d" -MT"src/core/wiring_digital.d" -MT"src/core/wiring_digital.o"   -o "src/core/wiring_digital.o" "../src/core/wiring_digital.c" 
 Finished building: ../src/core/wiring_digital.c
 Building file: ../src/core/wiring_pulse.c
 Invoking: AVR8/GNU C Compiler : 4.9.2
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe"  -x c -funsigned-char -funsigned-bitfields -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x0043 -DUSB_MANUFACTURER="\"Arduino LLC\"" -DDEBUG  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\include" -I"..\include\core" -I"..\include\variants\standard" -I"..\include\libraries\LiquidCrystal\src"  -Os -fno-threadsafe-statics -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -w -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p" -c -std=gnu99 -std=gnu11 -MD -MP -MF "src/core/wiring_pulse.d" -MT"src/core/wiring_pulse.d" -MT"src/core/wiring_pulse.o"   -o "src/core/wiring_pulse.o" "../src/core/wiring_pulse.c" 
 Finished building: ../src/core/wiring_pulse.c
 Building file: ../src/core/wiring_shift.c
 Invoking: AVR8/GNU C Compiler : 4.9.2
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe"  -x c -funsigned-char -funsigned-bitfields -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x0043 -DUSB_MANUFACTURER="\"Arduino LLC\"" -DDEBUG  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\include" -I"..\include\core" -I"..\include\variants\standard" -I"..\include\libraries\LiquidCrystal\src"  -Os -fno-threadsafe-statics -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -w -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p" -c -std=gnu99 -std=gnu11 -MD -MP -MF "src/core/wiring_shift.d" -MT"src/core/wiring_shift.d" -MT"src/core/wiring_shift.o"   -o "src/core/wiring_shift.o" "../src/core/wiring_shift.c" 
 Finished building: ../src/core/wiring_shift.c
 Building file: ../src/core/WMath.cpp
 Invoking: AVR8/GNU C Compiler : 4.9.2
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe" -funsigned-char -funsigned-bitfields -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x0043 -DUSB_MANUFACTURER="\"Arduino LLC\"" -DDEBUG  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\include" -I"..\include\core" -I"..\include\variants\standard" -I"../include/libraries/LiquidCrystal/src"  -Os -fno-threadsafe-statics -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -w -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p" -c -std=gnu++11 -MD -MP -MF "src/core/WMath.d" -MT"src/core/WMath.d" -MT"src/core/WMath.o"   -o "src/core/WMath.o" "../src/core/WMath.cpp" 
 Finished building: ../src/core/WMath.cpp
 Building file: ../src/libraries/LiquidCrystal/src/LiquidCrystal.cpp
 Invoking: AVR8/GNU C Compiler : 4.9.2
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe" -funsigned-char -funsigned-bitfields -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x0043 -DUSB_MANUFACTURER="\"Arduino LLC\"" -DDEBUG  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\include" -I"..\include\core" -I"..\include\variants\standard" -I"../include/libraries/LiquidCrystal/src"  -Os -fno-threadsafe-statics -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -w -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p" -c -std=gnu++11 -MD -MP -MF "src/libraries/LiquidCrystal/src/LiquidCrystal.d" -MT"src/libraries/LiquidCrystal/src/LiquidCrystal.d" -MT"src/libraries/LiquidCrystal/src/LiquidCrystal.o"   -o "src/libraries/LiquidCrystal/src/LiquidCrystal.o" "../src/libraries/LiquidCrystal/src/LiquidCrystal.cpp" 
 Finished building: ../src/libraries/LiquidCrystal/src/LiquidCrystal.cpp
 Building file: ../src/core/WString.cpp
 Invoking: AVR8/GNU C Compiler : 4.9.2
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe" -funsigned-char -funsigned-bitfields -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x0043 -DUSB_MANUFACTURER="\"Arduino LLC\"" -DDEBUG  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\include" -I"..\include\core" -I"..\include\variants\standard" -I"../include/libraries/LiquidCrystal/src"  -Os -fno-threadsafe-statics -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -w -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p" -c -std=gnu++11 -MD -MP -MF "src/core/WString.d" -MT"src/core/WString.d" -MT"src/core/WString.o"   -o "src/core/WString.o" "../src/core/WString.cpp" 
 Finished building: ../src/core/WString.cpp
 Building target: libArduinoCore.a
 Invoking: AVR8/GNU Archiver : 4.9.2
 C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-ar.exe: creating libArduinoCore.a
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-ar.exe" -r  -o libArduinoCore.a  src/core/abi.o src/core/CDC.o src/core/HardwareSerial.o src/core/HardwareSerial0.o src/core/HardwareSerial1.o src/core/HardwareSerial2.o src/core/HardwareSerial3.o src/core/hooks.o src/core/IPAddress.o src/core/main.o src/core/new.o src/core/PluggableUSB.o src/core/PreprocessingAssembly/wiring_pulse.o src/core/Print.o src/core/Stream.o src/core/Tone.o src/core/USBCore.o src/core/WInterrupts.o src/core/wiring.o src/core/wiring_analog.o src/core/wiring_digital.o src/core/wiring_pulse.o src/core/wiring_shift.o src/core/WMath.o src/core/WString.o src/libraries/LiquidCrystal/src/LiquidCrystal.o   
 Finished building target: libArduinoCore.a
 Done executing task "RunCompilerTask".
 Task "RunOutputFileVerifyTask"
 Done executing task "RunOutputFileVerifyTask".
Done building target "CoreBuild" in project "ArduinoCore.cppproj".
Target "PostBuildEvent" skipped, due to false condition; ('$(PostBuildEvent)' != '') was evaluated as ('' != '').
Target "Build" in file "C:\Program Files (x86)\Atmel\Studio\7.0\Vs\Avr.common.targets" from project "C:\Users\renat.DESKTOP-7SIJLUM\Documents\Atmel Studio\7.0\Arduino_No_AtmelStudio\Arduino_No_AtmelStudio\ArduinoCore\ArduinoCore.cppproj" (entry point):
Done building target "Build" in project "ArduinoCore.cppproj".
Done building project "ArduinoCore.cppproj".
Build succeeded.
------ Build started: Project: Blink, Configuration: Debug AVR ------
Build started.
Project "Blink.cppproj" (default targets):
Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!='').
Target "CoreBuild" in file "C:\Program Files (x86)\Atmel\Studio\7.0\Vs\Compiler.targets" from project "C:\Users\renat.DESKTOP-7SIJLUM\Documents\Atmel Studio\7.0\Arduino_No_AtmelStudio\Arduino_No_AtmelStudio\Blink\Blink.cppproj" (target "Build" depends on it):
 Task "RunCompilerTask"
 Shell Utils Path C:\Program Files (x86)\Atmel\Studio\7.0\shellUtils
 C:\Program Files (x86)\Atmel\Studio\7.0\shellUtils\make.exe all --jobs 8 --output-sync 
 Building file: .././Sketch.cpp
 Invoking: AVR8/GNU C Compiler : 4.9.2
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe" -funsigned-char -funsigned-bitfields -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x0043 -DUSB_MANUFACTURER="\"Arduino LLC\"" -DDEBUG  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\include" -I"..\\..\ArduinoCore\include\core" -I"..\\..\ArduinoCore\include\variants\standard" -I"../../ArduinoCore/include/libraries/LiquidCrystal/src"  -Os -fno-threadsafe-statics -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -w -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p" -c -std=gnu++11 -MD -MP -MF "Sketch.d" -MT"Sketch.d" -MT"Sketch.o"   -o "Sketch.o" ".././Sketch.cpp" 
 Finished building: .././Sketch.cpp
 Building target: Blink.elf
 Invoking: AVR8/GNU Linker : 4.9.2
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe" -o Blink.elf  Sketch.o   -Wl,-Map="Blink.map" -Wl,--start-group -Wl,-lm -Wl,-lArduinoCore  -Wl,--end-group -Wl,-L"C:\Users\RENAT~1.DES\DOCUME~1\ATMELS~1\7.0\ARDUIN~4\ARDUIN~1\ARDUIN~1\Debug"  -Wl,--gc-sections -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p" -Os  
 Finished building target: Blink.elf
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures  "Blink.elf" "Blink.hex"
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objcopy.exe" -j .eeprom  --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0  --no-change-warnings -O ihex "Blink.elf" "Blink.eep" || exit 0
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objdump.exe" -h -S "Blink.elf" > "Blink.lss"
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O srec -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "Blink.elf" "Blink.srec"
 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-size.exe" "Blink.elf"
    text    data     bss     dec     hex filename
    2368      30      33    2431     97f Blink.elf
 Done executing task "RunCompilerTask".
 Task "RunOutputFileVerifyTask"
 Program Memory Usage  : 2398 bytes   7,3 % Full
 Data Memory Usage  : 63 bytes   3,1 % Full
 Done executing task "RunOutputFileVerifyTask".
Done building target "CoreBuild" in project "Blink.cppproj".
Target "PostBuildEvent" skipped, due to false condition; ('$(PostBuildEvent)' != '') was evaluated as ('' != '').
Target "Build" in file "C:\Program Files (x86)\Atmel\Studio\7.0\Vs\Avr.common.targets" from project "C:\Users\renat.DESKTOP-7SIJLUM\Documents\Atmel Studio\7.0\Arduino_No_AtmelStudio\Arduino_No_AtmelStudio\Blink\Blink.cppproj" (entry point):
Done building target "Build" in project "Blink.cppproj".
Done building project "Blink.cppproj".
Build succeeded.
========== Build: 2 succeeded or up-to-date, 0 failed, 0 skipped ==========

Finalizando:

Nessa etapa foram abordados os passos e detalhes para se levar em conta quando configurando a ‘Toolchain’ para funcionar a compilação de projeto Arduino no AtmelStudio.

O código, no ponto que está já é possivel desenvolver a implementação do LCD no projeto e isso será feito no proximo artigo.

Ainda estou devendo a configuração do AVRDUDE no Atmel Studio, mas falta pouco para eu falar dele e o mais importante nesse momento seria ressaltar as seguintes observações:

  • Não adianta mandar compilar o módulo ‘Blink’ se ainda não tiver sido compilado o ‘ArduinoCore’. Simplesmente irá dar erro e muitas vezes o compilador poderá travar sem emitir qualquer mensagem.
  • Caso o AtmelStudio comece a travar dando erros de thread e coisas esquisitas começarem a acontecer, há grande probabilidade de termos algum erro de configuração nos caminhos das bibliotecas.
  • Se o projeto é C++, não faz sentido atualizar as informações do compilador C e vice versa. Fazer isso é perda de tempo.
  • Na ‘Toolchain’ do ‘ArduinoCore’ é mandatório especificar o caminho de todas bibliotecas dos shields utilizados no projeto.
  • Como boa prática, As bibliotecas adicionais sempre que possível devem ficar dentro do projeto.
  • Não indicar o caminho das bibliotecas na ‘Toolchain’ dá erro de compilação.
  • Quando atualizando a ‘Toolchain’ apenas acrescente o caminho das bibliotecas. Somente mude os valores padrão dos diretórios listados na ‘Toolchain’ se você souber o que está fazendo.
  • O linker do projeto ‘ArduinoCore’ e do ‘Blink’ tem que indicar apenas a biblioteca libm (nesse tutorial).

Um grande abraço e saiba que a satisfação é minha pelo prestígio de ter sua atenção até esse ponto.

By Renato de Pierri

18/Janeiro/2017

Last updated by at .

Deixe um comentário