Правильное подключение #include

Обсуждаем контроллеры компании Atmel.
Ответить
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

с чего бы? Этим автоматика занимается, она в отличие от человека в состоянии отследить были ли изменения и надо ли пересобирать весть проект или только отдельные части.
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA

Сообщение GoldenAndy »

[uquote="ARV",url="/forum/viewtopic.php?p=4203029#p4203029"]только ваш подход чреват тем, что собирая новый проект из "отработанных и гарантированно работающих" старых файлов, вы рискуете в одном из них забыть про какой-то дефайн, и получить чудеса...[/uquote]
Да нет...
Я в глобальный инклудник выношу только то, что общее для конкретного проекта.
Там нет кода, только дефайны и тайпдефы.
И даже если я что то использованное забираю - то смотрю, что забираю.
А бездумное копирование - это пусть пионэры делают. Им можно, они любят трудности."Стоя и в гамаке".
а я старый ленивый инженер.
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Контактная информация:
Реклама
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

Да многие наверное так делают. У меня например тоже есть hardware.h, в котором вынесены пины и настройки используемой периферии. Но у меня он явно подключается в каждую периферию.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA

Сообщение GoldenAndy »

COKPOWEHEU, ну вот кстати, тоже правильно.
Я изначально ВСЮ коммуникацию с периферией описываю в HAL.h/HAL.c с целью максимально абстрагироваться от железа
Наружу торчат безликие getButton, setLed, низкоуровневые процедуры отправки данных в дисплей и т.д.
Это позволяет мне менять в проекте МК на другой (при условии, что периферия подходящая есть). Пригождалось пару раз. Миграция была с АВР на СТМ.
Просто переписал HAL - и всё заработало.
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)

Сообщение DX168B »

[uquote="GoldenAndy",url="/forum/viewtopic.php?p=4203019#p4203019"]ARV, я не любитель руками править всякие ключи компилятора, редактировать make и прочее...[/uquote]

Да хоспади, что там в Makefile редактировать-то?

Я их вообще руками пишу с нуля.

Простой Makefile, для простого проекта, поддерживающий инкрементную сборку и переваривающий как .c так и .cpp файлы.
При желании и после небольших правок можно использовать и для avr-gcc.
Требует три папки:
src - для исходников
inc - для заголовочников
obj - для объектных файлов и файлов зависимостей.
Спойлер

Код: Выделить всё

#********************************************************
# Makefile
# 
# $@ target name (имя цели)
# $^ all depends of target (список всех зависимостей цели)
# $? only new depends in target (только новые зависимости цели)
# $< first depend name from target (имя первой зависимости цели)
# 

#********************************************************
# PROJECT CONFIG

OUTLIB = luamqtt.so
INC_DIR = inc
SRC_DIR = src
OBJ_DIR = obj
LDLIBS = -l mosquitto -l m -l lua
DEFINES = -D_DEBUG
DEBUG_START = lua luamqtt_test.lua

CC = gcc
CCFLAGS = -fPIC -std=c99

CXX = g++
CXXFLAGS = -fPIC

LD = ld
LDFLAGS = -shared

#********************************************************
# WORK VARIABLES

DEPENDS = $(wildcard $(OBJ_DIR)/*.d)
OBJECTS = $(OBJ_DIR)/*.o

CCSRC = $(wildcard $(SRC_DIR)/*.c)
CCOBJ = $(CCSRC:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)

CXXSRC = $(wildcard $(SRC_DIR)/*.cpp)
CXXOBJ = $(CXXSRC:$(SRC_DIR)/%.cpp=$(OBJ_DIR)/%.o)

#********************************************************
# MAIN TARGETS

.PHONY: clean

all: $(OUTLIB)

rebuild: clean all

debug: $(OUTLIB)
	$(DEBUG_START)
	
clean:
	@rm -rf $(OBJECTS) $(DEPENDS) $(OUTLIB)
	@echo [ MAKE ] CLEAN FINISH

#********************************************************
# DEPENDS OF MAIN TARGETS

$(OUTLIB): $(CCOBJ) $(CXXOBJ) 
	@echo [ LD ] BUILDING $(OUTLIB)
	@$(LD) $(LDFLAGS) -soname $(OUTLIB) -o $(OUTLIB) $(LDLIBS) $(OBJECTS)
	@echo [ MAKE ] FINISH
	
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
	@echo [ CC ] COMPILING $<
	@$(CC) -MMD $(DEFINES) -c $(CCFLAGS) -I $(INC_DIR) -o $@ $<
	
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
	@echo [ CXX ] COMPILING $<
	@$(CXX) -MMD $(DEFINES) -c $(CXXFLAGS) -I $(INC_DIR) -o $@ $<

include $(DEPENDS)

I am DX168B and this is my favourite forum on internet!
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA

Сообщение GoldenAndy »

DX168B, Я их вообще не создаю.
В IDE создаю проект, пишу код, жму F7 - собралось. Жму F11 - прошивка в МК.
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)

Сообщение DX168B »

На каком-нибудь сервере (причем, на железе, подобном Raspberry Pi), через SSH особо со средой не поработаешь.
Конечно, такие среды, как Visual Studio Code содержат различные инструменты для облегчения такой работы.
Однако, даже они требуют знаний из области DevOps (то есть, Makefile и прочий скриптинг для сборки и деплоинга)
Собственно, приведенный выше makefile писался как раз для удаленной сборки и отладки компонента на целевой железке.
Даже в случае МК и ПЛИС были случаи на практике, когда прошиваемая железка была на стенде в соседнем помещении, программатор подключен к одноплатному ПК, на котором код собирался и шился в железо удаленно.
I am DX168B and this is my favourite forum on internet!
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA

Сообщение GoldenAndy »

DX168B, ну вообще то тема создана в форуме AVR.
И практически все популярные IDE для АВРок "из коробки" позволяют откомпилить проект без ручного makefile
Ну вот серьезно...
Случаи железки в другом помещении - это частный случай. И далеко не типичный.
У меня тоже умный дом со своей сеткой. И кучкой устройств по всей квартире.
Там бутлоадеры, что в АВРках, что в СТМках. И отправка прошивки туда - не вставая со стула. Нужен только хекс.
А компилится это всё в той же IDE.
--
Тут сколько людей, столько и мнений. Кого то винда устраивает, а кому то линукс мать-отец и любовница в одном флаконе.
Кто то любит все конфиги писать руками, а кому то достаточно написать printf(hello world) и нажать F7...
Да, конфиги вручную дают ощущение более полного контроля над проектом. Может быть, да. Какие то твики не всегда можно из свойств проекта накликать мышкой. но это мелочи и частности. особенно для Hello, world.
Как то мы плавно от вопроса про инклюдники уплываем в бухту холиваров.
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18676
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

GoldenAndy писал(а):Как то мы плавно от вопроса про инклюдники уплываем в бухту холиваров.
надо как-то иначе формулировать... например, от шторма инклюдников в бухту холиваров... или от берега темы в тайфун холиваров... а то конец фразы с началом не вяжется :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA

Сообщение GoldenAndy »

ARV, ну поскольку инклюдники идут один за одним - шторм подходит
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Контактная информация:
Ответить

Вернуться в «AVR»