реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Keil и грабли с отладкой, STM32C8T6, Keil
Developerrr
сообщение May 11 2018, 17:23
Сообщение #1





Группа: Участник
Сообщений: 8
Регистрация: 11-05-18
Из: Минск
Пользователь №: 103 965



Доброго времени суток уважаемые коллеги.
Столкнулся с проблемой отладки.
Проблема в в приложенном скриншоте. Крик души.
Лучше один раз увидеть, чем сто раз не правильно объяснить проблему.
Заходит в условие if только при первом заходе в while.
Заходит, но не выполняет ничего.

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



Сообщение отредактировал IgorKossak - May 11 2018, 19:09
Причина редактирования: [CENSORED]
Go to the top of the page
 
+Quote Post
VladislavS
сообщение May 11 2018, 18:09
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 469
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Вместо эмоций лучше бы код полность привели. Про volatile, надеюсь, что-нибудь слышали?
А так, я бы и одного раза не стал в этот if входить, а выкинул весь код как не имеющий смысла.
Go to the top of the page
 
+Quote Post
Serge V Iz
сообщение May 11 2018, 18:18
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 142
Регистрация: 3-05-18
Пользователь №: 103 639



а что скравается за словом success_scan?
Go to the top of the page
 
+Quote Post
Developerrr
сообщение May 11 2018, 18:20
Сообщение #4





Группа: Участник
Сообщений: 8
Регистрация: 11-05-18
Из: Минск
Пользователь №: 103 965



Ну так из далека...
Объявление в 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 */
}


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

У меня сложилось такое впечатление, что разработка на МК, это не проблема написать рабочий код, а постоянная война с инструментом (студия, программатор/отладчик, луна не стой стороны).
Go to the top of the page
 
+Quote Post
VladislavS
сообщение May 11 2018, 18:22
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 469
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



К бабушке не ходи - какая-нибудь неинициализированная глобальная переменная, меняющаяся в прерывании, определённая без volatile. Даже скучно....
Go to the top of the page
 
+Quote Post
Developerrr
сообщение May 11 2018, 18:24
Сообщение #6





Группа: Участник
Сообщений: 8
Регистрация: 11-05-18
Из: Минск
Пользователь №: 103 965



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

VladislavS, смотрим код - не скучаем )))
А лучше пишем и зарабатываем беннеттиты )
Go to the top of the page
 
+Quote Post
Serge V Iz
сообщение May 11 2018, 18:31
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 142
Регистрация: 3-05-18
Пользователь №: 103 639



Судя по видимому куску машинного кода, процесс приготовился записать 0x32 (50). Но запишет, тогда, когда. ) Просто эта инструкция условно отнесена к строке исходного кода с присвоением, а оптимизатор вынес ее за цикл. Пошаговая отладка оптимизированного кода, вообще, тот еще аттракцион )
Go to the top of the page
 
+Quote Post
VladislavS
сообщение May 11 2018, 18:34
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 469
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Предположение писал, когда кода ещё не было, но пока вы его не развеяли.
1. Не вижу никакого смысла заходить в if второй раз. Что нового программа сделает при втором входе? первый элемент массива более надёжно 50 станет равен?
2. А сброс флага где?
3. Определение массива где?
Go to the top of the page
 
+Quote Post
richie
сообщение May 11 2018, 18:40
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 147
Регистрация: 5-07-04
Из: Обнинск
Пользователь №: 261



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

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

//Ura! Epta....
Go to the top of the page
 
+Quote Post
VladislavS
сообщение May 11 2018, 18:48
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 469
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



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

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

ЗЫ: Может я, конечно, и ошибаюсь, так как мало под PC программирую, но оптимизаторы компиляторов под микроконтроллеры гораздо более злые. Ресурсов у микроконтроллера сильно меньше и оптимизация жизненно необходима. А ещё надо учитывать обилие прерываний, работающих практически как параллельный процесс. Вот и получается - шаг вправо/влево - побег.
Go to the top of the page
 
+Quote Post
Developerrr
сообщение May 11 2018, 19:17
Сообщение #11





Группа: Участник
Сообщений: 8
Регистрация: 11-05-18
Из: Минск
Пользователь №: 103 965



richie Вы все-таки подметили )) Да пару часов ночью впервые работал с этим режимом.
Больше времени убил на данный косяк.
VladislavS
Цитата
но пока вы его не развеяли

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

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

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

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

VladislavS, Будут умные мысли - излагайте. А так чистый флуд.
Go to the top of the page
 
+Quote Post
VladislavS
сообщение May 11 2018, 19:28
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 469
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Цитата(Developerrr @ May 11 2018, 22:17) *
Я же не на собесе у Вас.

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

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

Хамло!
Go to the top of the page
 
+Quote Post
Serge V Iz
сообщение May 11 2018, 19:30
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 142
Регистрация: 3-05-18
Пользователь №: 103 639



)
А какую строку исходника на этой конкретно машинной команде должен подсвечивать "адекватный некосячный" визуальный отладчик? В других средахи архитектурах все примеро так же...
Go to the top of the page
 
+Quote Post
Developerrr
сообщение May 11 2018, 19:37
Сообщение #14





Группа: Участник
Сообщений: 8
Регистрация: 11-05-18
Из: Минск
Пользователь №: 103 965



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

P.S. Тема не имеет смысла без скрина, модератор убрал.
Хотя оставил оскарбление от участника форума.
Странно все это, ну да ладно.
Завтра сдам проект.

Сообщение отредактировал Developerrr - May 11 2018, 19:45
Go to the top of the page
 
+Quote Post
Serge V Iz
сообщение May 11 2018, 19:43
Сообщение #15


Частый гость
**

Группа: Участник
Сообщений: 142
Регистрация: 3-05-18
Пользователь №: 103 639



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

Попробуйте сами описать алгоритм работы отладчика, который выполнит ваше же требование на оптимизированном коде - сами все поймете )
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th August 2018 - 11:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01063 секунд с 7
ELECTRONIX ©2004-2016