marus-ka 0 22 августа, 2014 Опубликовано 22 августа, 2014 · Жалоба Всем привет! Пишу в Atmel Studio (6.2.1153) проект для samd20. Вообще это мой первый опыт работы с 32 разрядными Мк, до этого были только 8-разрядные и не в atmel studio. Использую ASF (3.19) код писался постепенно (точнее переписывался с кода для xmega под iar). На последнем этапе на определенной строчке при отладке перескакивает на начало main. По непонятным причинам. Если строку закоментировать, перескакивает на предыдущей. Если запускать без отладки, то просто код перестает выполнятся после определенного момента. Ума не приложу, как с этим разбираться? Это глюк студии или моего кода? Как понять? Пробовала увеличивать размер стека, размер rstack - все равно вылетает. Игралась со степенью оптимизации - тоже не помогает. Куда копать, подскажите. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 123 22 августа, 2014 Опубликовано 22 августа, 2014 · Жалоба Проблемы со стеком, невыровненным доступом и т.п. приводили бы к попаданию в обработчик исключения HardFault. У вас же, полагаю, происходит переход на ResetHandler. Наиболее вероятной причиной мне кажется срабатывание собаки (Watchdog). Почитайте ее описание для вашего процессора - возможно она включена по умолчанию и ее надо принудительно выключить или перенастроить на нужное вашей программе время. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
marus-ka 0 22 августа, 2014 Опубликовано 22 августа, 2014 (изменено) · Жалоба Проблемы со стеком, невыровненным доступом и т.п. приводили бы к попаданию в обработчик исключения HardFault. У вас же, полагаю, происходит переход на ResetHandler. Наиболее вероятной причиной мне кажется срабатывание собаки (Watchdog). Почитайте ее описание для вашего процессора - возможно она включена по умолчанию и ее надо принудительно выключить или перенастроить на нужное вашей программе время. Да, спасибо за совет. Сама думала проверить эту гипотезу, но забыла. Судя по описанию, фьюзам и значениям регистров в debug режиме watchdog выключен. Еще дополнение. Оказывается, курсор прыгает на начало main в отладке, а следующим шагом на строку, следующую за той, после которой перепрыгнул на начало main. И вот в этой второй строке он вообще уходит непонятно куда. Просто дебаггер висит и все. Если нажать break в этот момент, все равно весит. Поставила точку останова в reset_handler, код там останавливается только в самом начале. Изменено 22 августа, 2014 пользователем Мария Е Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 123 22 августа, 2014 Опубликовано 22 августа, 2014 · Жалоба в debug режиме watchdog выключен.А вот это может означать, что он остановливается только когда ядро остановлено отладчиком и продолжает тикать, как только ядро начинает исполнять команды. Но раз вы попадаете в ResetHandler только один раз при запуске - версия с собакой отпадает. курсор прыгает на начало main в отладке, а следующим шагом на строку,Откройте окно дизассемблера и посмотрите, по каким ассемблерным командам ходит ваша программа. Не всем ассемблерным командам можно найти соответствующие места в исходнике на языке высокого уровня. Бывает, что одна команда ассемблера соответствует сразу нескольким строчкам в разных местах исходника (например, если в функции есть несколько выражений return 0 - компилятор может их реализовать его одном месте, а из остальных сделать перход на этот код, или вынести некий общий код в подпрограмму). В общем, вам дорога прямиком в дизассемблер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
marus-ka 0 29 августа, 2014 Опубликовано 29 августа, 2014 · Жалоба Спасибо за комментарий. Только сегодня увидела, так как забыла что несмотря на соответствующую галку оповещения об ответах не приходят на почту. Дизассемблер действительно помог. Выяснила, что все же уходит в hard fault из-за попытки записи за границы sram, что было вызвано неправильной установкой значения переменной, которая задавала номер элемента массива для записи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться