-
- Я конечно не программист, но когда после включения высокого уровня
оптимизации программа перестает работать, то часто бывают проблемы
с volatile и const переменными. Может они не определены
соответствующим образом, может обращения к ним некорректные, но
компилятор при оптимизации просто отбрасывает части кода, где идет
работа с ними, не понимая, что это делать непозволительно. Задача
программиста - объяснить сии нюансы компилятору. - reZident(05.08.2024 12:42)
- Тут я, мне кажется, уже собаку съел. Все переменные, которе меняются в других контекстах, объявлены должным образом. У меня вся отладка происходит на макс. оптимизации. И все испытания пройдены со сборкой в режиме "Debug" на "отлично", хотя используются несколько уровней приоритетов прерываний. Проект весьма стабилен. Любые вмешательства в код приводят к стабильному, предсказуемому результату. Никаких глюков. Просто не запускается сборка Release. Вот такой startup.c (так как Nikolay_Po(3267 знак., 05.08.2024 12:57)
- Ещё более весёлые приключения начинаются, когда в игру вступает
"undefined behavior". Но это реже бывает. - SciFi(05.08.2024 12:44)
- не совсем понимаю... у нас тут бывает дебаг и недебаг сборка ELF файла, а вот бинарь который шьется один и тотже - независимо. и отлаживается то на хосте, с таггете исключительно читаются и пишется по адрресам и регистрам. тоесть бинарные данные в МК идентичны. а вот условия работы действительно разные. например - если запускается без отладчика - все летит с тактовой частотой. если запускает отладчик он тормозит процесс и стопит например на main. и если есть чтото klen(121 знак., 05.08.2024 14:05)
- Приведения типов везде сделаны явно. Даже константы в определениях указаны как 1u или 1.0f, чтобы не спутать знаковые/беззнаковые, целые/плавающие. Все предупреждения включены. Проект собирается чисто. И, главное, уже год в ходе разработки, не проявляет никакх глюков на макс. оптимизации. Выявлялись и устранялись лишь алгоритмические просчёты программиста. - Nikolay_Po(05.08.2024 13:02)
- В коде бывают баги, которые появляются только при включенной
оптимизации. Да, их ловить сложнее. - SciFi(05.08.2024 12:42)
- Выше я отметил, что вся отладка, все испытания выполнялись и
пройдены с полностью включённой оптимизацией. В релизе я хочу лишь
выкинуть код ассертов, трассировки и информацию, относящуюся к
отладке, убрав соответствующие символы из параметров компиляции и
сборки. - Nikolay_Po(05.08.2024 12:59)
- Тем не менее, факт на лице. Можно продолжить отладку релизной
конфигурации. Тем более, если спотыкается сразу, должно быть не так
уж сложно. Самое хреновое - если спотыкается только в полнолуние. - SciFi(05.08.2024 13:04)
- Не, 100% не работает. Ещё, смущает, что если заливать не hex, а
elf, выходит такое, для обоих сборок, Debug и Release: Nikolay_Po(1429 знак., 05.08.2024 13:32)
- когда шьешь - проливабтся бинарные данные из elf, они идентичны для
Debug и Release. Debug и Release - понятия существующие только на
хосте в ELF, микроконтроллер об этом ничего не знает :) - klen(05.08.2024 14:08)
- Нет, не совсем так в моём случае. Кроме ключей компиляции, по удалению символа DEBUG, выключается трассировка. Eё вызовы замещаются на пустые функции. Exception handlers удаляются. И прошивка в бинарном виде начинает отличаться между конфигурациями сборки. Проблема в том, что у меня светодиод должен моргнуть сразу, до обращения к трассировке. - Nikolay_Po(05.08.2024 14:17)
- Если шьёте НЕХ, то внимательно подойдите ко включению в него КОНСТ.
Можно легко про них забыть, а программа о них помнит. mse homjak(43 знак., 05.08.2024 13:37)
- Спасибо. Попытка записать прошивку в ОЗУ пропала после ограничения пересчня включаемых в HEX секций. - Nikolay_Po(05.08.2024 14:22)
- У меня сечас так: -O ihex. Без других ключей. Значит, все секции
включает. Nikolay_Po(635 знак., 05.08.2024 13:43)
- Попробовал -j .text -j.data (в Эклипсе были готовые галочки для них). И при прошивке OpenOCD с проверкой и командой reset в конце: Nikolay_Po(855 знак., 05.08.2024 13:50)
- когда шьешь - проливабтся бинарные данные из elf, они идентичны для
Debug и Release. Debug и Release - понятия существующие только на
хосте в ELF, микроконтроллер об этом ничего не знает :) - klen(05.08.2024 14:08)
- Не, 100% не работает. Ещё, смущает, что если заливать не hex, а
elf, выходит такое, для обоих сборок, Debug и Release: Nikolay_Po(1429 знак., 05.08.2024 13:32)
- Тем не менее, факт на лице. Можно продолжить отладку релизной
конфигурации. Тем более, если спотыкается сразу, должно быть не так
уж сложно. Самое хреновое - если спотыкается только в полнолуние. - SciFi(05.08.2024 13:04)
- Выше я отметил, что вся отладка, все испытания выполнялись и
пройдены с полностью включённой оптимизацией. В релизе я хочу лишь
выкинуть код ассертов, трассировки и информацию, относящуюся к
отладке, убрав соответствующие символы из параметров компиляции и
сборки. - Nikolay_Po(05.08.2024 12:59)
- Я конечно не программист, но когда после включения высокого уровня
оптимизации программа перестает работать, то часто бывают проблемы
с volatile и const переменными. Может они не определены
соответствующим образом, может обращения к ним некорректные, но
компилятор при оптимизации просто отбрасывает части кода, где идет
работа с ними, не понимая, что это делать непозволительно. Задача
программиста - объяснить сии нюансы компилятору. - reZident(05.08.2024 12:42)