Димон Безпарольный 2 20 июля, 2022 Опубликовано 20 июля, 2022 · Жалоба Любая оптимизация (О1-О3) делает проект глючным. Есть какой - нибудь подход чтобы выявить эти глюки? Может кто посоветует как применять Volatile? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amaora 25 20 июля, 2022 Опубликовано 20 июля, 2022 · Жалоба Локализовать проблему: 1) путём временного исключения части исходников и соответствующих функций проекта; 2) откатом на старые версии, поиск работающей версии и анализ отличий; 3) проанализировать используемыми средствами отладки (как если бы проблема проявилась без оптимизации). В будущем проводить больше тестов после каждой значимой правки, на разных уровнях оптимизации. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 20 июля, 2022 Опубликовано 20 июля, 2022 · Жалоба Самое простое и очевидное - заново перестраивать проект с нуля, использую части проекта как есть. Таким образом можно локализовать глючные участи и уже отдельно работать с ними. Причины такого поведения приложения - отсутствие культуры написания кода и/или применение бесплатных библиотек с сомнительным содержимым и навязанным принципом построения кода (например, куб) ;) Я в своих проектах всегда использую как минимум две сборки: DEBUG и RELEASE. Взял за правило хотя бы раз в рабочий день делать RELEASE сборку и проверять ее (хотя бы что она запускается в камне). Система контроля версий - это обязательное условие, так хотя бы можно найти "концы" )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 60 20 июля, 2022 Опубликовано 20 июля, 2022 · Жалоба 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) делает проект глючным. От этого помогает только увеличение знаний в мозге. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 2 20 июля, 2022 Опубликовано 20 июля, 2022 (изменено) · Жалоба On 7/20/2022 at 6:24 PM, Димон Безпарольный said: Любая оптимизация (О1-О3) делает проект глючным А вот и нет. Если оптимизация "делает проект глючным", то разработчика нужно увольнять! P.S. Отлаживать советую в DEBUG-сборках с активированными -Wall -Werror -Wextra и прочими, чтобы не было соблазна оставить косяк в рабочем проекте. Ну и -O3 или -O2 сразу же и писать в Makefile. Изменено 20 июля, 2022 пользователем Eddy_Em Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Димон Безпарольный 2 20 июля, 2022 Опубликовано 20 июля, 2022 · Жалоба On 7/20/2022 at 8:29 PM, x893 said: От этого помогает только увеличение знаний в мозге. Не знал что здесь все тоже самое что и на политических форумах. Интересно, зачем человек тратил самое драгоценное что у него есть и писало ЭТО. Пока локализовал глюк до двух файлов проекта используя индивидуальные настройки оптимизации. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 20 июля, 2022 Опубликовано 20 июля, 2022 · Жалоба On 7/20/2022 at 9:34 PM, Димон Безпарольный said: Пока локализовал глюк до двух файлов проекта используя индивидуальные настройки оптимизации. Как показываем моя личная практика - это "пока" так и останется навечно. Или ровно до момента, пока степень глюкавости приложения не достигнет абсолюта, а времени на переписывание уже конечно же нет. Весьма типичная ситуация )) Тут как "повезет" ) 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Димон Безпарольный 2 20 июля, 2022 Опубликовано 20 июля, 2022 · Жалоба On 7/20/2022 at 10:34 PM, Forger said: Как показываем моя личная практика - это "пока" так и останется навечно. Видимо мало практики. Локализовал до файла, потом до функции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 20 июля, 2022 Опубликовано 20 июля, 2022 · Жалоба On 7/20/2022 at 11:07 PM, Димон Безпарольный said: Локализовал до файла, потом до функции. Это все равно что лечить кашель (неважно от чего), избегая устранять на корню реальные проблемы, которые его вызывают, они всегда закопаны намного глубже внутри. Постоянное пожирание таких "таблеток" приведет к неподъемному и глючному коду. Вот о чем говорит моя практика. Впрочем, если проект крохотный, без перспектив развития и стоит острый вопрос сроков, то можно и "пожрать таблеток" ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Димон Безпарольный 2 20 июля, 2022 Опубликовано 20 июля, 2022 · Жалоба On 7/20/2022 at 11:23 PM, Forger said: Это все равно Разумеется, ничего не делать и критиковать проще всего. Я смотрю форум изрядно выродился раз тут такие "свои". Сюда приходят за советом, а получают высокомерный глум. Зачем? Тебя что все так сильно обижают что ты над другими глумишься? Описывать как я локализовал не буду - я смотрю тут критиканов полно. Для меня главное результат и он достигнут. On 7/20/2022 at 11:23 PM, Forger said: избегая устранять на корню реальные проблемы Эти проблемы сначала надо выявить чтобы понять как не надо делать. Чем я и занялся. А ты видимо сразу умным родился или не понимаешь как приобретаются навыки? Да можешь не отвечать, все одно от тебя толку нет. 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 20 июля, 2022 Опубликовано 20 июля, 2022 · Жалоба On 7/20/2022 at 11:51 PM, Димон Безпарольный said: ты видимо сразу умным родился Следите за своим языком! Тут вам никто не ТЫкал, на ваши невнятные вопросы дали вполне конкретные ответы/советы. Настолько, насколько можно понять их туманную суть. Коли не нравятся такие ответы - ступайте ныть и жаловаться в другое место/тему. Например, в раздел для новичков, там охотнее разжуют и даже похвалят что сам справился с такой по сути ерундой. Кстати, эта тема вообще посвящена Keil и не имеет никакого отношения к вашей типа "проблеме"! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Димон Безпарольный 2 20 июля, 2022 Опубликовано 20 июля, 2022 (изменено) · Жалоба 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: ступайте Не говори куда мне идти и я не скажу тебе что тебе делать. Изменено 20 июля, 2022 пользователем Димон Безпарольный Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V_G 11 20 июля, 2022 Опубликовано 20 июля, 2022 · Жалоба В 21.07.2022 в 07:42, Димон Безпарольный сказал: QUAD_SPI_WaitBusy(); Надо смотреть, как написана эта функция. Бесконечные (без таймаутов) ожидания портятся вочдогом. Возможно, могут испортиться прерываниями. В фирменном HALe или в кубе могут обрабатывать таймер, обычному пользователю ненужный... Ну, а тайминги - это как раз то, на что влияет оптимизация. И непонятно, зачем всего лишь для чтения статуса интерфейс разрешается, а потом сразу запрещается. Почему сразу после разрешения он может быть чем-то занят? Тут надо читать описание интерфейса. В моем понимании SPI надо держать более-менее постоянно включенным. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 20 июля, 2022 Опубликовано 20 июля, 2022 · Жалоба On 7/21/2022 at 12:42 AM, Димон Безпарольный said: Пока все что могу сказать. А что помешало разместить эту функцию и подробности в шапке темы? On 7/21/2022 at 12:42 AM, Димон Безпарольный said: Жаль таких забанить в теме не могу. Это ж каким нужно быть .... , чтобы по хамски ТЫкать и еще при этом угрожать баном? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 20 июля, 2022 Опубликовано 20 июля, 2022 · Жалоба 1. Первый этап проверки, как выше заметил Forger, это тест на работоспособность Debug/Release и наоборот. Это "грубое" тестирование, потенциально дает возможность выловить некоторые свои косяки с выявлением "накладок" в памяти. В основном, конечно - это свои про-бы с распределением и использованием RAM. 2. Тесты с оптимизациями по размеру/скорости - IMHO - для тех случаев, когда вместо жестко-логичных алгоритмов или использования таймеров применяются задержки, реализованные кодом и "просчитанные по тактам участки кода" (тоска по ассемблеру и первым контроллерам). Всегда использовал (1). Разово - (2) ps если проект большой (да и любой другой), то вариант "вылавливать" ошибку по-модульно разбивая его на меньшие проекты - не верен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться