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

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

Здравствуйте.

Вопрос от новичка.

Отладчик зависает на этой строчке:

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

Может зависнуть либо при первом, либо при втором, либо при третьем обращении.

Системность не выяснена, утром зависал на третьем обращении, сейчас на первом.

Обработчики вызовов прерываний в наличии.

Вопрос: как в отладчике IAR узнать место зависания?

К примеру, в EmBitz в окне отладчика есть "Стек вызовов", где показана функция, выполняемая в данный момент.

А в IAR как?

 

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


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

А что у вас находится в поле NVIC_IRQChannel ? Какое прерывание вы включаете? Может быть оно срабатывает, а по вектору мусор? Вот и отладчик сходит с ума.

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


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

Если я правильно понял Ваш вопрос, то, к примеру, на третьем проходе вызывается вот это прерывание:

 /*******************************************************************************
* Function Name  : TIM1_BRK_IRQHandler
* Description    : This function handles TIM1 Break interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void TIM1_BRK_IRQHandler(void)
{
  MCL_SetFault(OVER_CURRENT);
  TIM_ClearITPendingBit(TIM1, TIM_IT_Break);
}

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

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


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

1 час назад, ART_ME сказал:

Если я правильно понял Ваш вопрос, то, к примеру, на третьем проходе вызывается вот это прерывание:

Не правильно. Откройте для себя возможности окна дизассемблера.  :wink:

Зависать может по 1001 причине.

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


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

7 минут назад, jcxz сказал:

Не правильно. Откройте для себя возможности окна дизассемблера.  :wink:

 

 

Снимок3.JPG

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


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

Я же писал: "Откройте возможности", а не тупо запостите скриншот (тем более левый). Смотреть надо - в какой адрес и что пишется. И сверять это с даташитом на МК.

Также проверить таблицу прерываний что ваш обработчик вообще в ней присутствует.

Ну и проверить что не пишете в таймер такое значение, что у вас прерывания начинают генериться с тактовой частотой ядра.  :biggrin:

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


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

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

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


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

5 hours ago, ART_ME said:

Я правильно

Неправильно:dance3: Чтение документации, и осознание того, что вы делаете, тоже является решением проблемы.

Приведите адреса и значения битов.

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


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

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

Приведите адреса и значения битов.

Так суть вопроса в том и состоит, что я не знаю, как в IAR посмотреть адреса и значения битов при зависании отладчика.

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

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


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

7 minutes ago, ART_ME said:

Так суть вопроса в том и состоит, что я не знаю, как в IAR посмотреть адреса и значения битов при зависании отладчика.

А зачем вам отладчик? Найдите заголовочные файлы и файлы программ, где эти значения инициализируются. CTRL-SHIFT+F - поиск по всем файлам.

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


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

11 минут назад, haker_fox сказал:

А зачем вам отладчик? Найдите заголовочные файлы и файлы программ, где эти значения инициализируются.

Ясно -  пойди туда не знаю куда, принеси то не знаю что. 

Я же Вас не заставляю помогать мне, верно?

Не хотите отвечать или не знаете ответа, промолчите. К чему изгаляться-то?

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

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


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

33 minutes ago, ART_ME said:

К чему изгаляться-то?

Простите за грубость, но вы дурак? Я вам дал нормальный и адекватный ответ. Если вы не в состоянии найти в тексте вашей программы нужную информацию, про которую вам подсказывают, то чем мы вам помочь можем? Вы не привели не полного текста программы, не выложили проект. Какую ещё-то помощь можно вам дать?

 

35 minutes ago, ART_ME said:

Не хотите отвечать или не знаете ответа, промолчите.

Успокойтесь, уважаемый. Обиды строить будете дома перед мамой или папой.

37 minutes ago, ART_ME said:

Ясно -  пойди туда не знаю куда, принеси то не знаю что. 

Т.е. вы в своей (своей ли???) программе не в зуб ногой, а я виноват?

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


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

ART_ME, что-то вы фигнёй страдаете. В CMSIS есть готовые функции для работы с NVIC типа NVIC_EnableIRQ() - пользуйтесь.

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


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

9 minutes ago, VladislavS said:

ART_ME, что-то вы фигнёй страдаете.

Нее, это похвально, что автор решил (как я подумал) разобраться с регистрами. Может быть он пишет свой драйвер управления прерываниями. Хотя сейчас я уже сомневаюсь в своих выводах.

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


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

2 минуты назад, VladislavS сказал:

ART_ME, что-то вы фигнёй страдаете. В CMSIS есть готовые функции для работы с NVIC типа NVIC_EnableIRQ()

Я не страдаю, я всего лишь пытаюсь освоить IAR. 

Точнее его отладчик, а в данном случае - узнать что делать в случае его зависания.

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


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

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