|
0 / 0 / 0
Регистрация: 03.05.2012
Сообщений: 14
|
|
stm32f103 + FreeRTOS непонятный hard fault и ещё кое что14.06.2016, 13:35. Показов 5353. Ответов 4
Метки нет (Все метки)
Делаю программу для управления двигателем. В основе stm32f103c8t6 на нём FriiRTOS 8 версии. Есть не периодическая задача обработки данных из CAN. Также есть 3 периодических: опрос датчика тока, обработка ПИД регулятора пересчёт текущей скорости или положения вала, т.к. в виде обратной связи используется или квадратурный энкодер или потенциометр. Тики энкодера обрабатываются в прерываниях по одной из линий.
Проблем две. Первая - это иногда возникающий hard fault, причём судя по той статистике что у меня есть он возникает когда в качестве обратной связи энкодер. Больше сказать не могу, так как он возникает непредсказуемо. Вторая более интересная. Кто пытался во фриртосе сделать return из таска наверняка знает чем это заканчивается. Вызовом обработчика этого безобразия, а именно функции static void prvTaskExitError( void ) из port.c. Так вот у меня эта функция вызывается просто так. Опять же из той статистики которая у меня есть абсолютно не понятно что является причиной вызова этой функции, т.к. ни в одном таске ретёрна нет. И программа улетает в неё совсем не предсказуемо. Обе эти проблемы возникают непредсказуемо, программа может работать полтора часа и вылететь в одну из этих ошибок, а может через 5 минут работы Вопрос больше каким образом обнаружить источник ошибки? До этого заметил, что при переполнении переменной типа ftoot мк улетал в hard fault, сейчас суммирования нет нигде и переполняться нечему. В программе использую очереди типа uint8_t, а потом полученный данные из очереди использую как индекс массива. Может быть тут что-то не так? Может ли это быть результат переполнение стека? В общем буду признателен любой помощи.
0
|
|
| 14.06.2016, 13:35 | |
|
Ответы с готовыми решениями:
4
Попадание в Hard Fault после POP в Cortex-M3 (EFM32GG-STK3700 с FreeRTOS) еще кое-что Мерцание и кое-что еще |
|
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
|
|
| 14.06.2016, 14:58 | |
|
Я тут малость накатал некоторые мысли про ХардФолт и как его дебажить
Про вылет из задачи - у меня так было, когда стек задачи был маленьким. Про первую проблему - смотрите в сторону приоритетов прерываний. Что то мне подсказывает - что дело в них.
0
|
|
|
1 / 1 / 0
Регистрация: 18.01.2012
Сообщений: 1,418
|
|||
| 14.06.2016, 16:34 | |||
|
кроме приоритетов прерываний можно посмотреть какие FriiRTOS функции используются в контексте прерывания. А именно должны использоваться только *fromISR версии.
0
|
|||
|
0 / 0 / 0
Регистрация: 03.05.2012
Сообщений: 14
|
|
| 16.06.2016, 10:43 | |
|
Спасибо за ответы. Помогли покопаться в нужную сторону. Увеличил размера стека задач, изменил приоритеты прерываний. А так же переделал логику обработки сообщений из CAN. Раньше у меня по приходу сообщения создавалась задача обработки, которая удалялась после выполнения. В проекте на ф407 такая система работала без проблем, а вот тут почему то нет. В итоге поставил её циклично выполняться и сигнал о новом сообщении передаю через семафор. Теперь вроде всё работает нормально.
0
|
|
|
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 2,048
|
|
| 16.06.2016, 12:31 | |
|
по поводу создания и удаления задач - какой heap был выбран? Там есть тонкости. Некоторые heap не предназначены для удаления задач, какие-то оставляют фрагментированные фрагменты, и новые задачи должны быть размером такие-же, как и удаленные. Возможно у вас просто кончалась куча, из-за того что задачи были с разным размером стека и после удаления оставались мелкие фрагментированные кусочки.
0
|
|
| 16.06.2016, 12:31 | |
|
Помогаю со студенческими работами здесь
5
Изменение громкости и ещё кое-что... Температура 4670K и кое-что ещё Прогресс бар и кое-что еще Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2.
Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники".
В. . .
|
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии.
. . .
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3.
Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
|