• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Универсальный Makefile для всех примеров

nikolz

Well-known member
CHERTS,
Добрый день,
давно не смотрел Ваш UDK.
У меня вопрос.
В мейк файлах примеров очень много повторяющегося кода.
Почему Вы не выносите общее в один файл?
По-моему мнению так и вносить изменения в старые примеры и делать новые проекты удобнее и проще.
Или есть какие-то принципиальные моменты так не делать?
Спасибо.
 

CHERTS

Moderator
Команда форума
CHERTS,
Добрый день,
давно не смотрел Ваш UDK.
У меня вопрос.
В мейк файлах примеров очень много повторяющегося кода.
Почему Вы не выносите общее в один файл?
По-моему мнению так и вносить изменения в старые примеры и делать новые проекты удобнее и проще.
Или есть какие-то принципиальные моменты так не делать?
Спасибо.
Добрый вечер, на то есть свои причина и самая основная - это простота для начинающего разработчика. Непосвященным людям вникнуть в тонкости написания Makefile довольно сложно, в текущем виде все что нужно лежит в 1 файле, да это не оптимально, но это просто, а простота - залог успеха. Тем более почти во всех примерах Makefile одинаковый, меняется лишь набор библиотек необходимых для сборки того или иного примера.
И то что есть в примерах не значит, что так нужно делать в рабочем проекте, это лишь примеры показывающие возможности ESP и дающие пищу для размышления и действий.

Вы можете написать свой пример, в котором будет красивый с Вашей точки зрения Makefile и сделать pull request на github, DevKit открытый проект, каждый может вносить доработки и исправлять мои ошибки и недоработки, я буду только рад этому, правда пока добровольцев нет.
 

nikolz

Well-known member
CHERTS,
добрый день,
Я полагал,
что для тех кто не умеет делать мейк файлы
будет еще проще работать в новых проектах c таким мейк файлом:
-----------------
ROOT =../..
MODULES = driver
include $(ROOT)/Makefile.common
-----------------
вместо существующего.
 

CHERTS

Moderator
Команда форума
CHERTS,
добрый день,
Я полагал,
что для тех кто не умеет делать мейк файлы
будет еще проще работать в новых проектах c таким мейк файлом:
-----------------
ROOT =../..
MODULES = driver
include $(ROOT)/Makefile.common
-----------------
вместо существующего.
В какой папке лежит Makefile.common? Наверняка в папке отличной от папки проекта, то есть мы получаем разрозненный проект, который чтобы перенести из C:\Espressif\examples\ скажем в F:\MyProject нужно еще будет лазить по другим папкам и искать хвосты и зависимости + потом еще и править основной Makefile проекта чтобы подцепить эти хвосты из другого места, разве это проще?
Возможно я ошибаюсь, пришлите тестовый проект на основе hello_world, если Ваш вариант действительно будет удобнее, то я не против использовать его.
 

nikolz

Well-known member
Это каким же должен быть отважным Буратино,
чтобы, не зная как делать мейк файлы,
начать вытаскивать из ESpressif примеры в отдельные каталоги?
-------------------------------------------------
Попробую перечислить несколько плюсов в предлагаемом варианте.
1) Не зависит от диска на котором Espressif. (сейчас лишь на C)
2) Менять параметры порта надо в одном файле Makefile.port :
# port
ESPPORT ?= COM4
# Baud rate for programmer
BAUD ?= 256000

--------------------
(сейчас во всех проектах)
3) Изменять настройки для записи во flash в файле Makefile.flash (сейчас во всех проектах)
4) Изменить параметры компилятора в файле Makefile.comp (сейчас во всех проектах)
5) Изменить параметры загрузчика в одном файле Makefile.boot (сейчас во всех проектах)
6) Изменить параметры flash в одном файле Makefile.spi (сейчас во всех проектах)
Все файлы настройки собраны в файле Makefile.common, в который легко добавить новые общие для всех настройки.
------------------------------------
Все файлы выкладываю здесь (каталог kamnik)
Makefile без расширения помещаем в примеры, а с раширениями (их 6) копируем в каталог Espressif
Прикладываю вариант для примера 1wire_ds18b20
для других примеров с датчиками будет тоже самое
=============================
Расскажу еще одно развитие.
Я его тоже сделал давно, для новой сборки еще не переделал.
Я вытащил все драйвера в каталог driver в ESpressif
В результате из примеров ушли драйвера и стали они одинаковые для всех примеров.
Сейчас же например драйвер uart.c в примере 1wire_ds18b20 имеет длину 7 kB
а в примере at_v0.20_on_SDKv0.9.4 11 kB.
А разве uart разный? нет
а драйверы чем отличаются? ...
и так во всех примерах .
Если исправить ошибку в одном месте, то надо шарить по всем примерам,
чтобы исправить в других вариантах драйвера датчика.
и так для всех устройств - куча разных глючных или нет вариантов.
-------------------------------------
Согласитесь, что хорошо когда драйвер для датчика один - самый лучший,
а не куча незнамо каких.
-------------------------------------------
 

Вложения

CHERTS

Moderator
Команда форума
Не пойму зачем разбивать Makefile на кучу Makefile.port Makefile.flash Makefile.comp и т.д.?
Захотел я поменять одни, вторые, третьи настройки и придется лазить по кучи файлов.
Уж тогда проще все сгрузить в один общий файл.
А захотел я для одного примера чтобы он шился через COM2, а параллельно второй через COM3 и что делать?
Или захотел я один пример собрать в SDK 1.3.0, а параллельно второй с SDK 1.4.0 и что опять делать?
Нет не убедили Вы меня, идея хорошая, но выносить настройки в разные файлы и тем более за пределы проекта - это утопизм.
 

nikolz

Well-known member
Не пойму зачем разбивать Makefile на кучу Makefile.port Makefile.flash Makefile.comp и т.д.?
Захотел я поменять одни, вторые, третьи настройки и придется лазить по кучи файлов.
Уж тогда проще все сгрузить в один общий файл.
А захотел я для одного примера чтобы он шился через COM2, а параллельно второй через COM3 и что делать?
Или захотел я один пример собрать в SDK 1.3.0, а параллельно второй с SDK 1.4.0 и что опять делать?
Нет не убедили Вы меня, идея хорошая, но выносить настройки в разные файлы и тем более за пределы проекта - это утопизм.
--------------------
Добрый день,
все Ваши доводы с позиции знатока (на форуме таких два - Вы да pvvx).
Другие, в том числе и я, не заморачиваются кучей плат для разных портов.
--------------------------------
Поэтому с позиции пользователя, который не в зуб ногой ни в мейках, ни в настройках все выглядит иначе:
1) У большинства есть лишь один порт, к которому подключен какой нибудь dev-kit или преобразователь UART-USB.
Зачем плодить кучу подключений начинающему?
2) Полагаю что большинство изменяет лишь настройки порта. И изменить их в файле где две строчки вообще ума не надо.
А вот менять что-то в других местах надо все реже и реже.
Мейк с компилятором зависит от обновлений Xtensa
Мейк с flash зависит от появления новых загрузчиков
Мейк spi зависит от модификации ESP
Таким образом, изменения вносятся, если надо в зависимости от того, что конкретно Вы изменили
При этом лишь в целевой мейк и при этом лишь один раз.
-------------------------------
В моем варианте не надо много знать чтобы что-то исправить с пониманием этого и всего в одном месте.
------------------------------------
Мне так нравится. Дело привычки, разумеется.
 

pvvx

Активный участник сообщества
Не пойму зачем разбивать Makefile на кучу Makefile.port Makefile.flash Makefile.comp и т.д.?
Захотел я поменять одни, вторые, третьи настройки и придется лазить по кучи файлов.
Уж тогда проще все сгрузить в один общий файл.
А захотел я для одного примера чтобы он шился через COM2, а параллельно второй через COM3 и что делать?
Или захотел я один пример собрать в SDK 1.3.0, а параллельно второй с SDK 1.4.0 и что опять делать?
Нет не убедили Вы меня, идея хорошая, но выносить настройки в разные файлы и тем более за пределы проекта - это утопизм.
Зачем вообще эти Makefile? Всё можно настроить в меню Eclipse, без Makefile-s. Там проблемки только с программированием-заливкой в модуль, но и то решаемые.
Другие, в том числе и я, не заморачиваются кучей плат для разных портов.
Пишите плагин к Eclipse. Он решит все ваши проблемы и у тех кто не хочет даже лазать в Makefile.
 

nikolz

Well-known member
Зачем вообще эти Makefile? Всё можно настроить в меню Eclipse, без Makefile-s. Там проблемки только с программированием-заливкой в модуль, но и то решаемые.
Пишите плагин к Eclipse. Он решит все ваши проблемы и у тех кто не хочет даже лазать в Makefile.
А в чем разница плагина от мейка?
По мне так дело привычки и опыта.
---------------------------------------------
Кому нравится пиво пить с раками,
а кому водка с пивом.
 

pvvx

Активный участник сообщества
А в чем разница плагина от мейка?
В том, что ничего вообще писать не требуется при создании нового проекта.
Никакой водки или пива - не требуется разбираться какая из них более ядовитая...
 

nikolz

Well-known member
В том, что ничего вообще писать не требуется при создании нового проекта.
Никакой водки или пива - не требуется разбираться какая из них более ядовитая...
это хорошо. Но знаете только Вы.
А с мейками тоже ничего писать не надо, так как они одинаковые для всех проектов, кроме nodemcu,RTOS .
Но у этиз свои мейки и Вы их тоже пользуете даже с плагинами.
Так что вкуривайте.
 

CHERTS

Moderator
Команда форума
nikolz я понял вашу идею, но на мой взгляд она более сложная чем один Makefile файл и запутанная.

Более правильно было бы вынести в Makefile проекта все переменные для настройки, их немного

Код:
SDK_BASE ?= c:/Espressif/ESP8266_SDK
SDK_TOOLS ?= c:/Espressif/utils
ESPTOOL ?= $(SDK_TOOLS)/esptool.exe
ESPPORT ?= COM3
BAUD ?= 256000
SPI_SPEED ?= 40
SPI_MODE ?= qio
SPI_SIZE_MAP ?= 0
MODULES = driver user
include $(SDK_BASE)/Makefile.common
а в Makefile.common записать всю логику, та что у вас раскидана по Makefile.boot Makefile.flash Makefile.port и т.п. и положить этот Makefile.common в папку $(SDK_BASE) чтобы он был уникальным для каждой версии SDK
 
Последнее редактирование:

pvvx

Активный участник сообщества
это хорошо. Но знаете только Вы.
А с мейками тоже ничего писать не надо, так как они одинаковые для всех проектов, кроме nodemcu,RTOS .
Но у этиз свои мейки и Вы их тоже пользуете даже с плагинами.
Так что вкуривайте.
У меня свои SDK и мне всё равно - у меня даже esptool.py свой и к каждому проекту... Стандартные SDK имеют слишком много ошибок и никуда не годятся.
Для мигания светодиодом телепузикам есть Дурина - там не надо лезть ни в какие SDK и маке.
 

nikolz

Well-known member
nikolz я понял вашу идею, но на мой взгляд она более сложная чем один Makefile файл и запутанная.

Более правильно было бы вынести в Makefile проекта все переменные для настройки, их немного

Код:
SDK_BASE ?= c:/Espressif/ESP8266_SDK
SDK_TOOLS ?= c:/Espressif/utils
ESPTOOL ?= $(SDK_TOOLS)/esptool.exe
ESPPORT ?= COM3
BAUD ?= 256000
SPI_SPEED ?= 40
SPI_MODE ?= qio
SPI_SIZE_MAP ?= 0
MODULES = driver user
include $(SDK_BASE)/Makefile.common
а в Makefile.common записать всю логику, та что у вас раскидана по Makefile.boot Makefile.flash Makefile.port и т.п. и положить этот Makefile.common в папку $(SDK_BASE) чтобы он был уникальным для каждой версии SDK
----------------------
Так я же не призываю делать так же как я.
Я лишь даю некоторые, на мой взгляд, полезные идеи для развития.
----------------------------------
Порою прогрессивный шаг вперед есть результат пинка под зад.
 

Tomahawk

New member
Если разбить 1 мэйкфайл на маленькие, то это не приведёт к большему пониманию того, что там происходит. Номер порта итак сверху находится, разницы где менять никакой. А если более глубоко с ними разбираться, то удобнее когда все make-переменные находятся в одном файле, так проще поиск делать, чтобы понять что с чем связано.
 

nikolz

Well-known member
CHERTS,
Просьба
Соберите UDK исключительно на библиотеках китайцев.
Иначе Вы вечно будете чего-то доделывать и вечно будет что-то не стыковаться.
-----------------------------------------------------
то царь-пушка не стреляет, то царь-колокол не звонит.
 

CHERTS

Moderator
Команда форума
Соберите UDK исключительно на библиотеках китайцев.
Иначе Вы вечно будете чего-то доделывать и вечно будет что-то не стыковаться
А там итак на текущий момент только SDK от китайцев и все равно при обновлении китайской SDK некоторые примеры перестают собираться. Тут либо мне самому приходиться исправлять код примеров, чтобы он собирался с новой SDK, либо ждать пока это сделает автор оригинальных исходников, как например esphttpd - он как раз и не собирается с новой SDK, а автор проекта судя по всему плюнул на него.
 

pvvx

Активный участник сообщества
Соберите UDK исключительно на библиотеках китайцев.
Иначе Вы вечно будете чего-то доделывать и вечно будет что-то не стыковаться.
Если собирать на библиотеках от SDK, то требуется flash от 1 Мегабайт, а у народу модули с 512 кило.
И либы SDK без патчей не работоспособны и для большинства проектов не годятся из-за лишнего никому не нужного глючного наполнения.
Как пример - ваша горячо любимая NodeMCU совсем никуда не лезет со стандартными либами и её любители уже дано визжат и похрюкивают на сайте ESP32. Но там пока для заманухи кинули только RTOS.
 

pvvx

Активный участник сообщества
Соберите UDK исключительно на библиотеках китайцев.
К SDK уже приложен makefile именно по вашей системе. Ранее я давал его переделку как Root Level Makefile. От туда и появилась эта надпись.
Т.е. всё это уже проходили, а итог стал такой, как удобнее CHRERTS для сборки разных проектов в его UDK.
Мне например не нужен каталог C:\Espressif\examples вообще.
 
Сверху Снизу