artemkad 89 21 июля, 2022 Опубликовано 21 июля, 2022 · Жалоба В 20.07.2022 в 18:24, Димон Безпарольный сказал: Любая оптимизация (О1-О3) делает проект глючным. Есть какой - нибудь подход чтобы выявить эти глюки? Обычно это означает проблему в стиле написания кода - один или несколько используемых приемов имеют потенциальные угрозы глючности. Теоретически может помочь статический анализатор кода по MISRA C который обругает потенциально проблемные места которые к подобному(и не только) могут приводить. ЗЫ. К примеру, макросы без скобок - просто упрашивают получать в некоторых местах трудноуловимую хрень. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 22 июля, 2022 Опубликовано 22 июля, 2022 · Жалоба On 7/21/2022 at 7:55 PM, aaarrr said: Отличное "решение", да. Ну это был юморной стёб ))) Но факт : после перехода на GCC, я перестал получать эту проблему как в новых , так и в старых проектах. Что-же там кейловцы всё-таки сделали? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 185 22 июля, 2022 Опубликовано 22 июля, 2022 · Жалоба 1 час назад, repstosw сказал: Но факт: после перехода на GCC, я перестал получать эту проблему как в новых , так и в старых проектах... Какую "проблему"? Я много лет пользуюсь кейлом, прошивки тестирую под разными оптимизациями, проблем компилятора в этом плане не замечал никогда. Проблемы всегда были в коде. Не надо наводить смуту на кейл, у него очень хороший компилятор. Естественно, баги есть, но где их нет? Кроме того, компилятор постоянно обновляется, баги фиксят, все развивается в нормальном направлении. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AleksBak 0 22 июля, 2022 Опубликовано 22 июля, 2022 · Жалоба 14 часов назад, artemkad сказал: Обычно это означает проблему в стиле написания кода - один или несколько используемых приемов имеют потенциальные угрозы глючности. Стиль тут по-моему не причем. Тут конкретный случай - ожидание сброса флага 'Busy' у модуля QUAD_SPI. Чтобы убедиться в неправильной работе тут - достаточно ТС вместо функции QUAD_SPI_WaitBusy(); поставить небольшую задержку. И если при разных оптимизациях будет работать, то дело тут именно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_dark_ 0 22 июля, 2022 Опубликовано 22 июля, 2022 (изменено) · Жалоба On 7/21/2022 at 4:28 PM, Димон Безпарольный said: До этого еще не дошел. Вечером посмотрю ассемблерный код. Ассемблер тут ни причем, в отладчике посмотрите: 1. какие строки (С, С++) игнорируются (на них нельзя поставить брекпойты), в кейле "рабочие" строки выделены слева цветом часть кода кейл выкидывает, т.к. использует тоже самое из др. частей (оптимизирует)) ) 2. протрассировать подозрительные места, где как подозреваете может быть проблемма, мне как правило это помогает 3. худший вариант, когда код "срывается" в х.з. куда, но по своему опыту скажу, что сам виноват был (грязно писал код в этих местах и путал линковщик) но и тут будете знать в каком месте происходит срыв, и можно проанализировать и переписать этот кусок кода... Изменено 22 июля, 2022 пользователем _dark_ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 22 июля, 2022 Опубликовано 22 июля, 2022 (изменено) · Жалоба On 7/22/2022 at 3:40 PM, Arlleex said: Какую "проблему"? Программа вешалась ещё до входа в main( ). Если поменять местами строчки кода внутри main( ) или сделать для main #pragma optimize -O0 - переставала вешаться. Может HAL, может SPL или кало-куб такой эффект давали - Х.З. Но факт: как только я слез с этого всего и перешёл на GCC, проблемы ушли. Изменено 22 июля, 2022 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 185 22 июля, 2022 Опубликовано 22 июля, 2022 · Жалоба 1 час назад, repstosw сказал: Но факт: как только я слез с этого всего и перешёл на GCC, проблемы ушли. Ваши логические взаимосвязи больше похожи на проявление когнитивного "эффекта техасского стрелка". Потому что Вы нашли якобы логически обоснованную взаимосвязь там, где ее на самом деле нет. И вот это Цитата Может HAL, может SPL или кало-куб такой эффект давали - Х.З. лишь доказывает мою точку зрения. Вы просто, видимо, не разобрались тогда до конца. Я, разумеется, не вкладываю в свои слова какой-то оскорбительный потенциал Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 22 июля, 2022 Опубликовано 22 июля, 2022 · Жалоба 2 часа назад, repstosw сказал: . . . Программа вешалась ещё до входа в main( ).. . . Намек на "невиноватая я !!!". Если не CPP, то да. Если CPP, то конструкторы отрабатывают до main (и свои, и "чужие") Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 185 22 июля, 2022 Опубликовано 22 июля, 2022 · Жалоба 54 минуты назад, k155la3 сказал: Если не CPP, то да. Если CPP, то конструкторы отрабатывают до main (и свои, и "чужие") Ну, компилятор кейла позволяет вызывать пользовательские функции до main() автоматически даже из исходника на Си #define FUNC_CALL_PRIORITY 101 __attribute__((constructor(FUNC_CALL_PRIORITY))) void func(void) { ... } Не знаю, есть ли такое в GCC, но думаю, что есть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 63 22 июля, 2022 Опубликовано 22 июля, 2022 · Жалоба On 7/22/2022 at 2:15 PM, Arlleex said: Не знаю, есть ли такое в GCC, но думаю, что есть. В GCC пишешь свой файл startup и из него вызываешь что хочешь хоть до main, хоть после. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 185 22 июля, 2022 Опубликовано 22 июля, 2022 · Жалоба 44 минуты назад, dimka76 сказал: В GCC пишешь свой файл startup и из него вызываешь что хочешь хоть до main, хоть после. Можно подумать это прям "фишка" GCC. Да везде так можно, а как я предложил - нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 22 июля, 2022 Опубликовано 22 июля, 2022 · Жалоба 45 минут назад, Arlleex сказал: а как я предложил - нет Ну, так gcc тоже умеет. Но зачем, если есть Си с плюсами (вопрос риторический)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 63 22 июля, 2022 Опубликовано 22 июля, 2022 · Жалоба On 7/22/2022 at 4:24 PM, Сергей Борщ said: Но зачем Это когда сильно хочется что-то вызвать до main, а цеплять к проекту внешний startup файл сильно не хочется ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 185 22 июля, 2022 Опубликовано 22 июля, 2022 · Жалоба 1 час назад, dimka76 сказал: Это когда сильно хочется что-то вызвать до main, а цеплять к проекту внешний startup файл сильно не хочется ) Сергей имел ввиду тот факт, что в плюсах конструкторы глобальных объектов вызываются до main() без вообще каких-либо дополнительных телодвижений. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 60 22 июля, 2022 Опубликовано 22 июля, 2022 · Жалоба On 7/22/2022 at 6:30 PM, Arlleex said: Сергей имел ввиду тот факт, что в плюсах конструкторы глобальных объектов вызываются до main() без вообще каких-либо дополнительных телодвижений. Конечно, Все телодвижения уже записаны в startup Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться