Opened 5 лет ago

Closed 5 лет ago

Last modified 5 лет ago

#182 closed баг (fixed)

Ложная запись об изменении настройки "Минимальная частота двигателя 2" в лог

Сообщил: san Владелец: alx
Приоритет: средний Этап разработки: 2-я очередь
Ключевые слова: Копия:

Описание

При анализе #181 в логе обнаружили странную запись:
May 27 14:22:56 smarthdcd[891]: config.cpp:174: Настройка Минимальная частота двигателя 2' изменена: 15.00 --> 8.00
После эксперимента в конфиге по прежнему Частота двигателя 2 = 15 Гц.

Предполагается, что запись в лог происходит ошибочно.

Вложения (3)

Конфиг ДО (4.0 KB ) - added by andrei 5 лет ago.
Лог эксперимента (27.7 KB ) - added by andrei 5 лет ago.
Конфиг ПОСЛЕ (4.0 KB ) - added by andrei 5 лет ago.

Download all attachments as: .zip

История изменений (10)

by andrei, 5 лет ago

Вложение: Конфиг ДО added

by andrei, 5 лет ago

Вложение: Лог эксперимента added

by andrei, 5 лет ago

Вложение: Конфиг ПОСЛЕ added

comment:1 by andrei, 5 лет ago

Конфиги и лог c версией smartHDC 717

comment:2 by san, 5 лет ago

Файлы Андрея из другого эксперимента, воспроизводящего баг.

comment:3 by alx, 5 лет ago

Думаю, что я нашел причину.

Дело в том, что любая настройка - это такой объект, который кроме своего значения (в даном случае минимальной частоты) хранит также вспомогательные метаданные - имя настройки, значение по умолчанию, минимум/максимум и т.п. А еще у нас есть параметры производительности, которые для единообразия реализованы как те же настройки.

В коде контроллера есть много мест, где параметр производительности устанавливается в значение минимума или максимума диапазона. Для этого в коде просто выполняется присваивание. Но, так как это объекты одного типа, компилятор копирует не только значение параметра, но и все метаданные тоже, включая имя настройки! Поэтому когда затем значение выбранной частоты меняется, вместо 'freqDirve2' мы видим в логе имя параметра, который ранее был присвоен выбранной частоте.

comment:4 by alx, 5 лет ago

Решение: fixed
Состояние: newclosed

In 719/smartHDC:

Неизменяемые метаданные настроек (имя настройки, дефолтное значение, минимум/максимум)
объявлены const. Настройкам добавлен оператор присваивания, копирующий только значение
настройки, но не метаданные. Closes #182.

comment:5 by alx, 5 лет ago

Предлагаю проверить r719 для уверенности, что баг пропал.

comment:6 by andrei, 5 лет ago

Обязательно!

comment:7 by andrei, 5 лет ago

Проверили, изменение минимальной частоты в логе перестало присутствовать.

Note: See TracTickets for help on using tickets.