Перейти к содержанию
    

Что делать если большой проект перестает работать при оптимизации?

Любая оптимизация (О1-О3) делает проект глючным. Есть какой - нибудь подход чтобы выявить эти глюки? Может кто посоветует как применять Volatile?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Локализовать проблему:

1) путём временного исключения части исходников и соответствующих функций проекта;

2) откатом на старые версии, поиск работающей версии и анализ отличий;

3) проанализировать используемыми средствами отладки (как если бы проблема проявилась без оптимизации).

 

В будущем проводить больше тестов после каждой значимой правки, на разных уровнях оптимизации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Самое простое и очевидное - заново перестраивать проект с нуля, использую части проекта как есть.

Таким образом можно локализовать глючные участи и уже отдельно работать с ними.

Причины такого поведения приложения - отсутствие культуры написания кода и/или применение бесплатных библиотек с сомнительным содержимым и навязанным принципом построения кода (например, куб) ;)

 

Я в своих проектах всегда использую как минимум две сборки: DEBUG и RELEASE. Взял за правило хотя бы раз в рабочий день делать RELEASE сборку и проверять ее (хотя бы что она запускается в камне).

Система контроля версий - это обязательное условие, так хотя бы можно найти "концы" ))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/20/2022 at 6:24 PM, Димон Безпарольный said:

Есть какой - нибудь подход чтобы выявить эти глюки?

Сравнение необходимой и реальной работы устройства

 

On 7/20/2022 at 6:24 PM, Димон Безпарольный said:

Может кто посоветует как применять Volatile

Описание стандарта С

 

On 7/20/2022 at 6:24 PM, Димон Безпарольный said:

Любая оптимизация (О1-О3) делает проект глючным.

От этого помогает только увеличение знаний в мозге.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/20/2022 at 6:24 PM, Димон Безпарольный said:

Любая оптимизация (О1-О3) делает проект глючным

А вот и нет. Если оптимизация "делает проект глючным", то разработчика нужно увольнять!

P.S. Отлаживать советую в DEBUG-сборках с активированными -Wall -Werror -Wextra и прочими, чтобы не было соблазна оставить косяк в рабочем проекте. Ну и -O3 или -O2 сразу же и писать в Makefile.

Изменено пользователем Eddy_Em

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/20/2022 at 8:29 PM, x893 said:

От этого помогает только увеличение знаний в мозге.

Не знал что здесь все тоже самое что и на политических форумах. Интересно, зачем человек тратил самое драгоценное что у него есть и писало ЭТО.

Пока локализовал глюк до двух файлов проекта используя индивидуальные настройки оптимизации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/20/2022 at 9:34 PM, Димон Безпарольный said:

Пока локализовал глюк до двух файлов проекта используя индивидуальные настройки оптимизации.

Как показываем моя личная практика - это "пока" так и останется навечно.

Или ровно до момента, пока степень глюкавости приложения не достигнет абсолюта, а времени на переписывание уже конечно же нет. Весьма типичная ситуация ))

Тут как "повезет" )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/20/2022 at 10:34 PM, Forger said:

Как показываем моя личная практика - это "пока" так и останется навечно.

Видимо мало практики. Локализовал до файла, потом до функции.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/20/2022 at 11:07 PM, Димон Безпарольный said:

Локализовал до файла, потом до функции.

Это все равно что лечить кашель (неважно от чего), избегая устранять на корню реальные проблемы, которые его вызывают, они всегда закопаны намного глубже внутри.

Постоянное пожирание таких "таблеток" приведет к неподъемному и глючному коду. Вот о чем говорит моя практика.

Впрочем, если проект крохотный, без перспектив развития и стоит острый вопрос сроков, то можно и "пожрать таблеток" ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/20/2022 at 11:23 PM, Forger said:

Это все равно

Разумеется, ничего не делать и критиковать проще всего. Я смотрю форум изрядно выродился раз тут такие "свои". Сюда приходят за советом, а получают высокомерный глум. Зачем? Тебя что все так сильно обижают что ты над другими глумишься?

 

Описывать как я локализовал не буду - я смотрю тут критиканов полно. Для меня главное результат и он достигнут.

On 7/20/2022 at 11:23 PM, Forger said:

избегая устранять на корню реальные проблемы

Эти проблемы сначала надо выявить чтобы понять как не надо делать. Чем я и занялся. А ты видимо сразу умным родился или не понимаешь как приобретаются навыки? Да можешь не отвечать, все одно от тебя толку нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/20/2022 at 11:51 PM, Димон Безпарольный said:

ты видимо сразу умным родился

Следите за своим языком!

Тут вам никто не ТЫкал, на ваши невнятные вопросы дали вполне конкретные ответы/советы. Настолько, насколько можно понять их туманную суть.

Коли не нравятся такие ответы - ступайте ныть и жаловаться в другое место/тему. Например, в раздел для новичков, там охотнее разжуют и даже похвалят что сам справился с такой по сути ерундой.

Кстати, эта тема вообще посвящена Keil и не имеет никакого отношения к вашей типа "проблеме"!

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/21/2022 at 12:02 AM, Forger said:

Следите

Жаль таких забанить в теме не могу. Толку никакого только срач один.

Проблему локализовал до одной функции. 

 

Quote

uint8_t SST26_ReadStatusRegistr(void)                            //Функция читает байт статуса 26V016
{                                                                //Для запуска в Quad режиме применить функцию SST26_Enable_Quad();
    QUAD_SPI_Enable;                                            //
    QUAD_SPI_WaitBusy();                                        //Полим флаг Busy регистра QUADSPI->SR
    QUADSPI->DLR = 0;                                            //Читаем 1 байт
//По 1 проводу:
//                   inst IMODE[1:0] ADMODE[1:0] ADSIZE[1:0] ABMODE[1:0] ABSIZE[1:0] DCYC[4:0] DMODE[1:0] FMODE[1:0] SIOO 
    QUADSPI->CCR = 0x05| 1<<8    |  0<<10    |   0<<12   |   0<<14   |   0<<16   |  0<<18  |  1<<24   |  1<<26   | 0<<28;
//По 4 проводам
//    QUADSPI->CCR =        3<<8    |  0<<10    |   0<<12   |   3<<14   |   0<<16   |  0<<18  |  3<<24   |  1<<26   | 0<<28;
    uint8_t Data = DR_Read;                                        //
    QUAD_SPI_Disable;                                            //
    return Data;                                                //
}                                                                //
 

Как тут намекают местные "знатоки" эта функция написана криво. Именно ее нельзя оптимизировать. Пока все что могу сказать. Нашел разбивая сишный файл на 2. Один с оптимизацией O3, другой О0. Перекидывая функции нашел.

On 7/21/2022 at 12:02 AM, Forger said:

ступайте

Не говори куда мне идти и я не скажу тебе что тебе делать.

Изменено пользователем Димон Безпарольный

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 21.07.2022 в 07:42, Димон Безпарольный сказал:

QUAD_SPI_WaitBusy();  

Надо смотреть, как написана эта функция. Бесконечные (без таймаутов) ожидания портятся вочдогом. Возможно, могут испортиться прерываниями. В фирменном HALe или в кубе могут обрабатывать таймер, обычному пользователю ненужный...

Ну, а тайминги - это как раз то, на что влияет оптимизация.

И непонятно, зачем всего лишь для чтения статуса интерфейс разрешается, а потом сразу запрещается. Почему сразу после разрешения он может быть чем-то занят? Тут надо читать описание интерфейса. В моем понимании SPI надо держать более-менее постоянно включенным.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/21/2022 at 12:42 AM, Димон Безпарольный said:

Пока все что могу сказать.

А что помешало разместить эту функцию и подробности в шапке темы:mda:

 

On 7/21/2022 at 12:42 AM, Димон Безпарольный said:

Жаль таких забанить в теме не могу.

Это ж каким нужно быть .... , чтобы по хамски ТЫкать и еще при этом угрожать баном? :shok:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. Первый этап проверки, как выше заметил Forgerэто тест на работоспособность Debug/Release и наоборот. Это "грубое" тестирование, потенциально дает возможность выловить некоторые свои косяки с выявлением "накладок" в памяти. В основном, конечно - это свои про-бы с распределением и использованием RAM.

2. Тесты с оптимизациями по размеру/скорости - IMHO - для тех случаев, когда вместо жестко-логичных алгоритмов или использования таймеров применяются задержки, реализованные кодом и "просчитанные по тактам участки кода" (тоска по ассемблеру и первым контроллерам). 

Всегда использовал (1). Разово - (2) 

ps если проект большой (да и любой другой), то вариант "вылавливать" ошибку по-модульно разбивая его на меньшие проекты - не верен. 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...