Перейти до змісту

Підготовка проєкту та код

Я сподіваюсь ви встановили все необхідне. Тепер треба отримати заготовку, яку можна спокійно скомпілювати, а потім вже дописувати своє. Одного main.rs тут недостатньо, адже no_std потребує ще налаштування target, лінкера та точки входу.

З чого зараз краще почати

У репозиторії є маленькі самостійні приклади. Для першого запуску беріть examples/basics/: дисплей, кнопка A і нічого зайвого.

З кореня своєї копії LilkaOxide:

cd examples/basics
cargo +esp build --release --locked

Збірка не прошиває пристрій. Якщо все пройшло, подивіться повний код і очікуваний результат, а вже потім запускайте cargo +esp run --release --locked.

Чому саме з теки прикладу

Cargo шукає .cargo/config.toml від поточної теки вгору. У прикладах там заданий Xtensa target та лінкер. --manifest-path з кореня сам по собі не змушує Cargo прочитати конфігурацію всередині пакета.

А генератор шаблону?

Він є:

cargo generate --git https://gitlab.com/imbiruss/lilkaoxide.git template

Але поточний шаблон ще має розбіжності з API, зокрема для async-ініціалізації та allocator без heap. Тому як перевірену початкову точку зараз використовуйте examples/basics/ або examples/async-counter/. Обрані в генераторі опції не означають, що це default features самого SDK.

Як зробити свій окремий проєкт

Можна скопіювати цілу теку прикладу за межі workspace та змінити name в Cargo.toml. Копіювати треба і приховану .cargo/, а не тільки src/. Для Linux/macOS, з кореня репозиторію:

cp -R examples/basics ../my-lilka
cd ../my-lilka

У скопійованому Cargo.toml виправте залежність lilkaoxide: шлях ../../sdk-hal вже не веде в потрібне місце. Якщо вихідна тека називалась lilkaoxide, а нова лежить поряд з нею, буде path = "../lilkaoxide/sdk-hal". На Windows можна скопіювати теку звичайним файловим менеджером, включно з .cargo.

Також додайте профіль збірки, адже в репозиторії він задається спільним Cargo.toml, а в окремий проєкт сам не переїде:

[profile.release]
opt-level = "s"
lto = "fat"
codegen-units = 1

Перший раз виконайте cargo +esp build --release без --locked, щоб створити власний Cargo.lock. Далі зберігайте його разом з прошивкою і використовуйте --locked, щоби випадкове оновлення залежностей не змінило результат збірки.

Що далі

Спочатку розберіться зі структурою проєкту, потім з features та конфігурацією. Після цього можна переходити до пам'яті, периферії та асинхронних задач.

Якщо код вже є, але щось не запускається — є окрема сторінка збірки та налагодження. Самі приклади показують завершені програми, а цей розділ пояснює, чому вони саме так влаштовані.