JohnKorsh 1 21 мая, 2018 Опубликовано 21 мая, 2018 · Жалоба Добрый вечер! Есть ли в AtmelStudio директива, позволяющая запретить оптимизацию отдельных участков кода, а не всего проекта? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ataradov 0 21 мая, 2018 Опубликовано 21 мая, 2018 · Жалоба AS использует GCC, нужно на него доки читать. https://gcc.gnu.org/onlinedocs/gcc/Function...on-Pragmas.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 22 мая, 2018 Опубликовано 22 мая, 2018 · Жалоба Добрый вечер! Есть ли в AtmelStudio директива, позволяющая запретить оптимизацию отдельных участков кода, а не всего проекта?вынесите код "без-оптимизации" в отдельный модуль (в виде функций), и в этом модуле запретите оптимизацию. (#pragma) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Smoky 0 22 февраля, 2021 Опубликовано 22 февраля, 2021 · Жалоба Добрый день. В Microchip Studio (Atmel Studio) отлаживал программу, как рекомендуют, при нулевой оптимизации, и всё работало как мне нужно. При компиляции окончательного варианта включил оптимизацию и программа стала зависать. Как выяснить причину, если режим отладки уже не возможен? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 22 февраля, 2021 Опубликовано 22 февраля, 2021 · Жалоба Лог присходящено в компорт? Проверить совместное использование переменных, модифицируемых в прерывании и вне его? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Smoky 0 22 февраля, 2021 Опубликовано 22 февраля, 2021 · Жалоба 48 минут назад, GenaSPB сказал: Лог присходящено в компорт? Проверить совместное использование переменных, модифицируемых в прерывании и вне его? Лог использовать не знаю как... А вот с прерываниями имеются сомнения, три различных модуля осуществляют запуск функции с прерыванием, которая находится в другом модуле. Может быть эту функцию нужно размещать в каждом модуле, в котором она используется? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 22 февраля, 2021 Опубликовано 22 февраля, 2021 · Жалоба Лог = это вывести в компорт текстовую строку с номером строки например Проверить совместное использование переменных, модифицируемых в прерывании - при чем здесь то что вы предложили? Исходник проекта бы показали... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Smoky 0 22 февраля, 2021 Опубликовано 22 февраля, 2021 · Жалоба 1 час назад, GenaSPB сказал: Исходник проекта бы показали... Исходник слишком велик (два с лишним Мб), к тому же я не профессионал в программировании и показывать свою "самоделку" не очень удобно... Поэтому спасибо, извиняюсь за беспокойство. Попробую разобраться самостоятельно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 141 22 февраля, 2021 Опубликовано 22 февраля, 2021 · Жалоба 2 часа назад, Smoky сказал: Как выяснить причину, если режим отладки уже не возможен? Почему он вдруг стал невозможен? Отладка с оптимизацией не связаны никак. При включенной оптимизации отладчик может не попадать в строки исходника, но ничто не мешает отлаживаться в окне дизассемблированного кода - заодно поймете, во что компилится та или иная ваша конструкция. А отлаживаться без оптимизации я считаю бесполезным занятием Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 22 февраля, 2021 Опубликовано 22 февраля, 2021 · Жалоба 3 часа назад, Smoky сказал: Как выяснить причину, если режим отладки уже не возможен? Начинать отладку с самого начала. Ибо "отлаживал только при нулевой оптимизации" это значит - "вообще не отлаживал". 15 минут назад, Сергей Борщ сказал: но ничто не мешает отлаживаться в окне дизассемблированного кода - заодно поймете, во что компилится та или иная ваша конструкция. Кроме того, если трудно найти привязку каких-то си-строк с оптимизированным ассемблерным кодом, можно в интересующие места вставлять тестовые инструкции. Например - чтение volatile переменной. Или какую-нить volatile intrinsic-функцию в одну асм-команду. На эту строчку ставить бряк и танцевать уже от него. 15 минут назад, Сергей Борщ сказал: А отлаживаться без оптимизации я считаю бесполезным занятием Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 22 февраля, 2021 Опубликовано 22 февраля, 2021 · Жалоба 3 часа назад, Smoky сказал: При компиляции окончательного варианта включил оптимизацию и программа стала зависать. Как выяснить причину, если режим отладки уже не возможен? А какой контроллер вы используете и какой отладчик? Потому что это на старых Микрочиповских ПИКах была проблема с отладкой, т.к. модуль отладки в ПИКах был полу-аппаратным, полу-программным. Нужно было устанавливать конфиг.бит и при этом отладчик грузил свой код во флеш и занимал уровень прерывания и щепотку ОЗУ. Но даже это никак не было связано с уровнем оптимизации. А на Атмеловских АТмегах уже начиная с меги16 был полноценный JTAG. Бери копеечный AVR Dragon и отлаживайся сколько хочешь в любом режиме. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Smoky 0 22 февраля, 2021 Опубликовано 22 февраля, 2021 · Жалоба 32 минуты назад, Сергей Борщ сказал: Почему он вдруг стал невозможен? Отладка с оптимизацией не связаны никак. При включенной оптимизации отладчик может не попадать в строки исходника, но ничто не мешает отлаживаться в окне дизассемблированного кода - заодно поймете, во что компилится та или иная ваша конструкция. А отлаживаться без оптимизации я считаю бесполезным занятием Читал в какой то умной книге что отладку нужно производить только только при нулевой оптимизации. С ассемблером не "дружу", потому окно дизассемблера для меня "тёмный лес". Однако спасибо всем за совет, что можно отлаживать и оптимизированный код. 29 минут назад, jcxz сказал: Начинать отладку с самого начала. Ибо "отлаживал только при нулевой оптимизации" это значит - "вообще не отлаживал". Кроме того, если трудно найти привязку каких-то си-строк с оптимизированным ассемблерным кодом, можно в интересующие места вставлять тестовые инструкции. Например - чтение volatile переменной. Или какую-нить volatile intrinsic-функцию в одну асм-команду. На эту строчку ставить бряк и танцевать уже от него. Спасибо, буду смотреть. 19 минут назад, Baser сказал: Бери копеечный AVR Dragon и отлаживайся сколько хочешь в любом режиме. Я его и использую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 22 февраля, 2021 Опубликовано 22 февраля, 2021 · Жалоба 7 минут назад, Smoky сказал: Читал в какой то умной книге что отладку нужно производить только только при нулевой оптимизации. Значит это была глупая книга. Или вы неправильно её поняли. Отлаживать нужно при разных оптимизациях. Чем больше встряхивать программу (разными ключами), тем больше оттуда выпадает блох багов. А у вас они все остались... скрытые. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 22 февраля, 2021 Опубликовано 22 февраля, 2021 · Жалоба 17 минут назад, Smoky сказал: Читал в какой то умной книге что отладку нужно производить только только при нулевой оптимизации. Обычно отлаживаются на том уровне оптимизации, на которой будет "боевая" прошивка. Уровень снижают при выявлении "сильно непонятных" багов. Так проще шагать по высокоуровневому коду. Но если при этом баг пропадает, значит что-то с идеологией программы сильно не так. А книга могла быть для начинающих. Для них, да, лучше оптимизацию не включать, пока опыта мало. 17 минут назад, Smoky сказал: Я его и использую. Тогда поясните, почему вы считаете, что "режим отладки уже не возможен". А то у меня только одна идея, почему: вы включили защиту от чтения/записи. Так не включайте её Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Smoky 0 22 февраля, 2021 Опубликовано 22 февраля, 2021 · Жалоба 19 минут назад, Baser сказал: Обычно отлаживаются на том уровне оптимизации, на которой будет "боевая" прошивка. Уровень снижают при выявлении "сильно непонятных" багов. Так проще шагать по высокоуровневому коду. Но если при этом баг пропадает, значит что-то с идеологией программы сильно не так. А книга могла быть для начинающих. Для них, да, лучше оптимизацию не включать, пока опыта мало. Тогда поясните, почему вы считаете, что "режим отладки уже не возможен". А то у меня только одна идея, почему: вы включили защиту от чтения/записи. Так не включайте её Книга действительно была для начинающих, где утверждали не целесообразность оптимизации при отладке, отсюда было моё утверждение "режим отладки уже не возможен". Спасибо что рассеяли мои заблуждения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться