Clone
4
BuildGuide
ua1zbe edited this page 2026-04-12 01:15:14 +03:00
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