Developerrr 0 11 мая, 2018 Опубликовано 11 мая, 2018 (изменено) · Жалоба Доброго времени суток уважаемые коллеги. Столкнулся с проблемой отладки. Проблема в в приложенном скриншоте. Крик души. Лучше один раз увидеть, чем сто раз не правильно объяснить проблему. Заходит в условие if только при первом заходе в while. Заходит, но не выполняет ничего. Отладчик китаец ST-LINK. Изменено 11 мая, 2018 пользователем IgorKossak [CENSORED] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба Вместо эмоций лучше бы код полность привели. Про volatile, надеюсь, что-нибудь слышали? А так, я бы и одного раза не стал в этот if входить, а выкинул весь код как не имеющий смысла. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dii# 0 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба а что скравается за словом success_scan? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Developerrr 0 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба Ну так из далека... Объявление в 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 29 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба К бабушке не ходи - какая-нибудь неинициализированная глобальная переменная, меняющаяся в прерывании, определённая без volatile. Даже скучно.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Developerrr 0 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба success_scan - заполнение массива от АЦП по ДМА выполнено. Тупо флаг. Далее по бизнес логике обработка полученной выборки. VladislavS, смотрим код - не скучаем ))) А лучше пишем и зарабатываем беннеттиты ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dii# 0 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба Судя по видимому куску машинного кода, процесс приготовился записать 0x32 (50). Но запишет, тогда, когда. ) Просто эта инструкция условно отнесена к строке исходного кода с присвоением, а оптимизатор вынес ее за цикл. Пошаговая отладка оптимизированного кода, вообще, тот еще аттракцион ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба Предположение писал, когда кода ещё не было, но пока вы его не развеяли. 1. Не вижу никакого смысла заходить в if второй раз. Что нового программа сделает при втором входе? первый элемент массива более надёжно 50 станет равен? 2. А сброс флага где? 3. Определение массива где? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
richie 0 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба Топикстартер написал же: "Код у меня работает нормально, ... Проблема именно с непонятным поведением среды разработки." Так что комментировать нечего, пора баиньки. //Ura! Epta.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба Топикстартер написал же: "Код у меня работает нормально, ... А чего бы ему не работать, если там ни одного полезного действия нет :) temp_mas[0] =50; я бы тоже выкинул. У меня сложилось такое впечатление, что разработка на МК, это не проблема написать рабочий код, а постоянная война с инструментом (студия, программатор/отладчик, луна не стой стороны).Это вы зря, батенька. Учиться, учиться и ещё раз учиться, как завещал дедушка Ленин. ЗЫ: Может я, конечно, и ошибаюсь, так как мало под PC программирую, но оптимизаторы компиляторов под микроконтроллеры гораздо более злые. Ресурсов у микроконтроллера сильно меньше и оптимизация жизненно необходима. А ещё надо учитывать обилие прерываний, работающих практически как параллельный процесс. Вот и получается - шаг вправо/влево - побег. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Developerrr 0 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба richie Вы все-таки подметили )) Да пару часов ночью впервые работал с этим режимом. Больше времени убил на данный косяк. VladislavS но пока вы его не развеяли Я же не на собесе у Вас. А чего бы ему не работать, если там ни одного полезного действия нет sm.gif temp_mas[0] =50; я бы тоже выкинул. Привычка еще от MPLAB, надо чтото написать, например 2 строчки нопов, чтобы отладчик стал где надо. Ну это я так. Сейчас просто принял как должное данный баг, переферия работает хорошо, данные парсятся отлично. Это вы зря, батенька. Учиться, учиться и ещё раз учиться, как завещал дедушка Ленин. 16 лет как первый свой девайс разработал за бабос )) Учится есть гуд, дурной работой заниматься не гуд. В этом есть разница. Хотел лицензию кейла купить, сейчас точно нет. Если такие косяки, то лекарство ему от простуды. Все зависит от задач. Если хобби то пойдет, если как бизнес практика - не очень. VladislavS, Будут умные мысли - излагайте. А так чистый флуд. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба Я же не на собесе у Вас. Можно подумать, это я только что зарегистрировался на форуме и у вас помощи просил... VladislavS, Будут умные - излагайте. А так чистый флуд. Хамло! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dii# 0 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба ) А какую строку исходника на этой конкретно машинной команде должен подсвечивать "адекватный некосячный" визуальный отладчик? В других средахи архитектурах все примеро так же... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Developerrr 0 11 мая, 2018 Опубликовано 11 мая, 2018 (изменено) · Жалоба Если вопрос ко мне, то очевидно, что отладчик не должен заходить в метод условия, если оно не является истиной (true) P.S. Тема не имеет смысла без скрина, модератор убрал. Хотя оставил оскарбление от участника форума. Странно все это, ну да ладно. Завтра сдам проект. Изменено 11 мая, 2018 пользователем Developerrr Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dii# 0 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба У отладчика нет понятий "в", "вовне" "раньше/позже по тексту" и тому подобных. ) Ему этот антропоморфизьм ни к чему, У него есть номер строки, или, в более продвинутых, номер предложения в записи исходного текста (их много в одной строке может быть) ) Попробуйте сами описать алгоритм работы отладчика, который выполнит ваше же требование на оптимизированном коде - сами все поймете ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться