Всем привет, уже два дня убил ни как не могу понять...
При пошаговой отладке все отлично, но как запускаешь программу переменная "raz" сбрасывается в 0. Я так понял это из-за оптимизации. Помогите пожалуйста исправить.
switch (buf[raz]) { case 1: HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET); break; case 2: HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET); break; case 3: HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET); break; case 4: HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET); break; case 5: HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET); break; case 6: HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET); break; case 7: HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET); break; case 8: HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_SET); break; case 9: HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_SET); break; }
switch (raz) { case 0: HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET); break; case 1: HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET); break; case 2: HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET); break; case 3: HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_SET); break; case 4: HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET); break; case 5: HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET); break; }
Ну какая такая оптимизация при -О0? Из чего сделано умозаключение, что переменная обнуляется? Копай в сторону измерения частоты вызова прерывания таймера.
Даже при написании этого кода в майне, и использовании задержек вместо таймера, он все равно обнуляет. Такое ошущение, что он просто пропускает часть программы, и вместо инкримента до нужного значения, он делает инкримент один раз, и начинает заново. При пошаговом выполнении все отлично.
P.s. пробовал настраивать таймер на 1 гц ситуация не меняется.
Что ещё за ощущение? Мы тут инженеры-разработчики или экстрасенсы? Берём отладчик, осциллограф и логический анализатор и смотрим что там реально происходит. Ощущения бабкам-гадалкам оставь.
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
-O0 может очень весело себя вести с кодом. Да, я такое поведение встречал. Поймать сложно, выяснить точную причину - ещё сложнее. У меня решилось после -O1 и выше. Верните оптимизацию и проверьте ещё раз с ней.
И никак не могу понять логику работы кода. Сначала в зависимости от значения массива по индексу 'raz' меняются биты порта, затем по самому значению биты порта меняются ещё раз.... Это отладка, или готовый вариант?
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
-O0 может очень весело себя вести с кодом. Да, я такое поведение встречал. Поймать сложно, выяснить точную причину - ещё сложнее. У меня решилось после -O1 и выше. Верните оптимизацию и проверьте ещё раз с ней.
И никак не могу понять логику работы кода. Сначала в зависимости от значения массива по индексу 'raz' меняются биты порта, затем по самому значению биты порта меняются ещё раз.... Это отладка, или готовый вариант?
Попробовал, разницы нет. Сегодня попробую проц сменить, может он глючит... Ноги разные в разных условиях...
Добавлено after 1 hour 58 minutes 7 seconds: Всем спасибо. Решилось заменой проца...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения