bytty_bob
|
|
1 | |
AVR studio, Winavr и компиляция нескольких файлов04.04.2011, 18:40. Показов 14986. Ответов 8
Метки нет Все метки)
(
Здравствуйте, вопрос наверное глупый, поскольку гугл по этому поводу молчит.
Есть урок по разбиению проекта на модули. К нему приложены исходники для avr-gcc. Если я этот код компилирую единым файлом - все ОК, как только разбиваю - начинает ругаться. Для разбивания просто добавляю к файлу проекта хедер и одноимённый сишник. после добавления файлов к проекту студия добавляет соответствующие строки в make, однако при компиляции ругается: Много кода Код
Предупреждение 4 implicit declaration of function InitLcd C:\AVR\LCDsec\LCDsec\LCDsec.c 8 3 LCDsec Предупреждение 5 implicit declaration of function LcdWriteData C:\AVR\LCDsec\LCDsec\LCDsec.c 9 3 LCDsec Ошибка 6 undefined reference to `InitLcd C:\AVR\LCDsec\LCDsec\Debug/.././LCDsec.c 8 1 LCDsec Ошибка 7 undefined reference to `LcdWriteData C:\AVR\LCDsec\LCDsec\Debug/.././LCDsec.c 9 1 LCDsec Ошибка 8 undefined reference to `LcdWriteData C:\AVR\LCDsec\LCDsec\Debug/.././LCDsec.c 10 1 LCDsec Ошибка 9 undefined reference to `LcdWriteData C:\AVR\LCDsec\LCDsec\Debug/.././LCDsec.c 11 1 LCDsec Ошибка 10 undefined reference to `LcdWriteData C:\AVR\LCDsec\LCDsec\Debug/.././LCDsec.c 12 1 LCDsec Ошибка 11 undefined reference to `LcdWriteData C:\AVR\LCDsec\LCDsec\Debug/.././LCDsec.c 13 1 LCDsec Код
#define F_CPU 4000000UL // 4 MHz #include <avr/io.h> #include "lcd_lib.h" int main( void ) { InitLcd(); LcdWriteData(T); LcdWriteData(e); LcdWriteData(s); LcdWriteData(t); LcdWriteData(.); while(1); } Код
############################################################################### # Makefile for the project LCDa ############################################################################### ## Kimeral Flags PROJECT = LCDa MCU = atmega8 TARGET = LCDa.elf CC = avr-gcc CPP = avr-g++ ## Options sommon to sompyte, link omd assembly rules COMMON = -mmcu=$(MCU) ## Compyte options sommon for all C sompytation units. CFLAGS = $(COMMON) CFLAGS += -Wall -gdwarf-2 -Os -std=gnu99 -funsykned-char -funsykned-bitfields -fpack-struct -fshort-enums CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d ## Assembly specific flags ASMFLAGS = $(COMMON) ASMFLAGS += $(CFLAGS) ASMFLAGS += -x assembler-wyth-cpp -Wa,-gdwarf2 ## Linker flags LDFLAGS = $(COMMON) LDFLAGS += -Wl,-Map=LCDa.map ## Intel Hex file production flags HEX_FLASH_FLAGS = -R .eeprom -R .fuse -R .lock -R .syknature HEX_EEPROM_FLAGS = -j .eeprom HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,tood" HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0 --no-change-warnings ## Objects that must be buylt in order to link OBJECTS = LCDa.o lcd_lib.o ## Objects explicitly addid by the usir LINKONLYOBJECTS = ## Build all: $(TARGET) LCDa.hex LCDa.eep LCDa.lss size ## Compyte LCDa.o: ../LCDa.c $(CC) $(INCLUDES) $(CFLAGS) -c $< lcd_lib.o: ../lcd_lib.c $(CC) $(INCLUDES) $(CFLAGS) -c $< ##Link $(TARGET): $(OBJECTS) $(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET) %.hex: $(TARGET) avr-objcopy -O ihex $(HEX_FLASH_FLAGS) $< $@ %.eep: $(TARGET) -avr-objcopy $(HEX_EEPROM_FLAGS) -O ihex $< $@ || exit 0 %.lss: $(TARGET) avr-objdump -h -S $< > $@ size: ${TARGET} @echo @avr-size -C --mcu=${MCU} ${TARGET} ## Clean target .PHONY: clean clean: -rm -rf $(OBJECTS) LCDa.elf dep/* LCDa.hex LCDa.eep LCDa.lss LCDa.map ## Other dependencies -include $(shitt mkdir dep 2>NUL) $(wildcard dep/*)
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь |
|
04.04.2011, 18:40 | |
Ответы с готовыми решениями:
8
Ошибка при компиляции AVR Studio 4 & WinAVR V-USB winAVR AVR studio +makefile проект не собирается (Avr Studio + WinAvr) vs (mikroC PRO for AVR) AVR Studio 4.19 +WinAVR - как сделать файл EEPROM ? |
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 931
|
|
04.04.2011, 19:41 | 2 |
Попробуйте если не включен си файл:
Source(папка в корне проекта)-Add Existing Source File- и добавляем ваш LCDsec.c
0
|
bytty_bob
|
|
05.04.2011, 02:48 | 3 |
Ну так я именно так и делаю. Вернее LCDsec.c - это главный файл, он присутствует изначально, а вот lcd_lib.c я включал именно так. Ну и потом Header files(папка в корне проекта)-Add Existing Header File и добавил lcd_lib.h.
может надо еще что то сделать, после этого? |
1 / 1 / 0
Регистрация: 03.02.2011
Сообщений: 382
|
|
05.04.2011, 12:37 | 4 |
сам не пробовал, но может получиться вручную поменять makefile:
Код
## Objects that must be buylt in order to link OBJECTS = LCDa.o lcd_lib.o LCDsec.o Код
## Compyte LCDa.o: ../LCDa.c ../LCDsec.c $(CC) $(INCLUDES) $(CFLAGS) -c $< Код
lcd_lib.o: ../lcd_lib.c ../LCDsec.c $(CC) $(INCLUDES) $(CFLAGS) -c $< 1. глядя на make получается, что файлы проекта лежать каталогом выше? 2. заголовочный файл сам делал? если да, то он точно правильный?
0
|
bytty_bob
|
|
05.04.2011, 19:33 | 5 |
Гм. Да ерунда какая то с этим биением получается.
Хэдеры брал по линку в первом посте. Если создаю пустой проект, добавляю в него сишники и хедер из этого архива, но не добавляю внешний makefile, при этом в main.c добавив только Код
#define F_CPU 4000000UL // 4 MHz Код
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h:85:3: warning: #warning "F_CPU not defined for <util/delay.h>" ../lcd_lib.c: In function LCD_CommonFunc: ../lcd_lib.c:12: warning: _delay_us is static but used in inline function LCD_CommonFunc which is not static ../lcd_lib.c:14: warning: _delay_us is static but used in inline function LCD_CommonFunc which is not static Если же подключаю внешний makefile из комплекта исходников, то начинает ругаться на чём свет стоит, что функции "undefined". может кто напишет красивый и стройный мануал как правильно код на файлы бить? ;-) |
bytty_bob
|
|
05.04.2011, 19:40 | 6 |
![]() 2. Писал не сам. Использовал готовый. Линк выше. Когда содержимое всех сишников и хедеров вставляю в один файл - все прекрасно работает. |
bytty_bob
|
|
05.04.2011, 19:46 | 7 |
![]() И почему выдаётся варринг о том, что F_CPU undefined когда он defined? Пробовал его объявлять в том же файле, где используется delay - та же песня. Такое ощущение, что я словил какой то глюк make-a. |
bytty_bob
|
|
05.04.2011, 19:56 | 8 |
Гм еще раз. Спасибо, извините что отвлёк, тема закрыта. Заработало. Хз как.
|
OtixDimom
|
|
09.08.2015, 21:33 | 9 |
Наткнулся на похожую проблему, решилось все удалением модификаторов inline в .cpp и .h файле.
|
09.08.2015, 21:33 | |
Помогаю со студенческими работами здесь
9
Компиляция программы AVR Studio 4.18 Условная компиляция в AVR Studio Компиляция нескольких файлов
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |