Jump to content
ART_ME

Отладчик

Recommended Posts

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

В конструкции ниже 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);

Share this post


Link to post
Share on other sites
Posted (edited)

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

NVIC_EnableIRQ(ADC1_2_IRQ);
NVIC_EnableIRQ(TIM1_UP_IRQ);
NVIC_EnableIRQ(TIM1_BRK_IRQ);
58 минут назад, ART_ME сказал:

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

Хедер обработчика точно верно написан?

Edited by BARS_

Share this post


Link to post
Share on other sites
20 минут назад, BARS_ сказал:

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

Не исключено, что это придется сделать.

Библиотеки действительно странноваты. По крайней мере тот же STM32F10x_nvic.c на сайте ST я не нашел.

Share this post


Link to post
Share on other sites

Технология Maxim Integrated nanoPower: когда малый IQ имеет преимущества

При разработке устройств с батарейным питанием важно выбирать компоненты не просто с малым потреблением, но и с предельно малым током покоя. При этом следует обратить внимание на линейку nanoPower производства компании Maxim Integrated. В статье рассмотрено их применение на примере системы датчиков беспроводной оконной сигнализации.

Подробнее

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

Библиотеки действительно странноваты.

Более того, они нафиг не нужны. Ну нет в STM32 ничего столь сложного, что нужны либы для настройки. Простецкие вещи, типа SPIm UART, таймеров и т.п. вообще в 3-4 строки настраиваются. А главное, при настройке вручную все очень легко проверяется по даташиту, а код получается простой и читаемый.

Share this post


Link to post
Share on other sites

Вычитал в инете, что в этой библиотеке могут быть проблемы с приоритетами. То бишь их надо посмотреть во время выполнения.

Выставил в Watch переменную BRK_SUB_PRIORITY, но её значение почему-то не отобразилось. По идее локальная переменная должна отображаться при остановке в блоке на экране.

Это косяк или так и надо?

Share this post


Link to post
Share on other sites
                     

Платы Nucleo на базе STM32G0: чего можно добиться с помощью связки Nucleo и Arduino

Платы Nucleo и платы расширения X-NUCLEO от STMicroelectronics можно интегрировать в платформу Arduino с помощью библиотеки STM32duino. Связка плат Nucleo и платформы Arduino, и наличие готовых библиотек – представляет удобный инструмент для создания прототипов и конечных приложений в условиях ограниченного времени. Статья содержит пошаговые инструкции по установке библиотек и запуску примеров для Nucleo.

Подробнее...

33 минуты назад, ART_ME сказал:

По идее локальная переменная должна отображаться при остановке в блоке на экране.

Если она объявлена внутри функции, то в 99% случаев она не отобразится, но можно посмотреть ее в Memory.

 

34 минуты назад, ART_ME сказал:

Вычитал в инете, что в этой библиотеке могут быть проблемы с приоритетами.

Мыши плакали, кололись, но продолжали жрать кактус...

Share this post


Link to post
Share on other sites
2 часа назад, BARS_ сказал:

Мыши плакали, кололись, но продолжали жрать кактус...

Проект некоммерческий.

Т.е.  процесс достижения результата может оказаться важнее самого результата.

Share this post


Link to post
Share on other sites
3 минуты назад, ART_ME сказал:

Т.е.  процесс достижения результата может оказаться важнее самого результата.

Так почему бы не достигать его по человечески, попутно изучая даташит?:crazy: Польза от копания кривых библиотек довольно сомнительная...

Share this post


Link to post
Share on other sites
1 минуту назад, BARS_ сказал:

Так почему бы не достигать его по человечески, попутно изучая даташит?

Потому, что достигать его в данном случае вовсе не обязательно.  

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

Share this post


Link to post
Share on other sites

но тебе все равно навяжут правильный путь единственной и неповторимой истины

Share this post


Link to post
Share on other sites
7 минут назад, ART_ME сказал:

Потому, что достигать его в данном случае вовсе не обязательно.  

В чем тогда смысл траты времени?:huh:

Share this post


Link to post
Share on other sites
Posted (edited)
20 минут назад, BARS_ сказал:

В чем тогда смысл траты времени?:huh:

На 50% в самообразовании. Остальные 50% чисто прагматические - валяется хорошая железяка, которую и выкинуть жалко, и чинить нормальным образом нерентабельно.

И STM32 тоже валяются....

--------------------------------------------------------------

--------------------------------------------------------------

Тут еще одна фича всплыла.

Изначально проект был рассчитан на STM32F103VBH6

А используется само собой на stm32F103C8T6

Различие в количестве ног и объеме флеш-памяти.

Вроде все должно работать, но...

Хотя до этого я примеры от ST под  STM32F103VBH на свой stm32F103C8T6 прогонял, проблем ни разу не было.

Самое странное - это нестабильность.

К примеру сегодня утром наблюдалось стабильное зависание на третьем вызове NVIC_Init.

А вечером -  стабильно на первом вызове.

Хрень какая-то!!!  :unknw:

 

Edited by ART_ME

Share this post


Link to post
Share on other sites

Коротко.

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

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

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

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

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

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

 

Edited by ART_ME

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
9 часов назад, ART_ME сказал:

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

путем чтения и анализа исходного кода. Ваш кэп

Edited by mail_robot

Share this post


Link to post
Share on other sites
7 часов назад, mail_robot сказал:

путем чтения и анализа исходного кода. Ваш кэп

Я так и сделал. :D

Поэтому более простой вопрос:

Является ли нижеследующее поведение отладчика нормальным или есть признак проблемы?

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

- если поставить еще один брейкпоинт в майн перед установкой переменной, разрешающей запуск этой функции по прерыванию и повторно запустить RUN, то программа в эту функцию попадает.

 

Share this post


Link to post
Share on other sites
30 минут назад, ART_ME сказал:

и повторно запустить RUN, то программа в эту функцию попадает.

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

Share this post


Link to post
Share on other sites
5 часов назад, ruhi сказал:

так посмотри по call-стеку откуда она вызвалась

Спасибо. Без дураков. 

Edited by ART_ME

Share this post


Link to post
Share on other sites

Практический совет чайникам от чайника  - как избавиться от неоднозначности поведения отладчика. 

СмОтрите свободные порты на Вашем STM32 и вешаете на них светодиоды. Штук пять-шесть вполне хватит.

Потом вставляете их включение\выключение\переключение по ходу программы, не забывая про обработчики прерываний. 

В отличие от брейкпоинтов  светодиоды не имеют неоднозначности показаний. 

Edited by ART_ME

Share this post


Link to post
Share on other sites

америку открыл :D

а ты в курсе, что есть еще вариант в консоль по уарту через свисток отладочную инфу человеческим языком слать. И по ресурсам не затратнее светодиодов. Но это из простых вариантов. Посерьезнее - использовать нормальную железку итладчик и линию вывода данных, штатно под это заточенную

Share this post


Link to post
Share on other sites
1 час назад, mail_robot сказал:

америку открыл

Выходит что так.

Потому как никто эту америку мне не подсказал.

Share this post


Link to post
Share on other sites

много еще будет открытий чудных, если не читать а действовать наугад. Поэтому нормальные люди любую работу начинают с изучения имеющегося опыта в данном вопросе, а уж потом велосипеды изобретают

Share this post


Link to post
Share on other sites
1 минуту назад, mail_robot сказал:

много еще будет открытий чудных...

Не будет, потому как я когда-то давно очень плотно занимался Z80, и мне всего лишь пришлось вспомнить прошлое.

Моя ошибка в том, что я напрасно понадеялся на современные IDE и отзывчивость ими  владеющих.

Share this post


Link to post
Share on other sites

иде то как раз в порядке. Это мы в желании сэкономить пользуемся дешманскими кастрированными свистками-отладчиками. А так то жтаг отладчик умеет хоть на ушах контроллер заставить плясать. Но кмк варианта свистка + uart вполне достаточно для хобби, даже с избытком

Edited by mail_robot

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By n_angelo
      Привет. Хочу узнать ваше мнение. Я новичок в embedded. Можно сказать, что пришел с веба. Малость Python, JS, C. Меня, конечно, предупреждали начать с AVR, но я уверенный в себе решил сразу залезть на STM32. Вынашивая идею для проекта, параллельно курив Reference Manual и Data Sheet по STM32, я понял что его будет слишком жирно для проекта. Я перескочил на STM8L. И тут меня начал огорчать мир embedded. При переходе между stm8 и stm32 нужно менять IDE (TrueStudio на STVD). Во избежание таких курьёзов я пересаживаюсь на IAR. В процессе подключения родной библиотеки от ST, понимаю что библиотека от IAR для того же самого STM8L152C6T6 дико отличается (макросы, структуры). Привет веб-разработка. Как такое могло произойти, что под один и тот же контроллер ST даёт одну библиотеку, а IAR другую. И нигде в уроках тебя не предупредят об этом. Ну, ребят, у меня всего одна жизнь. Вы уже договоритесь там между собой? Придите к единому стандарту. Или они так решили новичков завендерлочить? Моё мнение (не претендует на правильное): пробираясь сквозь тернии популярной архитектуры ARM, инфраструктуры, инструментария, забываешь про бизнес-логику устройств. А еще просто пропасть между "я ничего не понимаю" и "господи, я зажег светодиод". Речь не о копипастерах с уроков, а действительно понимая что ты делаешь, в каком регистре, что меняешь. Это путь в 2000 (а то и больше) страниц на английском перечитанных по несколько раз, чтобы отоложилось. И в конце тебя ждут разные версии одной и той же библиотки в разных IDE. И сидишь вдупляешь... ну почему... я же в правильный регистр кладу правильную маску... ох, наболело. Такое ощущение что не для людей это всё делали, не для людей.
      Ваше мнение?
    • Guest Максим
      By Guest Максим
      Всем светлым и умным головам привет!

      Никак не могу найти информацию о данном прерывании TIM1_BRK_UP_TRG_COM.
      Вопрос 1: Что это за стек или система прерываний? 
      Вопрос 2: Когда будет вызываться обработчик прерывания TIM1_BRK_UP_TRG_COM_IRQHandler, если также есть обработчик прерывания TIM1_CC_IRQHandler?
      Вопрос 3: период переполнения таймера равен 100 мкс. Сколько раз будет вызываться обработчик прерывания TIM1_BRK_UP_TRG_COM_IRQHandler до обработчика прерывания TIM1_CC_IRQHandler? По логике вещей, предполагаю, что 100 раз?
      Заранее благодарен!

      Всем радости))
    • By MillyVolt2
      Всем привет!
      Не нашел здесь темы по IAR, поэтому решил создать её сам, может пригодится для общих вопросов.
       
      В моём случае это IAR EW для ARM, работаю с STM32.
      Версия пакета с офф сайта, 8.20 - последняя на данный момент, с ограничением по размеру кода 32Кб.
      Открыл в IAR пример из библиотеки STM32CubeL4, скачанной с st.com, скомпилировал Project -> Rebuild All. Так как демоплата DISCO ещё не пришла, использую симулятор - Project -> Options -> Debugger вместо ST-Link выбрал Simulator. Далее Debug without download, вылезают 2 ошибки:
       
      User error: Stack pointer is setup to incorrect alignment.  Stack addr = 0xCDCDCDCD
       
      Failed to load debugee: C:\Users\Vova\STM32Cube\Repository\STM32Cube_FW_L4_V1.10.0\Projects\STM32L476G-Discovery\Examples\GPIO\GPIO_EXTI\EWARM\STM32L476G-Discovery\Exe\Project.out
       
      Может кто сталкивался с подобным?
    • By елка
      Здравствуйте, подскажите пожалуйста как можно прошить контроллер внутри ардуино не вызывая при этом avrdude через своё IDE.
      Можно ли это сделать через какой либо встроенный в IAR инструмент? Я только сегодня установил иар, до этого через atmel studio пользовался дудцом и это не сильно удобно.
      Хочу узнать, может кто использует удобные способы) P.S. ничего не спрашивал на форумах 5 лет.
    • By LoKeR
      ЗДРАВСТВУЙТЕ Я СОЗДАЛ ПРОЕКТ МИГАНИЕМ СВЕТОДИОДОМ КОД ПРОЕКТА ВНИЗУ
      #include <system_stm32f0xx.h>
      int main(void)
      {
      RCC->AHBENR |= RCC_AHBENR_GPIOCEN;
      GPIOC->MODER |= (GPIO_MODER_MODER8_0 | GPIO_MODER_MODER9_0) ;
      }
      void delay (int a)
      {
      volatile int i,j;
      for (i=0 ; i < a ; i++)
      {
      j++;
      }
      return;
      }
      ПРИ КОМПИЛЯЦИИ ПРОЕКТА ВЫВОДИТ ОШИБКУ
      ".\output\keil_project.axf" - 29 Errors, 0 Warning(s).
      Target not created
      В ЧЕМ ПРОБЛЕМА КАК МОЖНО ЕГО РЕШИТЬ
×
×
  • Create New...