Например TDA7294

Форум РадиоКот • Просмотр темы - Помогите разобраться с оптимизацией(обнуляет переменную)
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Ср июл 24, 2019 09:30:48

Часовой пояс: UTC + 3 часа [ Летнее время ]


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Помогите разобраться с оптимизацией(обнуляет переменную)
СообщениеДобавлено: Пн фев 25, 2019 19:52:17 
Родился

Зарегистрирован: Чт дек 22, 2011 21:32:35
Сообщений: 7
Рейтинг сообщения: 0
Всем привет, уже два дня убил ни как не могу понять...

При пошаговой отладке все отлично, но как запускаешь программу переменная "raz" сбрасывается в 0. Я так понял это из-за оптимизации.
Помогите пожалуйста исправить.

main.c:
Код:
#include "main.h"
#include "stm32f1xx_hal.h"

I2C_HandleTypeDef hi2c1;

TIM_HandleTypeDef htim4;


/* Private variables _______*/
uint8_t temp;
uint8_t buf[6];
   uint8_t des,sek=4;
 volatile uint8_t raz=5;
  volatile uint8_t update=0;

void SystemClock_Config(void);
void Error_Handler(void);
static void MX_GPIO_Init(void);
static void MX_I2C1_Init(void);
static void MX_TIM4_Init(void);

  HAL_Init();

  MX_GPIO_Init();
  MX_I2C1_Init();
  MX_TIM4_Init();

   buf[0]=1;   
   buf[1]=2;   
   buf[2]=3;   
   buf[3]=4;   
   buf[4]=5;   
   buf[5]=6;   
   
HAL_TIM_Base_Start   (&htim4);
HAL_TIM_Base_Start_IT (&htim4);   

  while (1)
  {
//RTC_Read(hi2c1,0,&temp);   
if (update==1){
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);
   
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);      
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);   
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);   
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_RESET);
   
   
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;
}

update=0;
}
}
}


stm32f1xx_it.c
Код:
#include "stm32f1xx_hal.h"
#include "stm32f1xx.h"
#include "stm32f1xx_it.h"


extern volatile uint8_t raz;
 extern volatile uint8_t update;


void TIM4_IRQHandler(void)
{
raz++;
if (raz==6){raz=0;}
update=1;

  HAL_TIM_IRQHandler(&htim4);
}


P.s. оптимизация -O0


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите разобраться с оптимизацией(обнуляет переменную)
СообщениеДобавлено: Вт фев 26, 2019 07:27:50 
Вымогатель припоя
Аватар пользователя

Карма: 10
Рейтинг сообщений: 66
Зарегистрирован: Вт май 01, 2018 20:44:47
Сообщений: 626
Рейтинг сообщения: 0
Ну какая такая оптимизация при -О0? Из чего сделано умозаключение, что переменная обнуляется? Копай в сторону измерения частоты вызова прерывания таймера.


Вернуться наверх
 
JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Отличное качество, подтвержденное более чем 600,000 пользователей! Более 10,000 заказов в день.

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: Помогите разобраться с оптимизацией(обнуляет переменную)
СообщениеДобавлено: Вт фев 26, 2019 16:17:30 
Родился

Зарегистрирован: Чт дек 22, 2011 21:32:35
Сообщений: 7
Рейтинг сообщения: 0
Даже при написании этого кода в майне, и использовании задержек вместо таймера, он все равно обнуляет. Такое ошущение, что он просто пропускает часть программы, и вместо инкримента до нужного значения, он делает инкримент один раз, и начинает заново. При пошаговом выполнении все отлично.

P.s. пробовал настраивать таймер на 1 гц ситуация не меняется.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $88 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay
Не в сети
 Заголовок сообщения: Re: Помогите разобраться с оптимизацией(обнуляет переменную)
СообщениеДобавлено: Вт фев 26, 2019 18:58:28 
Вымогатель припоя
Аватар пользователя

Карма: 10
Рейтинг сообщений: 66
Зарегистрирован: Вт май 01, 2018 20:44:47
Сообщений: 626
Рейтинг сообщения: 0
Такое ошущение
Что ещё за ощущение? Мы тут инженеры-разработчики или экстрасенсы? Берём отладчик, осциллограф и логический анализатор и смотрим что там реально происходит. Ощущения бабкам-гадалкам оставь.


Вернуться наверх
 
Плавкие предохранители LittelFuse. Грамотный подбор

Выбор оптимального плавкого предохранителя требует учета многих параметров. Для упрощения выбора оптимального предохранителя и автоматизации расчетов Littelfuse предлагает онлайн-утилиту. Подробнее>>
Не в сети
 Заголовок сообщения: Re: Помогите разобраться с оптимизацией(обнуляет переменную)
СообщениеДобавлено: Вт фев 26, 2019 19:04:09 
Открыл глаза
Аватар пользователя

Карма: 5
Рейтинг сообщений: 15
Зарегистрирован: Пн июл 04, 2016 17:51:22
Сообщений: 74
Откуда: Россия, Омск
Рейтинг сообщения: 0
-O0 может очень весело себя вести с кодом. Да, я такое поведение встречал. Поймать сложно, выяснить точную причину - ещё сложнее. У меня решилось после -O1 и выше.
Верните оптимизацию и проверьте ещё раз с ней.

И никак не могу понять логику работы кода. Сначала в зависимости от значения массива по индексу 'raz' меняются биты порта, затем по самому значению биты порта меняются ещё раз.... Это отладка, или готовый вариант?


Вернуться наверх
 
Немногим дороже дискретного решения: новое поколение импульсных стабилизаторов Mornsun

Практически во всех радиоэлектронных устройствах массово применяются линейные понижающие стабилизаторы напряжения типа КРЕН в корпусе TO220 (другое обозначение – 78хх) и им подобные для формирования основного напряжения питания схемы.
Данные стабилизаторы позволяют без особых затрат получить нужное для каскада или узла схемы напряжение, если устройство питается от внешнего источника с более высоким напряжением. Для этого требуются… Подробнее>>
Не в сети
 Заголовок сообщения: Re: Помогите разобраться с оптимизацией(обнуляет переменную)
СообщениеДобавлено: Вт фев 26, 2019 21:09:33 
Родился

Зарегистрирован: Чт дек 22, 2011 21:32:35
Сообщений: 7
Рейтинг сообщения: 0
-O0 может очень весело себя вести с кодом. Да, я такое поведение встречал. Поймать сложно, выяснить точную причину - ещё сложнее. У меня решилось после -O1 и выше.
Верните оптимизацию и проверьте ещё раз с ней.

И никак не могу понять логику работы кода. Сначала в зависимости от значения массива по индексу 'raz' меняются биты порта, затем по самому значению биты порта меняются ещё раз.... Это отладка, или готовый вариант?


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

Добавлено after 1 hour 58 minutes 7 seconds:
Всем спасибо. Решилось заменой проца...


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: Помогите разобраться с оптимизацией(обнуляет переменную)
СообщениеДобавлено: Пн мар 04, 2019 19:52:08 
Мучитель микросхем
Аватар пользователя

Карма: 5
Рейтинг сообщений: 91
Зарегистрирован: Сб дек 22, 2012 09:17:42
Сообщений: 489
Откуда: Караганда, Казахстан
Рейтинг сообщения: 0
А в окно дизасма глянуть не ку?

_________________
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: Помогите разобраться с оптимизацией(обнуляет переменную)
СообщениеДобавлено: Вт апр 16, 2019 23:43:11 
Открыл глаза
Аватар пользователя

Карма: 4
Рейтинг сообщений: 12
Зарегистрирован: Вт апр 02, 2013 11:03:29
Сообщений: 70
Откуда: Санкт-Петербург
Рейтинг сообщения: 0
...Такое ошущение...

Каким местом ощущаете...? Тут нет экстрасенсов.
Как выше сказали - берите осцилл или частотомер и смотрите что на портах твориться.

Так же Вы должны понимать, что если начальное состояние
Код:
raz=5
, то после
Код:
HAL_TIM_Base_Start_IT (&htim4);
Вы с большой вероятностью на следующем такте можете попасть в
Код:
void TIM4_IRQHandler(void)
и сами обнулить переменную.

_________________
Для связи email: info собака qbit.su


Вернуться наверх
 
Prist.ru предлагает скидку всем частным лицам при покупке приборов АКИП, GW Instek, APPA (кроме осциллографов АКИП-4115/1А, GDS-71102)!

Интересные новинки уже на складе:

Осциллограф АКИП-4126Е

Многоканальные источники питания серии GPP

Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y