ULF21 0 19 декабря, 2016 Опубликовано 19 декабря, 2016 · Жалоба Здравствуйте Периодически программа попадает в HardFault_Handler При этом в регистре HFSR выставлен бит FORCED и в регистре UFSR выставлен бит UNALIGNED. То есть возникает отказ программы - usage fault который приводит в обработчик HardFault_Handler. В проекте используется STM32F417, FreeRtos, LWIP. В большинстве случаев при ошибке в стеке находятся функции LWIP. Ошибка возникает крайне редко один раз в несколько дней. Программа компилируется с флагом --no_unaligned_access. Из-за чего возникает ошибка понятно - при использовании некоторых инструкций обращения к памяти с выставленной единицей в младших битах может возникать такая ошибка. Неясно почему возникает такая ошибка с включённым флагом --no_unaligned_access да ещё и раз в несколько дней и второе возможно ли обработать или игнорировать эту ошибку и продолжить выполнение программы дальше? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
minimumlaw 0 19 декабря, 2016 Опубликовано 19 декабря, 2016 · Жалоба Можно и обработать и продолжить. Документация по ядру ARM cortex-[какой-там-у-вас] вам в помощь. Для Uboot и linux в свое время невыравненный доступ именно так и делался (перехватом HardFault и возвратом назад с нужными значениями, полученными побайтно). Персонально у меня готового решения нет. Почему ток происходить? А сам lwip как собирается? А пакеты нормальные приходят? Может раз в день битый пакет ловим (и не фильтруем)? Луна в козероге в конце концов. Маловероятно что вот так кто-то разберется что у вас происходит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novikovfb 17 19 декабря, 2016 Опубликовано 19 декабря, 2016 · Жалоба Почему происходит: Вероятно, где-то в программе есть нехорошие манипуляции с указателями (указатель на char присваивается указателю на int и т.п.). По-хорошему, ошибку надо найти и исправить, потому что не исключены неправильные результаты без HARD FAULT. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
krux 8 19 декабря, 2016 Опубликовано 19 декабря, 2016 · Жалоба поскольку всё равно Программа компилируется с флагом --no_unaligned_access. предлагаю выкинуть по тексту все char и им подобные, а использовать только 32-разрядные переменные в чистом виде. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться