|
Прерывания в пошаговом режиме Keil |
|
|
|
Oct 24 2016, 23:45
|

Местный
  
Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264

|
Доброй ночи.
Интересует вопрос, почему в Keil uVision Cortex M4 (STM32F4) в режиме отладки по SWD (ST-Link) не заходит в прерывания в пошаговом режиме? Да не только даже в пошаговом. В режиме Step Over тоже, при этом в регистрах NVIC контроллера и в регистрах флагов прерываний самой периферии (SPI) вижу, что прерывание генерируется, в NVIC оно в состоянии Pending, но прерываний больше никаких нет, все разрешены, казалось бы, пожалуйста - бери на себя процессорное время да выполняйся, а нет, не хочет - причем так глюкованно ведет себя, что совсем не понятно. В режиме пошаговой отладки прерывания не вызываются НИКОГДА. В режиме Step Over они вызываются при вызове функции, в которой при записи регистра вызывается прерывание по завершению передачи. Я его ловлю когда делаю Step Over над этой функцией. Ну а если выполнить запись в регистр Single Step-ом, увидеть в NVIC что прерывание ушло в Pending (при этом в периферии тоже видно, что флажок установился на запрос прерывания), то стоит разместить чуть дальше (да хоть на следующей строчке) брэкпоинт, или выполнить до курсора - то прерывание выполняется.
С чем связано такое поведение?
|
|
|
|
|
 |
Ответов
|
Oct 28 2016, 08:34
|
Местный
  
Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315

|
Цитата " Не верю" касалось варианта, что, якобы, код ISR вообще никак не отрабатывается. Может и такое быть, точнее ситуация близкая к таковой. Если в окно WATCH вытащить регистры перефирии, тогда возможна ситуация, при которой отладчик считывает содержимое регистра для обновления в окошке, при чтении регистра (ему ведь все равно кто считал) сбрасываются флаги прерывания и соответственно прерывание даже если и вызывается, то не находит флагов и "не отрабатывает" нужный кусок кода.
--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
|
|
|
|
|
Oct 29 2016, 14:28
|
Знающий
   
Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725

|
Цитата(редактор @ Oct 28 2016, 10:34)  Может и такое быть, точнее ситуация близкая к таковой. Если в окно WATCH вытащить регистры перефирии, тогда возможна ситуация, при которой отладчик считывает содержимое регистра для обновления в окошке, при чтении регистра (ему ведь все равно кто считал) сбрасываются флаги прерывания и соответственно прерывание даже если и вызывается, то не находит флагов и "не отрабатывает" нужный кусок кода. Вообще говоря, такое теоретически недопустимо, поскольку отладчик обязан быть nonintrusive, то есть, он никак не влияет на поведение устройства. Практика показывает, однако, что именно ST страдают (начиная с F1xx) некоторыми поведенческими особенностями при отладке. В частности, SPI и I2C. Я лично сталкивался с подобными "непонятками", которые исчезали при закрытии окон, подсматривающих за периферийными регистрами. Об этом упоминается (и мною) неоднократно на просторах форума STM32. Я говорю о "непонятках", т.к. у меня не было ни времени, ни желания доказывать ST, что они, возможно, накосячили, и настоящего исследования с доказательствами у меня нет. У меня закралось подозрение, что внутри STM32 сидит квантовый процессор, состояния которого разрушаются при подглядывании  . Если серьёзно, то сброса флагов прерывания быть не должно, а если набредете на устойчивое проявление такого поведения, поделитесь постановкой эксперимента.
|
|
|
|
|
Oct 29 2016, 19:30
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(KnightIgor @ Oct 29 2016, 17:28)  Если серьёзно, то сброса флагов прерывания быть не должно, а если набредете на устойчивое проявление такого поведения, поделитесь постановкой эксперимента. Если совсем серьёзно, то вроде во всех процессорах, с которыми мне приходилось иметь дело, дело обстоит аналогично: чтение регистров периферии отладчиком аналогично их чтению процессором (либо любым другим bus master-ом). Ну не различает периферия какой именно bus master её читает. Думаю это потому, что чтение идёт по той же шине, что и другие доступы. А иначе пришлось бы в схему МК внести дополнительную матрицу шин для отладчика, дополнительный арбитр доступа для каждого периферийного узла (чтобы разруливать коллизии с доступом из штатной матрицы шин) и т.д. Это здорово бы (и не обоснованно) усложнило схему МК. А для чего? Только для отладки? И только чтобы новички реже включали мозг??? не слишком ли высока цена? Может эти ресурсы лучше потратить на какие-то более полезные вещи? И к тому же это пришлось бы делать для каждого нового МК отдельно (а сейчас отладчик работает только с ядром, входит в его состав и неизменен для любого МК на данном ядре). И вроде такое поведение (отладчика) должно быть вполне ожидаемым. Хотя почему-то чайники постоянно наступают на эти грабли, хотя вроде казалось бы очевидная вещь.......
|
|
|
|
Сообщений в этой теме
Arlleex Прерывания в пошаговом режиме Keil Oct 24 2016, 23:45 KnightIgor Цитата(Arlleex @ Oct 25 2016, 01:45) В ре... Oct 25 2016, 14:06 jcxz Цитата(KnightIgor @ Oct 25 2016, 17:06) Е... Oct 26 2016, 20:08  KnightIgor Цитата(jcxz @ Oct 26 2016, 22:08) Верьте ... Oct 27 2016, 20:50 x893 Подтверждаю.
При шаговом не заходит, но если надо ... Oct 25 2016, 14:18 KnightIgor Цитата(x893 @ Oct 25 2016, 16:18) Подтвер... Oct 26 2016, 08:31  x893 Цитата(KnightIgor @ Oct 26 2016, 11:31) .... Oct 26 2016, 08:50 uriy Несколько проектов делал VisualDSP там есть галочк... Oct 26 2016, 10:56  scifi Цитата(KnightIgor @ Oct 29 2016, 17:28) П... Oct 29 2016, 14:33   scifi Цитата(jcxz @ Oct 29 2016, 22:30) Думаю э... Oct 29 2016, 19:53    jcxz Цитата(scifi @ Oct 29 2016, 22:53) Выдумк... Oct 30 2016, 09:46   KnightIgor Цитата(jcxz @ Oct 29 2016, 21:30) Если со... Oct 29 2016, 22:49
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|