Урок 3. Проект ESP-IDF. Создание простого проекта.

Уроки ESP32

В уроке рассмотрим структуру проекта ESP-IDF. Создадим шаблон для простого проекта.

Предыдущий урок     Список уроков     Следующий урок

Система ESP-IDF для сборки программы из исходного кода использует утилиту CMake. Она позволяет объединять проекты в сложные иерархические структуры. При этом каждый подпроект является самостоятельным проектом, который может в свою очередь сам состоять из подпроектов. Это позволяет сложную программу разбить на модули, которые могут быть разработаны и отлажены отдельно и разными программистами.

 

Проект ESP-IDF – это проект CMake. В дальнейшем я буду рассказывать о нем относительно именно системы ESP-IDF.

 

Общая структура проекта ESP-IDF.

- myProject/
             - CMakeLists.txt
             - sdkconfig
             - components/ - component1/ - CMakeLists.txt
                                         - Kconfig
                                         - src1.c
                           - component2/ - CMakeLists.txt
                                         - Kconfig
                                         - src1.c
                                         - include/ - component2.h
             - main/       - CMakeLists.txt
                           - src1.c
                           - src2.c

             - build/

В каждом каталоге исходного кода проекта содержится файл CMakeLists.txt. Он определяет, что должна делать система сборки в этом каталоге. Он также задает, какие подкаталоги должны обрабатываться при сборке. С точки зрения IDE любой файл CMakeLists.txt является проектом, с которым можно работать отдельно.

  • Файл CMakeLists.txt верхнего уровня содержится в корневом каталоге, на вершине иерархической структуры. Это основной файл, который определяет для CMake правила и цели сборки, хранит информацию, из каких подпроектов состоит проект, устанавливает переменные для всего проекта. Он содержит ссылку на файл /tools/cmake/project.cmake, который завершает сборку программы. Также он определяет имя проекта.
  • Файл конфигурации проекта sdkconfig содержит конфигурацию компонентов проекта, включая ESP-IDF. Он создается или обновляется при запуске idf.py. В нем значения различных параметров: адреса, размеры памяти, времена задержек и таймаутов , скорости обмена, режимы и прочее.
  • Необязательный каталог components содержит компоненты, которые являются частью проекта. Проект необязательно должен содержать пользовательские компоненты. Но такой способ определения удобен для создания структурного кода, который будет использоваться в других приложениях или для программных элементов, не являющихся частью ESP-IDF. В принципе эту операцию можно выполнить в файле CMakeLists.txt верхнего уровня директивой EXTRA_COMPONENT_DIRS. Но при большом количестве исходных файлов проекта лучше сгруппировать компоненты в специальном каталоге.
  • Каталог main содержит исходный код самого проекта. main – имя по умолчанию. Оно может быть изменено переменной COMPONENT_DIRS.
  • Каталог build создается idf.py. В нем содержится результат сборки и компиляции проекта в виде двоичных файлов. Кроме того там оказываются промежуточные объектные файлы и библиотеки.
  • Каждый каталог содержит свой файл CMakeLists.txt. Он содержит определения переменных для управления процессом сборки подпроекта и его интеграции в общий проект.
  • Каждый каталог может также содержать файл Kconfig, определяющий параметры конфигурации компонента. Некоторые компоненты могут включать файлы Kconfig.projbuild и project_include.cmake, которые являются специальными файлами  для переопределения частей проекта.

 

Минимальный вариант проекта ESP-IDF.

Давайте посмотрим, из каких элементов состоит минимальный вариант проекта на примере blink1, который мы создали при установке программного обеспечения.

Вот как выглядит корневой каталог проекта у меня.

Папка blink1

Файл верхнего уровня CMakeLists.txt.

# The following five lines of boilerplate have to be in your project's
# CMakeLists in this exact order for cmake to work correctly

cmake_minimum_required(VERSION 3.5)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(blink)

Это и есть минимальный вариант CMakeLists.txt.

  • Символом # в CMake определятся комментарии. В первых двух строках написано ”Следующие пять строк должны быть в файле CMakeLists вашего проекта именно в таком порядке”.
  • cmake_minimum_required(VERSION 3.5) сообщает CMake минимальную версию, которая требуется для сборки проекта. ESP-IDF. Директива должна быть первой строкой в файле CMakeLists.txt.
  • include($ENV{IDF_PATH}/tools/cmake/project.cmake) включает остальные функции CMake для настройки проекта, обнаружения всех компонентов и т. д.
  • project(blink) создает сам проект и указывает его имя. Имя проекта будет использовано для выходных двоичных файлов myProject.elf, myProject.bin. В каждом файле CMakeLists.txt может быть определен только один проект.

Об остальные переменных для файлов CMakeLists.txt поговорим по мере необходимости.

Файл sdkconfig можете открыть и посмотреть, что там. Все параметры сопровождены комментариями.

Каталог main.

У меня выглядит так.

Папка main

Файл CMakeLists.txt (не верхнего уровня).

Откроем  CMakeLists.txt из каталога main.

idf_component_register(SRCS "blink.c"
INCLUDE_DIRS ".")

  • SRCS "blink.c" - список исходных файлов (* .c, * .cpp, * .cc, * .S). Эти файлы будут компилированы в библиотеку компонентов. В общем случае файлов может быть несколько. Они перечисляются через пробел.
  • INCLUDE_DIRS "."  - список каталогов, которые необходимо добавить к глобальному пути поиска для любого компонента, которому требуется этот компонент, а также для исходного файла main.

Makefile

#
# This is a project Makefile. It is assumed the directory this Makefile resides in is a
# project subdirectory.
#

PROJECT_NAME := blink
include $(IDF_PATH)/make/project.mk

Makefile – файл, который содержит информацию для утилиты make о том, как компилировать программу и компоновать.

Пока достаточно. Разработчики ESP-IDF советуют создавать свои проекты с помощью примеров, которые они предлагают.

 

Шаблон для простых проектов.

Давайте создадим шаблон для простых проектов.

В папке Project я создал каталог template.

В нем – каталог main.

Папка template

Добавил минимальный вариант CMakeLists.txt. Последняя строка в нем

project(project_name)

Еще создал файл sdkconfig.defaults на случай, если захочется добавить свои настройки.

Добавил стандартный Makefile с измененной строкой:

PROJECT_NAME := project_name

В каталоге main:

Создал файл app_main.c

Хороший стиль main-файл называть не именем проекта. Он должен быть одинаков для всех проектов.

Добавим стандартный для каталога main файл CMakeLists.txt. Имя укажем app_main.c

Вот что получилось.

Папка main

Загрузить шаблон простого проекта можно по ссылке:

 

Зарегистрируйтесь и оплатитеВсего 60 руб. в месяц за доступ ко всем ресурсам сайта!
 

Теперь из шаблона создадим наш новый проект our_blink.

Создадим папку our_blink и скопируем в нее все из template.

  • Изменим имя проекта (project_nameв CMakeLists.txt на our_blink
  • Изменим имя проекта (project_nameв Makefile на our_blink

Все. Вот что получилось у меня.

 

Зарегистрируйтесь и оплатитеВсего 60 руб. в месяц за доступ ко всем ресурсам сайта!
 

Компилируем.

Окно IDE

Все нормально. Проект собрался без ошибок.

 

Что будет в следующем уроке, пока не знаю. Как построить структуру уроков еще не решил.

Предыдущий урок     Список уроков     Следующий урок

1

Автор публикации

не в сети 6 часов

Эдуард

285
Комментарии: 1945Публикации: 197Регистрация: 13-12-2015

3 комментария на «Урок 3. Проект ESP-IDF. Создание простого проекта.»

  1. Спасибо! Ждём новые уроки и подробности! Если угодно, можете построить уроки как Ардуино, было очень удобно и интересно!

    0

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить" Вы даёте свое согласие на обработку введенной персональной информации в соответствии с Федеральным Законом №152-ФЗ от 27.07.2006 "О персональных данных".