1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/Armink-CmBacktrace

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
9 месяцев назад
4 месяцев назад
4 месяцев назад
4 месяцев назад
Loading...
README.md

CmBacktrace: библиотека для отслеживания ошибок в серии микроконтроллеров ARM Cortex-M

中文页 | English

GitHub release GitHub commits MIT licensed

0. Что такое CmBacktrace

CmBacktrace (Cortex Microcontroller Backtrace) — это библиотека с открытым исходным кодом, которая автоматически отслеживает и определяет коды ошибок для микроконтроллеров серии ARM Cortex-M, а также автоматически анализирует причины ошибок. Основные функции включают:

  • Поддержка следующих типов ошибок:

    • Assert;
    • Fault (Hard Fault, Memory Management Fault, Bus Fault, Usage Fault, Debug Fault).
  • Автоматическая диагностика причины сбоя: при возникновении сбоя можно автоматически проанализировать причину сбоя и определить местоположение кода сбоя без необходимости вручную анализировать сложные регистры неисправностей;

  • Вывод стека вызовов функций на сайте ошибки (необходимо сотрудничать с инструментом addr2line для точного позиционирования), восстановление информации о поле при возникновении ошибки, более быстрое и точное определение местоположения проблемного кода и логики. Вы также можете использовать библиотеку в обычных условиях для получения текущего стека вызовов функций;

  • Поддержка «голого металла» и следующих платформ операционных систем:

  • В зависимости от состояния сцены ошибки вывод соответствующего стека потоков или основного стека C;

  • Информация о диагностике неисправностей поддерживает несколько языков (в настоящее время: упрощённый китайский, английский);

  • Адаптируется к микроконтроллерам Cortex-M0/M3/M4/M7;

  • Поддерживает компиляторы IAR, KEIL, GCC.

1. Почему стоит выбрать CmBacktrace?

Новичок: Для новичков, которые переходят от простых микроконтроллеров, таких как C51 и MSP430, к более сложным ARM, вероятность «hard falut» смерти время от времени может ошеломить новичков. Метод определения ошибок часто заключается в подключении к эмулятору, пошаговом выполнении F10/F11, определении конкретного кода ошибки, а затем предположении, устранении и обдумывании причины ошибки. Этот процесс очень болезненный.

Опытный ветеран: Постепенно все узнают, что причину неисправности и адрес кода неисправности можно определить по информации регистра неисправностей. Хотя это может решить небольшую часть проблемы, повторяющийся и утомительный процесс анализа также займёт много времени. Более того, для некоторых сложных проблем невозможно решить только по адресу кода, и необходимо восстановить логическую связь между вызовами функций в ошибочной сцене. Хотя стек вызовов функций можно просмотреть, подключившись к эмулятору, его нельзя отобразить в состоянии неисправности, поэтому необходимо пошагово выполнять F10/F11 для определения кода ошибки. Кроме того, есть два сценария:

  1. Эмулятор должен быть отключён при отладке многих продуктов;
  2. Проблема действительно существует, но её чрезвычайно трудно воспроизвести.

Поэтому определить такие проблемы ещё сложнее.

Используйте эту библиотеку: Все вышеперечисленные проблемы можно легко решить. Сообщение об ошибке можно вывести на консоль, а сообщение об ошибке также можно сохранить с помощью функции Log EasyFlash во Flash, последнее сообщение об ошибке всё ещё можно прочитать после сбоя устройства и перезапуска. Информация, выводимая CmBacktrace, включает в себя стек вызовов функций, результаты диагностики неисправностей, стек, регистр неисправностей и информацию о прошивке продукта, что значительно повышает эффективность и точность определения местоположения ошибок.

Как говорится, работник должен сначала наточить свои инструменты, если он хочет хорошо выполнять свою работу. Поэтому иногда причина низкой эффективности может заключаться в том, что вы будете использовать слишком мало видов инструментов.

Сотрудничество, вклад: Разработка открытого исходного кода. Программное обеспечение неотделимо от поддержки каждого. Вы можете вносить больше предложений, и надеемся, что больше людей присоединится и будет улучшать проект вместе с вами.

Если вы считаете этот проект с открытым исходным кодом отличным, вы можете нажать Project Homepage (Github|OSChina|Coding) и поставить звёздочку в правом верхнем углу. Одновременно порекомендуйте его друзьям, которые в нём нуждаются.

2. Как использовать CmBacktrace

2.1 Демо

Демонстрация разделена на следующие шаги:

  1. Создание исключения деления на ноль (IAR project, нажмите для просмотра исходного кода).
  2. Просмотр информации об ошибке диагностики.
  3. Просмотр базовой информации о стеке вызовов функций.
  4. Введите путь, где хранится исполняемый файл проекта, через инструмент командной строки.
  5. Используйте команду addr2line для просмотра деталей стека вызовов функций и определения местоположения кода ошибки.

cm_backtrace_demo.

2.2 Демо

Каталог Платформа Ссылка
\demos\non_os\stm32f10x bare metal STM32 Cortex-M3 нажмите для просмотра
\demos\os\rtthread\stm32f4xx RT-Thread STM32 Cortex-M4 Нажмите для просмотра
\demos\os\ucosii\stm32f10x UCOSII STM32 Cortex-M3 Нажмите для просмотра
\demos\os\freertos\stm32f10x FreeRTOS STM32 Cortex-M3 Нажмите для просмотра

2.3 Инструкции по переносу

2.3.1 Подготовка

  1. Проверьте, есть ли подходящая демонстрация в каталоге \demos, если есть похожая, рекомендуется модифицировать её на основе существующей.
  2. Определите операционную систему/платформу bare metal и платформу процессора.
  3. Добавьте все исходные файлы из \src в проект продукта и убедитесь, что каталог исходного кода добавлен в путь к файлу заголовка.
  4. Файл сборки cmb_fault.s (нажмите для просмотра) можно опционально добавить в проект. После добавления необходимо закомментировать исходный проект HardFault_Handler.
  5. Поместите функцию cm_backtrace_init в место инициализации проекта для выполнения.
  6. Поместите cm_backtrace_assert в функцию утверждения проекта для выполнения. Для конкретного использования обратитесь к описанию API ниже.
  7. Если файл сборки cmb_fault.s не включён на шаге 4, необходимо поместить cm_backtrace_fault в функцию обработки ошибок проекта (например, HardFault_Handler) для выполнения. Подробности см. в описании API ниже.

2.3.2 Инструкции по настройке

Имя файла конфигурации: cmb_cfg.h, пользователи должны настраивать его самостоятельно для разных платформ и сценариев. Общие конфигурации следующие:

Имя конфигурации Функция Примечания
cmb_println(...) Вывод информации об ошибках и диагностике Должна быть настроена
CMB_USING_BARE_METAL_PLATFORM Используется ли на платформе bare metal Определите этот макрос, если он используется
CMB_USING_OS_PLATFORM Используется ли на платформе операционной системы Операционная система и bare metal должны выбрать одну из двух
CMB_OS_PLATFORM_TYPE Платформа операционной системы RTT/UCOSII/UCOSIII/FREERTOS
CMB_CPU_PLATFORM_TYPE Платформа процессора M0/M3/M4/M7
CMB_USING_DUMP_STACK_INFO Использовать ли функцию дампа стека Используйте для определения этого макроса
CMB_PRINT_LANGUAGE Язык вывода информации CHINESE/ENGLISH

Примечание: Содержание вышеуказанной конфигурации можно выбрать в cmb_def.h, пожалуйста, прочитайте исходный код для более гибкой настройки.

2.4 Описание API

2.4.1 Библиотека Инициализация

void cm_backtrace_init(const char *firmware_name, const char *hardware_ver, const char *software_ver)
Параметр Описание
firmware_name Имя прошивки, которое должно соответствовать имени прошивки, сгенерированному компилятором
hardware_ver Номер версии оборудования, соответствующий прошивке
software_ver Версия программного обеспечения прошивки

Примечание: указанные выше входные параметры будут выводиться в случае утверждения или сбоя, в основном для ретроспективных целей.

2.4.2 Получение стека вызовов функций

size_t cm_backtrace_call_stack(uint32_t *buffer, size_t size, uint32_t sp)
Параметр Описание
buffer Буфер для хранения стека вызовов функций
size Размер буфера
sp Указатель стека, который должен быть получен

Пример:

/* Создаём буфер стека вызовов функций глубиной 16, глубина не должна превышать CMB_CALL_STACK_MAX_DEPTH (по умолчанию 16) */
uint32_t call_stack[16] = {0};
size_t i, depth = 0;
/* Получаем стек вызовов функций в текущей среде, каждый элемент будет сохранён как 32-битный адрес, а depth — фактическая глубина стека вызовов функций */
depth = cm_backtrace_call_stack(call_stack, sizeof(call_stack), cmb_get_sp());
/* Выводим текущую информацию о стеке вызовов функций
 * Примечание: при просмотре имени функции и конкретной строки номера необходимо использовать инструмент addr2line для преобразования */
for (i = 0; i <depth; i++) {
    printf("%08x ", call_stack[i]);
}

2.4.3 Отслеживание сообщений об ошибках утверждений

void cm_backtrace_assert(uint32_t sp)
Параметр Описание
sp Указатель стека при утверждении среды

Примечание: входной параметр SP должен быть получен внутри функции утверждения как можно больше и как можно ближе к началу функции утверждения. При использовании во вложенной функции функции утверждения (например, в методе перехвата утверждения RT-Thread) из-за вложенности функции происходит регистрация стека, и в это время SP изменяется, требуется ручная настройка (добавление и вычитание фиксированного значения отклонения) в значение параметра, поэтому новичкам не рекомендуется использовать эту функцию во вложенной функции утверждения.

2.4.4 Отслеживание информации об ошибке

void cm_backtrace_fault(uint32_t fault_handler_lr, uint32_t fault_handler_sp)
Параметр Описание
fault_handler_lr Значение регистра LR в среде функции обработки ошибок
fault_handler_sp Значение указателя стека в среде функции обработки ошибок

Эту функцию можно вызвать в функции обработки ошибок (например: HardFault_Handler). Кроме того, сама библиотека предоставляет файлы сборки, обработанные HardFault (нажмите, чтобы просмотреть, вам нужно выбрать в соответствии с вашим собственным компилятором), метод cm_backtrace_fault автоматически вызывается в случае ошибки. Поэтому при переносе проще всего использовать файл сборки напрямую.

2.5 FAQ

2.5.1 Ошибка компиляции, предполагающая, что требуется поддержка C99

Нажмите, чтобы посмотреть учебник: Поддержка Open Keil/IAR/GCC C99 за один шаг

2.5.2 Как просмотреть конкретное имя и номер строки кода функции в стеке вызовов функций?

Нажмите, чтобы посмотреть учебник: Как использовать инструмент addr2line для получения сведений о стеке вызовов

2.5.3 Функция обработки ошибок: повторное определение HardFault_Handler

Когда используется предоставленный этой библиотекой файл сборки cmb_fault.s, поскольку HardFault_Handler уже определён в файле сборки, если эта функция определена где-либо ещё в проекте, будет выдана ошибка повторного определения HardFault_Handler. В настоящее время есть два решения:

  1. Закомментировать/удалить функцию HardFault_Handler, определённую в других файлах, и

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Библиотека отслеживания ошибок для микроконтроллеров серии ARM Cortex-M. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники (13)

все

Недавние действия

Загружен новый тег 1.4.1 4 месяца назад
Загружен новый тег 1.4.0 4 месяца назад
Загружен новый тег 1.3.0 4 месяца назад
Загружен новый тег 1.2.0 4 месяца назад
Загружен новый тег 1.1.0 4 месяца назад
Загрузить больше
Больше нет результатов для загрузки
1
https://gitlife.ru/oschina-mirror/Armink-CmBacktrace.git
git@gitlife.ru:oschina-mirror/Armink-CmBacktrace.git
oschina-mirror
Armink-CmBacktrace
Armink-CmBacktrace
master