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

Место зависания отладчика

В блоке NVIC_Init есть такая строчка:

/* Enable the Selected IRQ Channels --------------------------------------*/
    NVIC->ISER[(NVIC_InitStruct->NVIC_IRQChannel >> 0x05)] =
      (u32)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (u8)0x1F);

на которой отладчик по F11 зависает (или останавливается если так кому удобнее).

Вне зависимости от того, поставлена ли галка на DIWS или нет.

 

Если эту строчку закомментить, то по RUN программа благополучно доходит до заданной точки.

 

Что с такой ситуации в IAR можно сделать?

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

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


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

28 minutes ago, ART_ME said:

Что с такой ситуации в IAR можно сделать?

Вы реально изгаляетесь над нами, или реально не понимаете? Вот!!!!!!!!!!!!!!!

Неужели трудно проверить?

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


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

Дополнительная информация.

В конструкции ниже NVIC_Init вызывается трижды, но затыкается отладчик только при третьем обращении.

/* Enable the ADC Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = ADC_PRE_EMPTION_PRIORITY;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = ADC_SUB_PRIORITY;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  
  /* Enable the Update Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = TIM1_UP_PRE_EMPTION_PRIORITY;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = TIM1_UP_SUB_PRIORITY;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
    
  /* Enable the TIM1 BRK Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = TIM1_BRK_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = BRK_PRE_EMPTION_PRIORITY;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = BRK_SUB_PRIORITY;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

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


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

30 minutes ago, ART_ME said:

но затыкается отладчик только при третьем обращении.

1. Ставим точку останова на этот вектор. Возможно вход BREAKE у вас постоянно активен, и прерывания срабатывают бесконечно.

2. Смотрим обработчик этого прерывания. Возможно, что в нём имеются ошибки. А ещё лучше, текст этого прерывания привести здесь.

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


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

Исходник обработчика прерывания нужен. Это функция, которая выполняется в случае возникновения прерывания. Искать, начиная с файла startup.s(c/cpp).

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


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

9 minutes ago, ART_ME said:

Какой из них? Отмеченный?

Тот, который находится в вашем проекте, в IAR. Он там один должен быть активный (тот, который компилируется). В нём находите вектор (название может быть другим)

TIM1_BRK_IRQ

и смотрите, какая функция там вызывается. Если там стоит что-то типа

IRQHandler
        B IRQHandler ; инструкция безусловного перехода на языке ассемблера

то ищет обработчик в тексте на языке си/си++. Хотя его в любом случае необходимо найти. Просто со стартап=файла это может оказаться сделать легче. Но не всегда. Дело в том, что адреса функций там объявлены weak, т.е. могут быть переопределены в любом файле.

Ну или поставьте всё-таки точку останова прямо в стартап-файле. Возможно, произойдёт останов.

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


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

Может быть у вас стартап на Си/Си++? Я это упомянул тут

 

Если что, кидайте полностью свой проект с указанием версии IAR. Поищу ваш файл.

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


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

Да.

Теперь найдите в вашем коде содержимое функции 

TIM1_BRK_IRQHandler

 

Если такой функции нет, то в map файле посмотрите адрес этой процедуры. Но она должна быть, иначе проект не линковался бы.

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


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

В "начинающих" разделе не полезнее будет? А то чёто у кортекса M3 уже переходы к обработчику прерывания стали по команде "B" (в векторе же - адрес уже!), прям как в 8051 ;-)

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


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

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

В "начинающих" разделе не полезнее будет? А то чёто у кортекса M3 уже переходы к обработчику прерывания стали по команде "B" (в векторе же - адрес уже!), прям как в 8051 ;-)

MCD Application Team STMicroelectronics в раздел начинающих?  :biggrin:

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


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

35 minutes ago, Obam said:

А то чёто у кортекса M3 уже переходы к обработчику прерывания стали по команде "B"

А вы внимательно посмотрите, что я написал в своём посте. Вот вам кусочек стартапа из проекта, "B" просто зацикливает обработчик. В своём коде вы где-то объявляете реальный обработчик с таким же именем. Естественно, что в архитектуре Cortex-Mx на месте вектора находится адрес обработчика, который к тому же должен содержать 1 в младшем разряде. Я подтвердил свою квалификацию?)))) Могу рассказать, зачем адрес нечётным должен быть. Кстати, это касается не только адреса обработчика прерывания. Если вы передаёте указатель на кусочек кода, то адрес этого кода следует увеличить на 1.

Ethernet_IRQHandler
        B Ethernet_IRQHandler
        PUBWEAK RIT_IRQHandler
        SECTION .text:CODE:REORDER:NOROOT(1)
RIT_IRQHandler
        B RIT_IRQHandler
        PUBWEAK MotorControlPWM_IRQHandler
        SECTION .text:CODE:REORDER:NOROOT(1)		
MotorControlPWM_IRQHandler
        B MotorControlPWM_IRQHandler
        PUBWEAK QE_IRQHandler
        SECTION .text:CODE:REORDER:NOROOT(1)
QE_IRQHandler
        B QE_IRQHandler
        PUBWEAK PLL1_IRQHandler
        SECTION .text:CODE:REORDER:NOROOT(1)
PLL1_IRQHandler
        B PLL1_IRQHandler

 

29 minutes ago, ART_ME said:

в раздел начинающих?

А вот вам пока смеяться не к лицу( У вас элементарнейшие вещи пока не взлетели. Так где ваш обработчик, вы ещё долго будете по крупицам выдавать информацию на форум?

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


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

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...