Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Keil и грабли с отладкой
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Developerrr
Доброго времени суток уважаемые коллеги.
Столкнулся с проблемой отладки.
Проблема в в приложенном скриншоте. Крик души.
Лучше один раз увидеть, чем сто раз не правильно объяснить проблему.
Заходит в условие if только при первом заходе в while.
Заходит, но не выполняет ничего.

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

VladislavS
Вместо эмоций лучше бы код полность привели. Про volatile, надеюсь, что-нибудь слышали?
А так, я бы и одного раза не стал в этот if входить, а выкинул весь код как не имеющий смысла.
Serge V Iz
а что скравается за словом success_scan?
Developerrr
Ну так из далека...
Объявление в 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 */
}


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

У меня сложилось такое впечатление, что разработка на МК, это не проблема написать рабочий код, а постоянная война с инструментом (студия, программатор/отладчик, луна не стой стороны).
VladislavS
К бабушке не ходи - какая-нибудь неинициализированная глобальная переменная, меняющаяся в прерывании, определённая без volatile. Даже скучно....
Developerrr
success_scan - заполнение массива от АЦП по ДМА выполнено. Тупо флаг. Далее по бизнес логике обработка полученной выборки.

VladislavS, смотрим код - не скучаем )))
А лучше пишем и зарабатываем беннеттиты )
Serge V Iz
Судя по видимому куску машинного кода, процесс приготовился записать 0x32 (50). Но запишет, тогда, когда. ) Просто эта инструкция условно отнесена к строке исходного кода с присвоением, а оптимизатор вынес ее за цикл. Пошаговая отладка оптимизированного кода, вообще, тот еще аттракцион )
VladislavS
Предположение писал, когда кода ещё не было, но пока вы его не развеяли.
1. Не вижу никакого смысла заходить в if второй раз. Что нового программа сделает при втором входе? первый элемент массива более надёжно 50 станет равен?
2. А сброс флага где?
3. Определение массива где?
richie
Топикстартер написал же:
"Код у меня работает нормально, ...
Проблема именно с непонятным поведением среды разработки."

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

//Ura! Epta....
VladislavS
Цитата(richie @ May 11 2018, 21:40) *
Топикстартер написал же:
"Код у меня работает нормально, ...
А чего бы ему не работать, если там ни одного полезного действия нет sm.gif temp_mas[0] =50; я бы тоже выкинул.

Цитата(Developerrr @ May 11 2018, 21:20) *
У меня сложилось такое впечатление, что разработка на МК, это не проблема написать рабочий код, а постоянная война с инструментом (студия, программатор/отладчик, луна не стой стороны).
Это вы зря, батенька. Учиться, учиться и ещё раз учиться, как завещал дедушка Ленин.

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

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

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

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

16 лет как первый свой девайс разработал за бабос ))
Учится есть гуд, дурной работой заниматься не гуд.
В этом есть разница.
Хотел лицензию кейла купить, сейчас точно нет. Если такие косяки, то лекарство ему от простуды.
Все зависит от задач. Если хобби то пойдет, если как бизнес практика - не очень.

VladislavS, Будут умные мысли - излагайте. А так чистый флуд.
VladislavS
Цитата(Developerrr @ May 11 2018, 22:17) *
Я же не на собесе у Вас.

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

Цитата(Developerrr @ May 11 2018, 22:17) *
VladislavS, Будут умные - излагайте. А так чистый флуд.

Хамло!
Serge V Iz
)
А какую строку исходника на этой конкретно машинной команде должен подсвечивать "адекватный некосячный" визуальный отладчик? В других средахи архитектурах все примеро так же...
Developerrr
Если вопрос ко мне, то очевидно, что отладчик не должен заходить в метод условия, если оно не является истиной (true)

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

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

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

Ну че уж там! Давайте в блокноте сразу бинарник писать....
Obam
Цитата(Serge V Iz @ May 11 2018, 22:30) *
)
А какую строку исходника на этой конкретно машинной команде должен подсвечивать "адекватный некосячный" визуальный отладчик? В других средахи архитектурах все примеро так же...

Ну, вообще-то, если "шагаем" в окошке дизассемблера, то в окошке с исходником выделена строка, которая странслировна во всё то, что ей соответствует в дизассемблере. Но это сильно "на любителя" - "ходить" в дизассемблере (;

Цитата
...для пользователя компилятора под которым работет отладчик.

Протестую (; отладчик под компилятором нифига не работает (;
Developerrr
Я смирился с проблемой данного типа.
Забил.
Проект доведён до логического завершения.

Я больше перешёл на разработку для пк и андроид.
А там нет особых проблем с отладкой.
Растащило видать
Forger
Цитата(Developerrr @ May 12 2018, 22:05) *
Растащило видать

В точку! Других причин тоже не вижу biggrin.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.