Jump to content

    
b-volkov

IAR залипает на брекпоинте.

Recommended Posts

23 minutes ago, AleksBak said:

В прерывании "Главного Таймера" (или как он там называется) происходит переключение задач и опять "возвращаемся"/зацикливаемся в точке останова.

Системный таймер (SysTick или любой другой) не может переключаться так быстро, если правильно написан, чтобы не дать выполниться как минимум одной команде после точки останова.

24 minutes ago, AleksBak said:

А у Вас такого поведения, как у ТС, не было при этом?

Никогда. Спокойно стопорил систему под отладчиком, а затем запускал. И всё работало. Иногда мешала сторожевая собака, не на всех МК она останавливается под отладчиком, а иногда она просто внешняя.

Share this post


Link to post
Share on other sites
6 часов назад, jcxz сказал:

то не факт, что это та самая проблема.

Это именно та самая проблема. Я на нее нарывался, пробуя демо-плату с STM32F746. Сейчас эта плата отложена до лучших времен, но решение проблемы мне интересно, и я провел лабораторную работу.

Плата Mikromedia 7 for STM32F746
На борту встроенный ST-Link/V2
IAR EW for ARM 7.50

Тестовый проект точно также не хочет сдвигаться с точек останова, сколько ни нажимай на Step или Run to Cursor.
Скачиваем все нужное с Сеггера.
Converting ST-LINK On-Board Into a J-Link
Ставим драйвера, перепрошиваем STLink - он видится системой как J-Link.
Изменяем настройки отладчика в ИАРе на J-Link.
Результат - отладка начинает работать, шагает без проблем.

Единственный нюанс - лицензия Сеггера, которая ограничивает применение прошивки только на демо-платы от ST. Но как я убедился, работает и на обычном ST-Link/V2 (там, где версии типа V2.Jxx.Sx).
 

з.ы. в начале отладки драйвер Сеггера полез на их сервер. Но при блокировке файерволом все работало нормально.

Share this post


Link to post
Share on other sites

Мне хотелось бы ответить уважаемым @Baser и @haker_fox одновременно (не только им - всем вообще-то). У меня сейчас такая интересная/уникальная ситуация, что фактически изучаю сейчас только семейство F7 от STM (так получилось и до этого много лет сидел на контроллерах др. фирмы). Много тестовых проектов делал на F7 со FreeRTOS. И когда отлаживал эти проекты, то брекпойнт внутри задачи вел именно так как у ТС ("залипал" там). Я связывал это с переключением задач и не "замороженным" таймером SysTick. @haker_fox однако пишет, что у него не было таких случаев. А @Baser пишет, что есть какая-то проблема с семейством F7XX (может и у H7XX тоже). Так вот я и подумал - может @haker_fox просто не отлаживал FreeRTOS с таким семейством и тут, и у ТС и у меня, та проблема про которую пишет @Baser ???

Share this post


Link to post
Share on other sites
40 минут назад, AleksBak сказал:

Много тестовых проектов делал на F7 со FreeRTOS. И когда отлаживал эти проекты, то брекпойнт внутри задачи вел именно так как у ТС ("залипал" там). Я связывал это с переключением задач и не "замороженным" таймером SysTick.

Ну, сами подумайте, остановился МК на точке останова а SysTick работает. Что это значит? Что может возникнуть только один флаг переполнения SysTick. И все. FreeRTOS ведь тоже стоит.
И после вашего запуска Step или Run to Cursor выполнится (на полной скорости МК) обработка прерывания SysTick (и всех других уже готовых к обработке прерываний) после чего мы должны попасть на следующую команду после точки останова.

Но из-за ошибки в ядре отладчик опять стопорится на точке останова и не делает шаг. Это совершенно ненормальное поведение отладчика. Почитайте приведенные мною ссылки на ST Community.

55 минут назад, AleksBak сказал:

может ... и у ТС и у меня, та проблема про которую пишет Baser ???

Вполне возможно.

56 минут назад, AleksBak сказал:

что есть какая-то проблема с семейством F7XX (может и у H7XX тоже)

АРМ пишет, что проблема в Cortex-M7 devices with core revisions r0p0 or r0p1
Нужно смотреть, какие STM32F7 сделаны на этих ядрах. STM32F746 к ним точно относится. У STM32H7 этой ошибки нет.

Share this post


Link to post
Share on other sites
5 hours ago, AleksBak said:

@haker_fox однако пишет, что у него не было таких случаев.

Ну да, не было...

5 hours ago, AleksBak said:

@haker_fox просто не отлаживал FreeRTOS с таким семейством и тут

Не отлаживал. Но я прочитал документы, которые уважаемый @Baser выложил выше. И понял, что это ошибка рхитектуры. И ОСРВ тут не при чём.

 

Share this post


Link to post
Share on other sites
4 часа назад, haker_fox сказал:

Не отлаживал.

Ну да, с этого надо было и начинать. Но ничего. Сейчас попозже проверим/посмотрим (просто проблемы сейчас всякие и еще з/п .***. срезали... будь проклят этот карантин/ковид извините)

4 часа назад, haker_fox сказал:

ОСРВ тут не при чём

Может быть. Но почему-то у меня только со FreeRTOS вроде такое было. Оно вон как выходит. Может, я без нее особенно ничего и не отлаживал/не заметил. Я вообще, до апреля месяца, на PIC32MX/MZ сидел сколько лет, а потом на это семейство перешел изучать.

9 часов назад, Baser сказал:

Ну, сами подумайте, остановился МК на точке останова а SysTick работает. Что это значит? Что может возникнуть только один флаг переполнения SysTick. И все. FreeRTOS ведь тоже стоит.

Спасибо за пояснения. Начинаю уже понимать. А я то думал, что FreeRTOS так чудит (и на Azure RTOS вроде похожее было) и на нее все это списал. А если подумать - причем тут она? Я попозже постараюсь проверить/доложить.

Edited by AleksBak

Share this post


Link to post
Share on other sites
1 hour ago, AleksBak said:

Ну да, с этого надо было и начинать.

А чего это вы мне указываете, с чего начинать? Не обязательно работать с чем-то конкретным. Можно и просто мозгами пораскинуть на основе имеющегося опыта. Тем более, документы подтверждают мою правоту. Работаю с FreeRTOS на Cortex-M0/M3/M4 с 2016 года. Немного запускал на Cortex-M7 но именно "побаловаться".

1 hour ago, AleksBak said:

только со FreeRTOS вроде такое было.

Ну и что?:blum3: Единственный пример ничего не подтверждает и не опровергает. А если абстрагироваться от магического названия "фриртос" и смотреть на неё как на обычную программу, то что в ней такого, вызывающего ошибку? Если найдёте, пишите Ричарду Барии (вроде так зовут автора).

1 hour ago, AleksBak said:

А я то думал, что FreeRTOS так чудит

Ну что значит "чудит". Вы технически грамотно это обоснуйте. А то мне тут тоже коллеги часто говорят "проц висит". Ну какой, нафиг, "висит". Такого быть не может за редким исключением. Обычно оне не "висит", а выполняет какой-то код)

1 hour ago, AleksBak said:

А я то думал, что FreeRTOS так чудит (и на Azure RTOS вроде похожее было)

Слушайте, у вас какие-то догадки и домыслы в стиле любителей. Ну провели бы исследование и выложили нам результаты. Мы были бы благодарны.

Share this post


Link to post
Share on other sites

Проверил - никаких "залипаний" (тех о которых пишет автор топика) в кодах где есть прерывания Таймеров и пр. - нет. После остановки можем пошагово идти дальше или до след. точки останова. Единственное - при отладке с ОС - опять "возвращаемся" в ту же самую точка останова внутри задача. Т.е. пошагово после этой точки оставноки можем также идти дальше, вплоть до шедуллера, но потом опять возвращаемся обратно в ту же самую точку останова. Вот это имел я ввиду только. Контроллер -  STM32F746NGH6U, ревизия Z. Версия ядра не смотрел какая. Среда - CubeIDE. Есть под рукой и др. контроллеры этого семейства, но смысла их проверять пока не вижу. Один раз менял фирмваре у ST-Link V2.1 на Segger-овскую, но отладчик нормально не функционировал и пришлось вернуть обратно.

Share this post


Link to post
Share on other sites
2 часа назад, AleksBak сказал:

Контроллер -  STM32F746NGH6U, ревизия Z. Версия ядра не смотрел какая.

На моей плате стоит STM32F746ZG
SCB->CPUID = 0x410FC271, т.е. это как раз ядро r0p1

2 часа назад, AleksBak сказал:

Один раз менял фирмваре у ST-Link V2.1 на Segger-овскую, но отладчик нормально не функционировал и пришлось вернуть обратно.

Возможно в последних прошивках ST-Link уже тоже пофиксили эту ошибку как и у Сеггера, я это не проверял.

Share this post


Link to post
Share on other sites
15 часов назад, Baser сказал:

На моей плате стоит STM32F746ZG
SCB->CPUID = 0x410FC271, т.е. это как раз ядро r0p1

У тоже самое. Только процессор:

18 часов назад, AleksBak сказал:

STM32F746NGH6U

А Вы IAR используете? Я CubeIDE. Версия ST-Link V2.1 тут - V2J37M26 (последняя получается). Попозже могу и с ST-Link V2 проверить если надо.

 

Share this post


Link to post
Share on other sites

Добавлю:

Ну вот, получается, что в CubeIDE нельзя настроить отладчик чтобы останавливал периферию при останове?? А я думал, что как в Keil-е можно...

Плохо. Очень плохо. Что же у STM такой бардак со средами???

Хотел "заморозить" периферию, что прерывания создает (таймер тут) т.к., как пишет ТС, "залипает" и фиг получил тут.

Share this post


Link to post
Share on other sites
20 minutes ago, AleksBak said:

Добавлю:

Ну вот, получается, что в CubeIDE нельзя настроить отладчик чтобы останавливал периферию при останове?? А я думал, что как в Keil-е можно...

Плохо. Очень плохо. Что же у STM такой бардак со средами???

Хотел "заморозить" периферию, что прерывания создает (таймер тут) т.к., как пишет ТС, "залипает" и фиг получил тут.

А добавить в main() USER ... религия не позволяет ?

Много чего нельзя в CubeMx, но если хочется, то можно.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.