ART_ME 0 9 октября, 2019 Опубликовано 9 октября, 2019 (изменено) · Жалоба В блоке 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 можно сделать? Изменено 9 октября, 2019 пользователем ART_ME Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 9 октября, 2019 Опубликовано 9 октября, 2019 · Жалоба 28 minutes ago, ART_ME said: Что с такой ситуации в IAR можно сделать? Вы реально изгаляетесь над нами, или реально не понимаете? Вот!!!!!!!!!!!!!!! Неужели трудно проверить? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ART_ME 0 9 октября, 2019 Опубликовано 9 октября, 2019 · Жалоба Дополнительная информация. В конструкции ниже 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); Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 9 октября, 2019 Опубликовано 9 октября, 2019 · Жалоба 30 minutes ago, ART_ME said: но затыкается отладчик только при третьем обращении. 1. Ставим точку останова на этот вектор. Возможно вход BREAKE у вас постоянно активен, и прерывания срабатывают бесконечно. 2. Смотрим обработчик этого прерывания. Возможно, что в нём имеются ошибки. А ещё лучше, текст этого прерывания привести здесь. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ART_ME 0 9 октября, 2019 Опубликовано 9 октября, 2019 (изменено) · Жалоба Текст stm32f10x_nvic.c ? Изменено 9 октября, 2019 пользователем ART_ME Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 9 октября, 2019 Опубликовано 9 октября, 2019 · Жалоба Исходник обработчика прерывания нужен. Это функция, которая выполняется в случае возникновения прерывания. Искать, начиная с файла startup.s(c/cpp). Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ART_ME 0 9 октября, 2019 Опубликовано 9 октября, 2019 · Жалоба Какой из них? Отмеченный? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 9 октября, 2019 Опубликовано 9 октября, 2019 · Жалоба 9 minutes ago, ART_ME said: Какой из них? Отмеченный? Тот, который находится в вашем проекте, в IAR. Он там один должен быть активный (тот, который компилируется). В нём находите вектор (название может быть другим) TIM1_BRK_IRQ и смотрите, какая функция там вызывается. Если там стоит что-то типа IRQHandler B IRQHandler ; инструкция безусловного перехода на языке ассемблера то ищет обработчик в тексте на языке си/си++. Хотя его в любом случае необходимо найти. Просто со стартап=файла это может оказаться сделать легче. Но не всегда. Дело в том, что адреса функций там объявлены weak, т.е. могут быть переопределены в любом файле. Ну или поставьте всё-таки точку останова прямо в стартап-файле. Возможно, произойдёт останов. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ART_ME 0 9 октября, 2019 Опубликовано 9 октября, 2019 · Жалоба В моем проекте в IAR с расширением s только cortexm3_macro.s Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 9 октября, 2019 Опубликовано 9 октября, 2019 · Жалоба Может быть у вас стартап на Си/Си++? Я это упомянул тут Если что, кидайте полностью свой проект с указанием версии IAR. Поищу ваш файл. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ART_ME 0 9 октября, 2019 Опубликовано 9 октября, 2019 · Жалоба Он? stm32f10x_vector.c Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 9 октября, 2019 Опубликовано 9 октября, 2019 · Жалоба Да. Теперь найдите в вашем коде содержимое функции TIM1_BRK_IRQHandler Если такой функции нет, то в map файле посмотрите адрес этой процедуры. Но она должна быть, иначе проект не линковался бы. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 37 9 октября, 2019 Опубликовано 9 октября, 2019 · Жалоба В "начинающих" разделе не полезнее будет? А то чёто у кортекса M3 уже переходы к обработчику прерывания стали по команде "B" (в векторе же - адрес уже!), прям как в 8051 ;-) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ART_ME 0 9 октября, 2019 Опубликовано 9 октября, 2019 · Жалоба 6 минут назад, Obam сказал: В "начинающих" разделе не полезнее будет? А то чёто у кортекса M3 уже переходы к обработчику прерывания стали по команде "B" (в векторе же - адрес уже!), прям как в 8051 ;-) MCD Application Team STMicroelectronics в раздел начинающих? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 9 октября, 2019 Опубликовано 9 октября, 2019 · Жалоба 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: в раздел начинающих? А вот вам пока смеяться не к лицу( У вас элементарнейшие вещи пока не взлетели. Так где ваш обработчик, вы ещё долго будете по крупицам выдавать информацию на форум? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться