Работа с проектом

Сборка

# Для запуска сборки, нужно запустить скрипт b:
# Написать путь к скрипту b.
./b

Запуск

# Аналогично запуску сборки, запуск собранного приложения.
./build/bin/app

Сборка и запуск

# Аналогично
./b && ./build/bin/app

Структура файлов

Общая:

Путь Назначение
./b Скрипт сборки проекта
./CmakeLists.txt Файл описывающий сборку проекта на cmake
./src/CmakeLists.txt Файл описывающий сборку директории ./src на cmake
./compile_commands.json Сгенерированный файл, необходимый для поддержки ide фич при разработке проекта
./build Директория с кэшом сборки и бинарником
./build/bin/app Итоговый файл сборки (бинарник)
./src Директория с исходниками проекта

Исходников (в src):

Путь Назначение
./main.cpp Главный файл, откуда происходит запуск приложения.
./ptos.h Функции, отвечающие за взаимодействие с операционкой. (Эмулированный интерфейс ptos'а через linux)
./gpio/gpio_interface.h Интерфейс gpio (Описание того, что из себя представляет gpio).
./gpio/gpio_cli.h Интерфейс класса Gpio_cli, реализующий Gpio_interface.
./gpio/gpio_cli.cpp Реализация класса Gpio_cli.
./numeric_blinker/numeric_blinker.h Интерфейс класса необходимый реализовать.
./numeric_blinker/numeric_blinker.cpp Реализация класса необходимую реализовать.

Заметки

Файл ./compile_commands.json не нужен, но может понадобится, если захочется использовать lsp (language server protocol). lsp - добавляет фичи текстовому редактору (ide фичи). Пока это тебе не нужно.


Собери и запустить проект. Посмотри, что происходит.


Почитай и попробуй понять исходники (cpp, h файлы).


Попробуй поменять в main.cpp

bool clear_terminal = false;
Gpio_cli gpio(clear_terminal);
// на
bool clear_terminal = true;
Gpio_cli gpio(clear_terminal);

Посмотри что изменится. При true, терминал очищается при изменеии светодиода. При false нет.

Нам нужно чтобы терминал очищался и светодиод был на месте, но если терминал очищается, то все логи (cout), будут тоже стираться.

Поэтому я оставил возожность менять поведение через флаг.


Первым делом. Попробуй, чтобы светодиод мигал. Используй ptos::delay.

На самом деле ptos::delay использоваться в твоей задаче не должен, но чтобы получилось что-то простое, можно его временно использовать.