Page:
BuildGuide
Clone
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Руководство по сборке
Требования
Программное обеспечение
| Компонент | Версия | Установка |
|---|---|---|
| arm-none-eabi-gcc | 9.2.1+ | sudo apt-get install gcc-arm-none-eabi |
| GNU Make | 4.0+ | Обычно предустановлен |
| Python 3 (опционально) | 3.6+ | sudo apt-get install python3 |
| crcmod (опционально) | — | pip install crcmod |
Проверка тулчейна
arm-none-eabi-gcc --version
# Ожидаемый вывод:
# arm-none-eabi-gcc (15:9-2019-q4-0ubuntu1) 9.2.1 20191025 (release)
Конфигурация сборки
Все опции задаются в Makefile через переменные ENABLE_*.
Ключевые опции
# Основные функции
ENABLE_FMRADIO ?= 1 # FM-радио приёмник
ENABLE_SPECTRUM ?= 1 # Спектр-анализатор
ENABLE_POCSAG ?= 1 # POCSAG декодер
ENABLE_RSSI_BAR ?= 1 # Индикатор RSSI
# Оптимизация
ENABLE_LTO ?= 1 # Link Time Optimization (экономия ~10 КБ)
ENABLE_OVERLAY ?= 0 # SRAM overlay (несовместимо с LTO)
# Отключённые модули (для экономии Flash)
ENABLE_DTMF_CALLING ?= 0 # DTMF вызовы
ENABLE_VOICE ?= 0 # Голосовые подсказки
ENABLE_NOAA ?= 0 # NOAA метеорология
ENABLE_ALARM ?= 0 # Сигнализация
ENABLE_TX1750 ?= 0 # Тон 1750 Гц
ENABLE_FLASHLIGHT ?= 0 # Фонарик
ENABLE_VOX ?= 0 # VOX (голосовая активация)
Экономия Flash
Если прошивка не помещается в 60 КБ, отключите в порядке убывания экономии:
| Опция | Экономия | Что теряется |
|---|---|---|
ENABLE_SPECTRUM = 0 |
~5 КБ | Спектр-анализатор |
ENABLE_POCSAG = 0 |
~4 КБ | POCSAG декодер |
ENABLE_FMRADIO = 0 |
~2 КБ | FM-радио |
ENABLE_BIG_FREQ = 0 |
~1 КБ | Крупный шрифт частоты |
ENABLE_RSSI_BAR = 0 |
~500 Б | Индикатор RSSI |
Команды сборки
Полная сборка
cd uv-k5-ua1zbe-firmware
make clean && make
Параллельная сборка (быстрее)
make -j4
Только компиляция (без линковки)
make -j4 firmware
Проверка размера
arm-none-eabi-size firmware
# text data bss dec hex filename
# 57708 204 3364 61276 ef5c firmware
Проверка переполнения Flash
SIZE=$(wc -c < firmware.bin)
if [ $SIZE -gt 61440 ]; then
echo "OVERFLOW! $SIZE > 61440"
else
echo "OK: $SIZE / 61440 bytes"
fi
Флаги компилятора
| Флаг | Описание |
|---|---|
-Os |
Оптимизация по размеру кода |
-flto=auto |
Link Time Optimization |
-Wall -Wextra -Werror |
Все предупреждения = ошибки |
-std=gnu11 |
Стандарт C с расширениями GNU |
-mcpu=cortex-m0 |
Целевой процессор |
-fno-builtin |
Не использовать встроенные функции |
-fshort-enums |
Минимальный размер enum |
--specs=nano.specs |
Newlib-nano (меньше размер) |
Дата сборки
Дата автоматически подставляется из системы:
#define BUILD_DATE "2026-04-12"
Используется в заставке при старте (третья строка).
Известные проблемы сборки
Ошибка: [[fallthrough]] not supported
Симптом:
error: expected expression before '[' token
[[fallthrough]];
Решение: Заменить на __attribute__((fallthrough)) во всех файлах:
sed -i 's/\[\[fallthrough\]\]/__attribute__((fallthrough))/g' \
radio.c audio.c app/menu.c app/dtmf.c app/chFrScanner.c
Ошибка: static_assert в C99
Симптом:
error: expected declaration specifiers or '...' before '(' token
Решение: Использовать -std=gnu11 вместо -std=c99 (уже исправлено в Makefile).
Отладочные команды
Просмотр символов в прошивке
arm-none-eabi-nm --size-sort firmware | tail -30
Дизассемблер функции
arm-none-eabi-objdump -d firmware | grep -A20 "<POCSAG_FeedSample>:"
Размер каждой секции
arm-none-eabi-size -A firmware | sort -n -k2 | tail -20
Количество функций после LTO
arm-none-eabi-nm firmware | grep " [Tt] " | wc -l