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

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

B .

Молодцы, берите с полки пирожок, сдувайте пыль и кладите обратно ;-)

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

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


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

1 minute ago, Obam said:

Молодцы, берите с полки пирожок, сдувайте пыль и кладите обратно ;-)

Лучше съем, я люблю покушать) Желатель на халяву!

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


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

Если вы передаёте указатель на кусочек кода, то адрес этого кода следует увеличить на 1.


Я просто посмотрю за собой, чтоб этот кусочек кода был в секции с атрибутом "CODE" и компилятор (ну или ассемблер) для CM сам выставит признак "Thumb".

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


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

7 minutes ago, Obam said:

Я просто посмотрю за собой, чтоб этот кусочек кода был в секции с атрибутом "CODE"

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

Quote

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

:angel: 

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


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

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

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


TIM1_BRK_IRQHandler

Если такой функции нет...

Такая функция есть:

/*******************************************************************************
* 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);
}

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


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

1 minute ago, ART_ME said:

Такая функция есть:

Отлично! Точку останова (F9) вы туда ставили? Код этот вызывается, т.е. прерывание срабатывает? Если да, и "виснет", то я бы удалил функцию

MCL_SetFault(OVER_CURRENT);

и посмотрел, что будет. Возможно, она делает что-то недопустимое, ну или это прерывание вызывается слишком часто.

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


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

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

Отлично! Точку останова (F9) вы туда ставили? Код этот вызывается, т.е. прерывание срабатывает? Если да, и "виснет", то я бы удалил функцию


MCL_SetFault(OVER_CURRENT);

и посмотрел, что будет. Возможно, она делает что-то недопустимое, ну или это прерывание вызывается слишком часто.

Поставил.

Программа до этого брейкпоинта не доходит.

Потому как виснет на первом же вызове NVIC_Init.

Т.е. не на TIM1_BRK_IRQHandler, а на ADC1_2_IRQChannel

Хотя с утра стабильно висла на третьем, т.е. на  TIM1_BRK_IRQHandler

Поставить брейкпоинт  в  ADC1_2_IRQChannel?

 

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


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

15 minutes ago, ART_ME said:

Поставить брейкпоинт  в  ADC1_2_IRQChannel?

Сдается мне, это бесполезно. Похоже, адрес таблицы векторов для NVIC задан неправильно.

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


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

4 minutes ago, aaarrr said:

Похоже, адрес таблицы векторов для NVIC задан неправильно.

Ну уже что-то. Если бы автор топика информацию выдавал как-то оперативнее, а то приходится клещами вытягивать, как будто нам это нужно(( Ему следует читать, читать, и ещё раз читать про прерывания, про настройку NVIC. Думаю, что с наскоку всё это не осилить, ибо каждый раз что-то новое всплывает.

 

@ART_ME, выкладывайте проект уже, не думаю, что у вас там что-то секретное. Версию Иара только сообщите.

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


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

Коротко.

Согласно мануалу на библиотеку пакостный блок занимается синхронизацией отработки ошибки.

Дело нужное, но в настоящий момент не важное, да и решаемое иными способами.

Поэтому весь блок TIM1_BRK_IRQHandler был закоментирован, и программа пошла дальше.

До успеха далеко, но работать можно.

Всем спасибо за участие. 

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


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

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

Не по коду, а по опыту работы с IDE.

Есть блок программы, в нем в числе других многих расписаны функции А и В.

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

В блоке есть вызов функции А, но нет вызова функции В. Ни до, ни после функции А.

И в поиске по файлам я вызова функции В нигде не обнаружил.

Но она должна быть, т.к. без этой функции программа работать точно не будет.

Может быть функция В вызывается прерыванием?

Но установка брейкдауна внутрь её показала, что программа в эту функцию не заходит совсем.

Как быть в такой ситуации, т.е. как в IDE найти кто и каким образом должен вызвать функцию В?

Заранее спасибо за помощь.

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


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

15 minutes ago, ART_ME said:

т.е. как в IDE найти кто и каким образом должен вызвать функцию В?

CTRL+SHIFT+F. В окно поиска вбить название функции.

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

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


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

14 minutes ago, ART_ME said:

как в IDE найти кто и каким образом должен вызвать функцию В?

Сделать поиск имени функции по всему проекту пробовали? Сколько нашлось?

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


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

Ну из области фантастки: функция вызвыается по своему адресу, только он вычисляется на основании того, в какую секцию линкер кладёт эту функцию. Здесь чуть сложнее. Нужен код.

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


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

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