Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Остановка по условию
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Igor26
Уважаемые коллеги! Подскажите пожалуйста, как при отладке программы под эмулятором/симулятором, заставить останавливатся этот процесс при достижении какого-то условия.
Например, счетчик досчитал до 32768, после этого отладка остановилась, а далее пошли отлаживать программу по шагам. Не хочется в программу вставлять всевозможные If() и устанавливать на нее BreakPoint. Среда - IAR411A
starter48
Цитата(Igor26 @ Dec 2 2005, 13:35) *
Уважаемые коллеги! Подскажите пожалуйста, как при отладке программы под эмулятором/симулятором, заставить останавливатся этот процесс при достижении какого-то условия.
Например, счетчик досчитал до 32768, после этого отладка остановилась, а далее пошли отлаживать программу по шагам. Не хочется в программу вставлять всевозможные If() и устанавливать на нее BreakPoint. Среда - IAR411A

Не знаю как это делают нормальные люди smile.gif
но я делал так:
Код
if (count==32768) {
__no_operation();//nop - безопасное действие
}

Вот на nop ставил breakpoint.
Т.е. ставить "всевозможные" if - одинственное решение, которое я нашёл...
Чтобы релиз не замусоривать, можно такие if завернуть в #ifdef - #endif, чтобы в релизе отключалось автоматом.
Igor26
Цитата(starter48 @ Dec 2 2005, 10:43) *
Цитата(Igor26 @ Dec 2 2005, 13:35) *

Уважаемые коллеги! Подскажите пожалуйста, как при отладке программы под эмулятором/симулятором, заставить останавливатся этот процесс при достижении какого-то условия.
Например, счетчик досчитал до 32768, после этого отладка остановилась, а далее пошли отлаживать программу по шагам. Не хочется в программу вставлять всевозможные If() и устанавливать на нее BreakPoint. Среда - IAR411A

Не знаю как это делают нормальные люди smile.gif
но я делал так:
Код
if (count==32768) {
__no_operation();//nop - безопасное действие
}

Вот на nop ставил breakpoint.
Т.е. ставить "всевозможные" if - одинственное решение, которое я нашёл...
Чтобы релиз не замусоривать, можно такие if завернуть в #ifdef - #endif, чтобы в релизе отключалось автоматом.

Да, именно так я сейчас и делаю, но не всегда это приемлемо. Проверка условия - это лишнее время.
Old1
Цитата(Igor26 @ Dec 2 2005, 10:35) *
Уважаемые коллеги! Подскажите пожалуйста, как при отладке программы под эмулятором/симулятором, заставить останавливатся этот процесс при достижении какого-то условия.
Например, счетчик досчитал до 32768, после этого отладка остановилась, а далее пошли отлаживать программу по шагам. Не хочется в программу вставлять всевозможные If() и устанавливать на нее BreakPoint. Среда - IAR411A

Используйте системные макросы отладчика (С-SPY): __setCodeBreak, __setDataBreak ,__setSimBreak
(см. IAR Embedded Workbench IDE online help/C-SPY macros)... Для их использования необходимо создать командный файл и запускать его одновременно с запуском C-SPY (пример такого файла есть в папке tutor, файл с расширением *.mac)
Igor26
Цитата(Old1 @ Dec 2 2005, 11:08) *
Цитата(Igor26 @ Dec 2 2005, 10:35) *

Уважаемые коллеги! Подскажите пожалуйста, как при отладке программы под эмулятором/симулятором, заставить останавливатся этот процесс при достижении какого-то условия.
Например, счетчик досчитал до 32768, после этого отладка остановилась, а далее пошли отлаживать программу по шагам. Не хочется в программу вставлять всевозможные If() и устанавливать на нее BreakPoint. Среда - IAR411A

Используйте системные макросы отладчика (С-SPY): __setCodeBreak, __setDataBreak ,__setSimBreak
(см. IAR Embedded Workbench IDE online help/C-SPY macros)... Для их использования необходимо создать командный файл и запускать его одновременно с запуском C-SPY (пример такого файла есть в папке tutor, файл с расширением *.mac)

Большое спасибо! Попробую.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.