Найти в Дзене

JieLi Bluetooth Smart Speakers Developing: Getting Started with AC696N Speaker SoCs(1)

Начало работы с AC696N Speaker SoCs Отладка — важнейшая часть разработки встроенных систем. Для серии SoC AC696N SDK предоставляет гибкую и многоуровневую систему управления выводом отладочной информации. Это руководство познакомит вас с ключевыми настройками для управления отладочным выводом. 1. Управление выводом Главный выключатель всего отладочного вывода находится в файле app_config.h. // app_config.h
#ifndef CONFIG_DEBUG_ENABLE
// Управление глобальным отладочным выводом здесь
#endif Вывод отладочной информации для библиотек можно контролировать отдельно в app_config.h. // app_config.h
#ifdef CONFIG_RELEASE_ENABLE
#define LIB_DEBUG 1
#else
#define LIB_DEBUG 1
#endif Модуль логирования (log.h) поддерживает несколько уровней серьезности. Определения уровней (0–6): // log.h
#define __LOG_VERB 0 // Verbose (Подробный)
#define __LOG_DEBUG 1 // Debug (Отладка)
#define __LOG_INFO 2 // Info (Информация)
#define __LOG_WARN 3 // Warning (Предупр
Оглавление

Начало работы с AC696N Speaker SoCs

Отладка — важнейшая часть разработки встроенных систем. Для серии SoC AC696N SDK предоставляет гибкую и многоуровневую систему управления выводом отладочной информации. Это руководство познакомит вас с ключевыми настройками для управления отладочным выводом.

1. Управление выводом

a. Главный переключатель отладки (Global Print Switch)

Главный выключатель всего отладочного вывода находится в файле app_config.h.

// app_config.h
#ifndef CONFIG_DEBUG_ENABLE
// Управление глобальным отладочным выводом здесь
#endif

b. Отладочный вывод библиотек (LIB_DEBUG)

Вывод отладочной информации для библиотек можно контролировать отдельно в app_config.h.

// app_config.h
#ifdef CONFIG_RELEASE_ENABLE
#define LIB_DEBUG 1
#else
#define LIB_DEBUG 1
#endif

c. Система логирования и управление уровнем

Модуль логирования (log.h) поддерживает несколько уровней серьезности.

Определения уровней (0–6):

// log.h
#define __LOG_VERB 0
// Verbose (Подробный)
#define __LOG_DEBUG 1
// Debug (Отладка)
#define __LOG_INFO 2
// Info (Информация)
#define __LOG_WARN 3
// Warning (Предупреждение)
#define __LOG_ERROR 4
// Error (Ошибка)
#define __LOG_CHAR 5
// Character output (Символьный вывод)

Фильтр уровней:
Установите __LOG_LEVEL, чтобы контролировать, какие сообщения выводятся. Будут появляться только сообщения с уровнем
большим или равным этому порогу.

#ifdef CONFIG_RELEASE_ENABLE
#undef __LOG_LEVEL
#define __LOG_LEVEL 0
// Допустимый диапазон: 0–6. Пример: 0 включает все уровни.
#endif

API логирования (использование идентично printf):

log_v("verbose message"); // Уровень 0
log_d("debug message");
// Уровень 1
log_i("info message");
// Уровень 2
log_w("warning message");
// Уровень 3
log_e("error message");
// Уровень 4
log_c("character output");
// Уровень 5

Контроль уровня логирования для модулей:
Каждый модуль может определить свой собственный порог уровня логирования для более детального управления.

-2
-3

d. Цветной вывод

Следующие макросы обеспечивают цветной (и мигающий) вывод в лог. Важно: глобальный уровень логирования должен быть установлен в 0 для их работы.

// log.h
// Стандартный цветной вывод (красный, зеленый, желтый)
#define r_printf(x, ...) log_i("\e[31m\e[1m" x "\e[0m", ## __VA_ARGS__)
#define g_printf(x, ...) log_i("\e[32m\e[1m" x "\e[0m", ## __VA_ARGS__)
#define y_printf(x, ...) log_i("\e[33m\e[1m" x "\e[0m", ## __VA_ARGS__)

// Мигающий цветной вывод (красный, зеленый, желтый)
#define r_f_printf(x, ...) log_i("\e[31m\e[5m\e[1m" x "\e[0m", ## __VA_ARGS__)
#define g_f_printf(x, ...) log_i("\e[32m\e[5m\e[1m" x "\e[0m", ## __VA_ARGS__)
#define y_f_printf(x, ...) log_i("\e[33m\e[5m\e[1m" x "\e[0m", ## __VA_ARGS__)

e. Метки времени при включении питания

Включите или отключите вывод сообщений с метками времени во время загрузки в файле lib_system_config.c.

// lib_system_config.c
/// Включить/отключить метки времени в выводе сообщений
const int config_printf_time = 1;
// 1 = включить, 0 = отключить

f. Система утверждений (Assertion)

Механизм утверждений (assert) помогает отлавливать ошибки времени выполнения. Настройте его в lib_system_config.c.

// lib_system_config.c
/// Включить/отключить вывод утверждений при исключении
#ifdef CONFIG_RELEASE_ENABLE
const int config_asser = 1;
#else
const int config_asser = 1;
#endif

Использование утверждений:

  1. Диагностика сбоев: Когда срабатывает утверждение, обратитесь к выводу последовательного отладчика для поиска причины.
  2. Поиск места сбоя:
    Сообщение утверждения часто содержит адрес.
    Сопоставьте этот адрес с файлом
    sdk.lst, чтобы найти соответствующую функцию или API.

Генерация sdk.lst:

-4

Добавьте следующую команду в ваш download.c (или скрипт сборки) для создания списка символов:

makefile

%OBJDUMP% -D -address-mask=0x1ffffff -print-dbg %ELFFILE% > sdk.lst

Итог

Правильная настройка системы вывода и отладки — первый шаг в разработке для AC696N. Настраивая главный выключатель, уровни логирования, цветной вывод, метки времени и утверждения, разработчики могут эффективно отслеживать выполнение кода и диагностировать проблемы. Многоуровневая структура позволяет контролировать детализацию от общего (глобального) до частного (уровень модуля), балансируя между потребностями отладки и производительностью финальной версии.