Например TDA7294

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



Текущее время: Ср июн 26, 2019 07:00:49

Часовой пояс: 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
Сообщений: 617
Рейтинг сообщения: 0
Ну какая такая оптимизация при -О0? Из чего сделано умозаключение, что переменная обнуляется? Копай в сторону измерения частоты вызова прерывания таймера.


Вернуться наверх
 
JLCPCB, всего $2 за 10 ПП любого цвета!

Более 600 000 заказчиков по всему миру! Более 10 000 заказов в день!

Скидка до $20 на доставку для первого заказа: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
Сообщений: 617
Рейтинг сообщения: 0
Такое ошущение
Что ещё за ощущение? Мы тут инженеры-разработчики или экстрасенсы? Берём отладчик, осциллограф и логический анализатор и смотрим что там реально происходит. Ощущения бабкам-гадалкам оставь.


Вернуться наверх
 
Литиевые батарейки Fanso для промышленного применения: устойчивость к высоким температурам

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

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

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


Вернуться наверх
 
Приглашаем на вебинар «Создание беспроводных устройств на системах-на-кристалле семейства SimpleLink компании TI»

Компания Компэл, совместно с Texas Instruments приглашают 26 июня принять участие в вебинаре, где инженер по применению беспроводных технологий компании TI расскажет, как на новых беспроводных системах можно реализовать несколько полезнейших в повседневной жизни функций для ваших устройств.
С развитием элементной базы TI становится возможной реализация более удобных, функциональных и безопасных систем, недоступных ранее.
Вебинар проводит инженер по применению беспроводных технологий в TI Мари Хернес(будет дублированный перевод).
Подробнее>>
Не в сети
 Заголовок сообщения: 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
Сообщений: 484
Откуда: Караганда, Казахстан
Рейтинг сообщения: 0
А в окно дизасма глянуть не ку?

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


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


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

Карма: 4
Рейтинг сообщений: 12
Зарегистрирован: Вт апр 02, 2013 11:03:29
Сообщений: 68
Откуда: Санкт-Петербург
Рейтинг сообщения: 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 часа [ Летнее время ]


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

Сейчас этот форум просматривают: afz, AlanDrakes и гости: 3


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

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


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