Например TDA7294

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





Текущее время: Ср апр 17, 2024 02:28:37

Часовой пояс: UTC + 3 часа


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



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

Зарегистрирован: Чт дек 22, 2011 20: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 06:27:50 
Поставщик валерьянки для Кота
Аватар пользователя

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


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

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

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


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

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

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

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


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

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

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

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


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

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

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

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


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

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


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

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

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


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

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

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

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

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


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

Часовой пояс: UTC + 3 часа


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

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


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

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


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