Перейти к содержанию
    

Уважаемые коллеги!

Столкнулся с проблемой, которую не могу решить:
Я собрал проект в КУБе, запустил в Кейле. В качестве источника тактирования применяю внутренний HSI.
Отладчик - китайский стлинк. 
После сборки и запуска дебага - выпадаю в хардфолт сразу после систем инита. 
Совершенно не понимаю, с чем это связано - пытался использовать разные делители, разные источники тактирования, даже проверял что происходит с ногой резет :)
Сталкивался ли кто либо с подобной проблемой? Подскажите пожалуйста - в чём может быть загвоздка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Т.е. в main() даже не заходит?
В самой SystemInit() FPU-сопроцессор включается?
В настройках проекта галка генерирования FPU-инструкций стоит?

Насколько я знаю, __main() использует FPU в своих целях для ускорения запуска.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, IRBaboon сказал:

Совершенно не понимаю, с чем это связано

А расшифровать пробовали по содержимому регистров?

3 часа назад, IRBaboon сказал:

После сборки и запуска дебага - выпадаю в хардфолт сразу после систем инита. 

Хотя бы в окне дизассемблера найдите инструкцию, на которой процессор вылетает в исключение. Можно сюда скрин сбросить. В общем, чем больше информации предоставите, тем проще будет найти причину.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уж для того чтобы в hard fault вылететь, процессору нужно начать выполнять инструкции... так что генератор точно не виноват.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 3/19/2021 at 2:09 PM, IRBaboon said:

выпадаю в хардфолт сразу после систем инита

Уберите систем инит и проверьте.

Хотя это очевидно для гуру программирования.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19.03.2021 в 14:09, IRBaboon сказал:

выпадаю в хардфолт сразу после систем инита.

После или внутри? После обычно идет переход в __main(), а уже оттуда в main(). Где именно вы вываливаетесь в хард фолт:

- в ресет хендлере;

- в систем ините;

- в __main()

- в main()

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пройдитесь по "внутренностям" функции инициализации и вызываемых в ней функций (Step Into в режиме отладки). Уже будет яснее, откуда сваливается в hardfault.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 3/20/2021 at 6:12 PM, Priest_89 said:

Пройдитесь по "внутренностям" функции инициализации и вызываемых в ней функций (Step Into в режиме отладки). Уже будет яснее, откуда сваливается в hardfault.

Совершенно точно вываливаюсь при выполнении инструкции                  LDR     R0, =SystemInit

On 3/19/2021 at 5:13 PM, MrBearManul said:

А расшифровать пробовали по содержимому регистров?

Хотя бы в окне дизассемблера найдите инструкцию, на которой процессор вылетает в исключение. Можно сюда скрин сбросить. В общем, чем больше информации предоставите, тем проще будет найти причину.

Боюсь что это происходит в самом начале - приложил скрин.
Как только я вхожу в дебаг, и исполняю первую инструкцию он валиться сразу.

Screenshot_1.png

On 3/20/2021 at 6:08 PM, Darth Vader said:

После или внутри? После обычно идет переход в __main(), а уже оттуда в main(). Где именно вы вываливаетесь в хард фолт:

- в ресет хендлере;

- в систем ините;

- в __main()

- в main()

Я сейчас заново запустил дебаг, и пошагово, как рекомендовали выше, начал искать, где - в итоге я вываливаюсь в момент запуска систем инита, выше приложил скрин

Изменено пользователем IRBaboon

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 минут назад, IRBaboon сказал:

Боюсь что это происходит в самом начале - приложил скрин.

Что значит "вначале"? Процессор просто обязан выполнить инструкцию, чтобы попасть в "хардфолт". На вашем скрине курсор не находится на инструкции. Перейдите в окно дизассемблера и прошагайте пошагово код.

 

Или он у вас каким-то чудесным образом выполняет константу 0xFFFFFFFF как инструкцию? Тогда да, прямой путь в хардфолт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Vbat висел в воздухе - никогда не понимал, что с ним конкретно делать.
Подпаял к питанию, ничего не поменялось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как видно про приложенным скринам - у ТСа флешь не прошилась программным кодом и содержит стёртое значение 0xFFFFFFFF.

Непонятно - что он вообще пытается выполнять, если прямо перед ним эти 0xFFFFFFFF. Только слепой не заметит......  :unknw:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 minutes ago, jcxz said:

Как видно про приложенным скринам - у ТСа флешь не прошилась программным кодом и содержит стёртое значение 0xFFFFFFFF.

Непонятно - что он вообще пытается выполнять, если прямо перед ним эти 0xFFFFFFFF. Только слепой не заметит......  :unknw:

Ну, я не слепой, просто для меня дизассембли это тёмный лес. 
Как же такое может быть, что во флеш ничего не записалось - битый программатор? 
Мне не до конца ясно почему в аутпуте мне пишут что No Algorithm Found, но я так понимаю, что это вообще для другого банка и меня не касается.

Screenshot_2.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 минут назад, IRBaboon сказал:

Как же такое может быть, что во флеш ничего не записалось - битый программатор? 

Причин может быть множество: кривой отладчик, кривое подключение отладчика (провода или настройки), неправильный тип МК выбранный в проекте, флешь МК защищена от записи и т.д.

Совет: устанавливать опцию "Verify" для прошиваемой firmware в настройках отладчика, чтобы был контроль правильности прошивания. Не знаю где она в вашей IDE, но думаю должна где-то быть.

 

PS: В эмбеддинге без знания ассемблера делать нечего.  :unknw:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

40 minutes ago, jcxz said:

Причин может быть множество: кривой отладчик, кривое подключение отладчика (провода или настройки), неправильный тип МК выбранный в проекте, флешь МК защищена от записи и т.д.

Совет: устанавливать опцию "Verify" для прошиваемой firmware в настройках отладчика, чтобы был контроль правильности прошивания. Не знаю где она в вашей IDE, но думаю должна где-то быть.

 

PS: В эмбеддинге без знания ассемблера делать нечего.  :unknw:

Я понимаю - опцию Verify я всегда вообщем-то включаю. Наверное для начала попробую использовать другой программатор.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 минут назад, IRBaboon сказал:

раньше хардфолт если и был, то решался либо внешним источником питания, либо кривым источником тактирования.

Т.е. наугад, методом тыка. А когда этот метод перестал работать, отсутствие опыта не позволило вам найти истинную причину. Изучайте сечас, у вас есть прекрасная возможность. Сможете расшифровать реальный настоящий "хардфолт". И рекомендую разобраться с настройками проекта. Я не знаком с кейлом, т.к. использую другой компилятор и среду разработки, но первое, на что следует обратить внимание, так это на настройки линковщика и программатора. Почитать документацию при необходимости.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...