Atmel Studio 7 и библиотеки Ардуино
- Войдите на сайт для отправки комментариев
Добрый день, коллеги.
Нужна помощь, а может, сторонний взгляд на проблему.
Итак, Создается некое устройство на основе ATMega328P. На борту часы реального времени DS1307, "выход в свет" должен обемпечить ethernet-шилд на базе WS5100. Поверх езернета планируется протокол MQTT.
Программная часть пишется в AtmelStudio 7. Для реализации проекта решил взять штатные ардуиновские библиотеки Wire.h и SPI.h. Импортировал в проект, не забыв полагающиеся *.срр.
При попытке компиляции был послан Студией куда-то далеко.
//Декларирование библиотек #include <avr/io.h> #include <Wire.h> //---------------------------------------------------------------- //Декларирование автозамены //Светодиоды-индикаторы #define LED_Ethernet_OK PD2 #define LED_Mosquitto_OK PD3 #define LED_NTP_OK PD5 //Макросы управления индикаторами #define LED_Ethernet_OK_ON() PORTD |= (1 << LED_Ethernet_OK) //Макрос включения #define LED_Ethernet_OK_OFF() PORTD &= ~(1 << LED_Ethernet_OK) //Макрос выключения #define LED_Mosquitto_OK_ON() PORTD |= (1 << LED_Mosquitto_OK) #define LED_Mosquitto_OK_OFF() PORTD &= ~(1 << LED_Mosquitto_OK) #define LED_NTP_OK_ON() PORTD |= (1 << LED_NTP_OK) #define LED_NTP_OK_OFF() PORTD &= ~(1 << LED_NTP_OK) //---------------------------------------------------------------------- int main(void) { //Конфигурирование портов DDRD |= (1 << LED_Ethernet_OK) | (1 << LED_Mosquitto_OK) | (1 << LED_NTP_OK); //Установка порта на выход PORTD &= ~(1 << PD6); //Установка порта на вход /* Replace with your application code */ while (1) { } }
Выданы следующие ошибки:
1. Severity Code Description Project File Line
Error Stream.h: No such file or directory NTP-MQTT_01 C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.h 26
2. Severity Code Description Project File Line
Error recipe for target 'main.o' failed NTP-MQTT_01 D:\MicrocontrollerProj\Arduino_NTP-MQTT\NTP-MQTT_01\NTP-MQTT_01\Debug\Makefile 79
Запрашиваемый Stream.h нашел, импортировал в проект. Результат тот же.
Уважемые знающие - подскажите, что не так я делаю?
На всякий случай прилагаю содержимое мейкфайла:
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
SHELL := cmd.exe
RM := rm -rf
USER_OBJS :=
LIBS :=
PROJ :=
O_SRCS :=
C_SRCS :=
S_SRCS :=
S_UPPER_SRCS :=
OBJ_SRCS :=
ASM_SRCS :=
PREPROCESSING_SRCS :=
OBJS :=
OBJS_AS_ARGS :=
C_DEPS :=
C_DEPS_AS_ARGS :=
EXECUTABLES :=
OUTPUT_FILE_PATH :=
OUTPUT_FILE_PATH_AS_ARGS :=
AVR_APP_PATH :=$$$AVR_APP_PATH$$$
QUOTE := "
ADDITIONAL_DEPENDENCIES:=
OUTPUT_FILE_DEP:=
LIB_DEP:=
LINKER_SCRIPT_DEP:=
# Every subdirectory with source files must be described here
SUBDIRS :=
# Add inputs and outputs from these tool invocations to the build variables
C_SRCS += \
../main.c
PREPROCESSING_SRCS +=
ASM_SRCS +=
OBJS += \
main.o
OBJS_AS_ARGS += \
main.o
C_DEPS += \
main.d
C_DEPS_AS_ARGS += \
main.d
OUTPUT_FILE_PATH +=NTP-MQTT_01.elf
OUTPUT_FILE_PATH_AS_ARGS +=NTP-MQTT_01.elf
ADDITIONAL_DEPENDENCIES:=
OUTPUT_FILE_DEP:= ./makedep.mk
LIB_DEP+=
LINKER_SCRIPT_DEP+=
# AVR32/GNU C Compiler
./%.o: .././%.c
@echo Building file: $<
@echo Invoking: AVR/GNU C Compiler : 5.4.0
$(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.132\include" -I"C:\Program Files (x86)\Arduino" -I"C:\Program Files (x86)\Arduino\hardware\arduino\avr" -I"C:\Program Files (x86)\Arduino\hardware\tools\avr" -I"C:\Program Files (x86)\Arduino\libraries" -I"C:\Program Files (x86)\Arduino\tools" -I"C:\Program Files (x86)\Arduino\tools-builder" -I"C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src" -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.132\gcc\dev\atmega328p" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<"
@echo Finished building: $<
# AVR32/GNU Preprocessing Assembler
# AVR32/GNU Assembler
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(strip $(C_DEPS)),)
-include $(C_DEPS)
endif
endif
# Add inputs and outputs from these tool invocations to the build variables
# All Target
all: $(OUTPUT_FILE_PATH) $(ADDITIONAL_DEPENDENCIES)
$(OUTPUT_FILE_PATH): $(OBJS) $(USER_OBJS) $(OUTPUT_FILE_DEP) $(LIB_DEP) $(LINKER_SCRIPT_DEP)
@echo Building target: $@
@echo Invoking: AVR/GNU Linker : 5.4.0
$(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -o$(OUTPUT_FILE_PATH_AS_ARGS) $(OBJS_AS_ARGS) $(USER_OBJS) $(LIBS) -Wl,-Map="NTP-MQTT_01.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.132\gcc\dev\atmega328p"
@echo Finished building target: $@
"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 "NTP-MQTT_01.elf" "NTP-MQTT_01.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 "NTP-MQTT_01.elf" "NTP-MQTT_01.eep" || exit 0
"C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objdump.exe" -h -S "NTP-MQTT_01.elf" > "NTP-MQTT_01.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 "NTP-MQTT_01.elf" "NTP-MQTT_01.srec"
"C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-size.exe" "NTP-MQTT_01.elf"
# Other Targets
clean:
-$(RM) $(OBJS_AS_ARGS) $(EXECUTABLES)
-$(RM) $(C_DEPS_AS_ARGS)
rm -rf "NTP-MQTT_01.elf" "NTP-MQTT_01.a" "NTP-MQTT_01.hex" "NTP-MQTT_01.lss" "NTP-MQTT_01.eep" "NTP-MQTT_01.map" "NTP-MQTT_01.srec" "NTP-MQTT_01.usersignatures"
Нельзя так просто взять код из Arduino Framework и использовать его. Нужно либо изначально создавать Arduino-проект в Atmel Studio (наверное она это может, не пробовал), либо использовать специальный Makefile, что гораздо сложнее. Короче говоря, нельзя использовать библиотеки из Arduino Framework'а как-то отдельно. Нужно целиком прибавлять всё ядро, начиная с файла Arduino.h.
IDE Arduino скрывает всю эту работу, поэтому появились сотни тысячи ничего не понимающих об устройстве процесса сборки "программистов".