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

Keil и грабли с отладкой

Доброго времени суток уважаемые коллеги.

Столкнулся с проблемой отладки.

Проблема в в приложенном скриншоте. Крик души.

Лучше один раз увидеть, чем сто раз не правильно объяснить проблему.

Заходит в условие if только при первом заходе в while.

Заходит, но не выполняет ничего.

 

Отладчик китаец ST-LINK.

 

 

Изменено пользователем IgorKossak
[CENSORED]

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


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

Вместо эмоций лучше бы код полность привели. Про volatile, надеюсь, что-нибудь слышали?

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

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


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

Ну так из далека...

Объявление в main.c

/* Private variables ---------------------------------------------------------*/
volatile uint16_t success_scan;                //Celewaya wyborka zahwachena

 

Собственно установка данной переменной происходит в stm32f1xx_it_c

extern volatile uint16_t success_scan;
bla bla bla

/**
* @brief This function handles DMA1 channel1 global interrupt.
*/
void DMA1_Channel1_IRQHandler(void)
{
  /* USER CODE BEGIN DMA1_Channel1_IRQn 0 */
if(DMA1->ISR & DMA_ISR_TCIF1)// Polu4ili polnuyu wyborku
   {
        if(target_scan == current_scan){ 
            //Dannay wyborka yawlyaetsca celewoy
            HAL_ADCEx_MultiModeStop_DMA(&hadc1); //Ostanowka ADC
            HAL_TIM_IC_Stop_IT(&htim2, TIM_CHANNEL_1);
            //Ura! Epta....
            success_scan = 1;
            
        }
        else current_scan++;         //Increment s4et4ika wyborki
         
     }
  /* USER CODE END DMA1_Channel1_IRQn 0 */
  HAL_DMA_IRQHandler(&hdma_adc1);
  /* USER CODE BEGIN DMA1_Channel1_IRQn 1 */

  /* USER CODE END DMA1_Channel1_IRQn 1 */
}

 

Код у меня работает нормально, своевременность отработки в железе отслеживаю логическим анализатором

Проблема именно с непонятным поведением среды разработки.

 

У меня сложилось такое впечатление, что разработка на МК, это не проблема написать рабочий код, а постоянная война с инструментом (студия, программатор/отладчик, луна не стой стороны).

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


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

К бабушке не ходи - какая-нибудь неинициализированная глобальная переменная, меняющаяся в прерывании, определённая без volatile. Даже скучно....

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


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

success_scan - заполнение массива от АЦП по ДМА выполнено. Тупо флаг. Далее по бизнес логике обработка полученной выборки.

 

VladislavS, смотрим код - не скучаем )))

А лучше пишем и зарабатываем беннеттиты )

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


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

Судя по видимому куску машинного кода, процесс приготовился записать 0x32 (50). Но запишет, тогда, когда. ) Просто эта инструкция условно отнесена к строке исходного кода с присвоением, а оптимизатор вынес ее за цикл. Пошаговая отладка оптимизированного кода, вообще, тот еще аттракцион )

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


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

Предположение писал, когда кода ещё не было, но пока вы его не развеяли.

1. Не вижу никакого смысла заходить в if второй раз. Что нового программа сделает при втором входе? первый элемент массива более надёжно 50 станет равен?

2. А сброс флага где?

3. Определение массива где?

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


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

Топикстартер написал же:

"Код у меня работает нормально, ...

Проблема именно с непонятным поведением среды разработки."

 

Так что комментировать нечего, пора баиньки.

 

//Ura! Epta....

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


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

Топикстартер написал же:

"Код у меня работает нормально, ...

А чего бы ему не работать, если там ни одного полезного действия нет :) temp_mas[0] =50; я бы тоже выкинул.

 

У меня сложилось такое впечатление, что разработка на МК, это не проблема написать рабочий код, а постоянная война с инструментом (студия, программатор/отладчик, луна не стой стороны).
Это вы зря, батенька. Учиться, учиться и ещё раз учиться, как завещал дедушка Ленин.

 

ЗЫ: Может я, конечно, и ошибаюсь, так как мало под PC программирую, но оптимизаторы компиляторов под микроконтроллеры гораздо более злые. Ресурсов у микроконтроллера сильно меньше и оптимизация жизненно необходима. А ещё надо учитывать обилие прерываний, работающих практически как параллельный процесс. Вот и получается - шаг вправо/влево - побег.

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


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

richie Вы все-таки подметили )) Да пару часов ночью впервые работал с этим режимом.

Больше времени убил на данный косяк.

VladislavS

но пока вы его не развеяли

Я же не на собесе у Вас.

А чего бы ему не работать, если там ни одного полезного действия нет sm.gif temp_mas[0] =50; я бы тоже выкинул.

Привычка еще от MPLAB, надо чтото написать, например 2 строчки нопов, чтобы отладчик стал где надо. Ну это я так.

Сейчас просто принял как должное данный баг, переферия работает хорошо, данные парсятся отлично.

 

Это вы зря, батенька. Учиться, учиться и ещё раз учиться, как завещал дедушка Ленин.

16 лет как первый свой девайс разработал за бабос ))

Учится есть гуд, дурной работой заниматься не гуд.

В этом есть разница.

Хотел лицензию кейла купить, сейчас точно нет. Если такие косяки, то лекарство ему от простуды.

Все зависит от задач. Если хобби то пойдет, если как бизнес практика - не очень.

 

VladislavS, Будут умные мысли - излагайте. А так чистый флуд.

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


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

Я же не на собесе у Вас.

Можно подумать, это я только что зарегистрировался на форуме и у вас помощи просил...

 

VladislavS, Будут умные - излагайте. А так чистый флуд.

Хамло!

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


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

)

А какую строку исходника на этой конкретно машинной команде должен подсвечивать "адекватный некосячный" визуальный отладчик? В других средахи архитектурах все примеро так же...

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


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

Если вопрос ко мне, то очевидно, что отладчик не должен заходить в метод условия, если оно не является истиной (true)

 

P.S. Тема не имеет смысла без скрина, модератор убрал.

Хотя оставил оскарбление от участника форума.

Странно все это, ну да ладно.

Завтра сдам проект.

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

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


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

У отладчика нет понятий "в", "вовне" "раньше/позже по тексту" и тому подобных. ) Ему этот антропоморфизьм ни к чему, У него есть номер строки, или, в более продвинутых, номер предложения в записи исходного текста (их много в одной строке может быть) )

 

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

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


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

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...