Forger 26 22 февраля, 2017 Опубликовано 22 февраля, 2017 · Жалоба Вы вообще читаете, что я пишу? Мне лишь одного этого хватило: Препроцессор - зло. Он не нужен. Это позволяет лишний раз убедиться, что: Чем дальше в лес, тем толще партизаны. . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 234 22 февраля, 2017 Опубликовано 22 февраля, 2017 · Жалоба Через отладчик выяснил, что процессор падает в HardFault. Падает на этой функции: HardFault - это ни о чём не говорит. Возможно там у Вас UsageFault или MemFault или BusFault или ещё какой, а потом происходит эскалация до HardFault, так как у Вас и механизм исключений конечно не прописан и не инициализирован. Изучайте документацию на ядро в части исключений. У Cortex-M есть куча регистров, по которым можно определить конкретный тип и причину fault-а. И тогда легко будет найти ошибку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 22 февраля, 2017 Опубликовано 22 февраля, 2017 · Жалоба И тогда легко будет найти ошибку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 22 февраля, 2017 Опубликовано 22 февраля, 2017 · Жалоба Не надо читать и вникать в эту кучу кода, достаточно лишь один раз скомпилировать в одну либу и подключить к проекту вместе с H-файлами. Не забыть про ключик компиляции, при котором каждая функция кладется в свою ELF-секцию, так в финальную прошивку попадут только те функции, которые используются, а не целиком соотв. С-файл. Классно. Рад за вас, что у вас всё всегда работает. Почему-то мой код надо отлаживать, а не просто написать и нажать кнопочку "build". И в процессе отладки очень хочется минимизировать количество "чёрных ящиков". Речь тут не про HAL/CUBE и т. п, а про совсем другое - про банальное нарушение базового правила кода под МК: заходить в прерывания можно только для того, чтобы "отметиться" и что-то просемафорить наружу в основной код. А число-дробилки и циклы ожидания выносятся наружу в основной код. Иначе жди беды! То-то у кортексов настолько развесистый NVIC, что им с лёгкостью можно заменить простенькую операционку. Ну я основную идею понял. "у меня всё работает, а шаг вправо, шаг влево - это сам дурак". Спасибо за мнение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 22 февраля, 2017 Опубликовано 22 февраля, 2017 · Жалоба Почему-то мой код надо отлаживать, а не просто написать и нажать кнопочку "build". Как раз в данном случае именно так и должен работать такой примитивный код. И в процессе отладки очень хочется минимизировать количество "чёрных ящиков". БИНГО! Начинает доходить! Вот почему я уже трижды написал "создать ПУСТОЙ ПРОЕКТ" !!! То-то у кортексов настолько развесистый NVIC, что им с лёгкостью можно заменить простенькую операционку. Ну-ну, а спотыкаемся уже на детских грабельках :smile3046: Ну я основную идею понял. Основная идея как раз совсем в другом: 1) чуть назад отойти от стены, в которую уперся как ..., 2) глянуть на нее издали, 3) найти в ней дверь, 4) подойти, открыть 5) и наконец-то двигаться дальше. Самые простые решения чаще всего лежат прямо перед носом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 22 февраля, 2017 Опубликовано 22 февраля, 2017 · Жалоба Короче, далее бейтесь о стену уже без моей помощи - все, чем я мог помочь, тут уже прозвучало и неоднократно и не только от меня. Удачи ;) Вы всё обещаете, но никак не уходите. Помощи от вас никакой, только тему засоряете. Автор темы давно убрал глухой цикл из прерывания, а вы продолжаете ему твердить про это. Вообще, я первый раз такое вижу - "HAL не пробовал, но он прекрасен". Этакое "Рабинович напел" наоборот. Посмотрите настройки флеша. wait-states, ART prefetch. Если у вас старая ревизия контроллера (какой кстати контроллер?), то там были баги в ART prefetch. Возможно, куб включает ART безусловно, и проблема в этом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 22 февраля, 2017 Опубликовано 22 февраля, 2017 · Жалоба Помощи от вас никакой, только тему засоряете.Да не расстраивайтесь вы так за ТС, он не маленький, сам разберется, хоть и не сразу ... Автор темы давно убрал глухой цикл из прерывания, а вы продолжаете ему твердить про это. © "Читаю книгу, а вижу фигу" Внимательнее читайте порядок действий, которые я уже неоднократно приводил для ТС. Продублирую: Нужно, точно локализовать источник косяка. Пока что все упирается в вашу функцию. Копайте в этом направлении. Например, подряд в основном коде вызвать ее несколько раз или более радикально - гонять в бесконечном цикле, но не в прерываниях. Вижу простое решение: отладить это чудо-код на ПУСТОМ проекте, добиться от него стабильной работы в разных ситуациях (банально тесты), и уже только после этого куда-то сувать. А что делает тут USB? Короче, ПУСТОЙ НОВЫЙ проект только для того, чтобы отладить ваши несчастные костыльные функции. Добейтесь тут от них нормальной работы в ПУСТОМ проекте. Поиграйтесь с размером стека (например). В конце концов, сделайте нормальный функционал БЕЗ поллинга! Может еще нужно разжевать до косточек и написать проект за самого ТС??? Вообще, я первый раз такое вижу - "HAL не пробовал, но он прекрасен". Этакое "Рабинович напел" наоборот. Не пойму, какое отношение подобные домыслы имеют к этой теме и ко мне лично? :cranky: Я пользуюсь HAL (ранее SPL), ничего дурного в этом не вижу. Но без соотв. тестов слепо доверять бесплатному чужому коду тоже не стану. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 22 февраля, 2017 Опубликовано 22 февраля, 2017 · Жалоба Внимательнее читайте порядок действий, которые я уже неоднократно приводил для ТС. Продублирую: То есть, для отладки USB вы предлагаете выбросить USB? Ну, нормально, да. То-то автор темы так оценил вашу помощь. Не пойму, какое отношение подобные домыслы имеют к этой теме и ко мне лично? :cranky: Я пользуюсь HAL (ранее SPL), ничего дурного в этом не вижу. Но без соотв. тестов слепо доверять бесплатному чужому коду тоже не стану. Я имел в виду куб, не думал, что есть разница между HAL и кубом. Вот та цитата, от которой я отталкивался: Я сам лично не пользуюсь кубом и пока не планирую, но и отговаривать от этого новичков не стану. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 22 февраля, 2017 Опубликовано 22 февраля, 2017 · Жалоба То есть, для отладки USB вы предлагаете выбросить USB? Ну, нормально, да. То-то автор темы так оценил вашу помощь. И откуда ж вы такие умные беретесь, а? Для начала хорошенько почитайте тему. Кратко для ленивых: проблема в данном случае вовсе не в CUBE/HAL/USB, а т.н. user-коде. Без самодеятельности ТС все там работает (с его же слов). Я имел в виду куб, не думал, что есть разница между HAL и кубом. Ну, коли вы не видите разницу между красным и мокрым, то сначала изучите матчасть, перед тем, как кидать кирпичи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Chameleon 0 22 февраля, 2017 Опубликовано 22 февраля, 2017 · Жалоба Ревизия проца A. Две штуки. Взял вторую плату, китайский клон Nucleo. Результат тот же. Сделал передачу по уарт ногодрыгом вручную. Аппаратный отключен. То же самое. При передаче первого байта отваливается USB. Такое впечатление, что любая запись в порт PA валит USB. Он тоже на этот порт выведен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 22 февраля, 2017 Опубликовано 22 февраля, 2017 · Жалоба Сделал передачу по уарт ногодрыгом вручную. Аппаратный отключен. То же самое. При передаче первого байта отваливается USB. Такое впечатление, что любая запись в порт PA валит USB.Чудеса да и только! Другой USART или этот же, но в другие пины работает так же? Он тоже на этот порт выведен.Выкладывайте код вместе с инициализацией и на всякий случай схему. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Thorn 0 22 февраля, 2017 Опубликовано 22 февраля, 2017 · Жалоба Руководство по поиску причины HardFault Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 22 февраля, 2017 Опубликовано 22 февраля, 2017 · Жалоба Ревизия проца A. Две штуки. Взял вторую плату, китайский клон Nucleo. А какой проц-то? В F405/407/415/417 - ART не рабочий в ревизии A. Если куб его включает, то причина вылетов может быть в этом. Кроме того, проверьте частоту, на которую вы настроили PLL. Правильно ли задана частота кварца. И откуда ж вы такие умные беретесь, а? Для начала хорошенько почитайте тему. Кратко для ленивых: проблема в данном случае вовсе не в CUBE/HAL/USB, а т.н. user-коде. Без самодеятельности ТС все там работает (с его же слов). Я вообще-то высказывался не против CUBE/HAL/USB, а против вашего способа "помогать" автору темы. Вы не помогаете. Вы чешете своё ЧСВ. Ну, коли вы не видите разницу между красным и мокрым Разницу вижу. Повторюсь: я имел в виду куб. Вы, не пользуясь кубом, тем не менее уверены, что проблема в пользовательском коде. Вот это я и имел в виду под тезисом "анти-Рабинович напел". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 22 февраля, 2017 Опубликовано 22 февраля, 2017 · Жалоба Разницу вижу. Повторюсь: я имел в виду куб. Вы, не пользуясь кубом, тем не менее уверены, что проблема в пользовательском коде. Вот это я и имел в виду под тезисом "анти-Рабинович напел". Читайте отсюда. Вот кратко: В основном коде ВНЕ прерываний эта функция работает? В бесконечном цикле. Да. Вот код этой функции. И тут почитайте: https://electronix.ru/forum/index.php?s=&am...t&p=1483529 Еще есть вопросы? Увеличение размера стека помогает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Chameleon 0 22 февраля, 2017 Опубликовано 22 февраля, 2017 · Жалоба А какой проц-то? В F405/407/415/417 - ART не рабочий в ревизии A. Если куб его включает, то причина вылетов может быть в этом. Кроме того, проверьте частоту, на которую вы настроили PLL. Правильно ли задана частота кварца. Процессор F411RE, ревизия A. Весь код генерит куб, я только компилирую его в кейле. Частоты не превышают ограничения в кубе (100Мгц и 50Мгц). Одна плата такая: XNucleoF411re. Схемы нет. Вторая плата такая: Схема есть. UART. На другой порт перебрасывать - не выход. Все пины проца заняты. И плата уже разведена. И нет гарантии что при манипуляции другими битами порта USB не будет отваливаться. Выкладывайте код вместе с инициализацией и на всякий случай схему. Всю портянку, что куб нагенерил, выкладывать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться