Перейти к содержанию
    

Atmel Studio код неожиданно возвращается на main

Всем привет!

Пишу в Atmel Studio (6.2.1153) проект для samd20. Вообще это мой первый опыт работы с 32 разрядными Мк, до этого были только 8-разрядные и не в atmel studio.

Использую ASF (3.19) код писался постепенно (точнее переписывался с кода для xmega под iar). На последнем этапе на определенной строчке при отладке перескакивает на начало main. По непонятным причинам. Если строку закоментировать, перескакивает на предыдущей. Если запускать без отладки, то просто код перестает выполнятся после определенного момента.

Ума не приложу, как с этим разбираться? Это глюк студии или моего кода? Как понять? Пробовала увеличивать размер стека, размер rstack - все равно вылетает. Игралась со степенью оптимизации - тоже не помогает.

Куда копать, подскажите. :help:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблемы со стеком, невыровненным доступом и т.п. приводили бы к попаданию в обработчик исключения HardFault. У вас же, полагаю, происходит переход на ResetHandler. Наиболее вероятной причиной мне кажется срабатывание собаки (Watchdog). Почитайте ее описание для вашего процессора - возможно она включена по умолчанию и ее надо принудительно выключить или перенастроить на нужное вашей программе время.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблемы со стеком, невыровненным доступом и т.п. приводили бы к попаданию в обработчик исключения HardFault. У вас же, полагаю, происходит переход на ResetHandler. Наиболее вероятной причиной мне кажется срабатывание собаки (Watchdog). Почитайте ее описание для вашего процессора - возможно она включена по умолчанию и ее надо принудительно выключить или перенастроить на нужное вашей программе время.

 

Да, спасибо за совет. Сама думала проверить эту гипотезу, но забыла. Судя по описанию, фьюзам и значениям регистров в debug режиме watchdog выключен.

 

Еще дополнение. Оказывается, курсор прыгает на начало main в отладке, а следующим шагом на строку, следующую за той, после которой перепрыгнул на начало main. И вот в этой второй строке он вообще уходит непонятно куда. Просто дебаггер висит и все. Если нажать break в этот момент, все равно весит. Поставила точку останова в reset_handler, код там останавливается только в самом начале.

Изменено пользователем Мария Е

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в debug режиме watchdog выключен.
А вот это может означать, что он остановливается только когда ядро остановлено отладчиком и продолжает тикать, как только ядро начинает исполнять команды. Но раз вы попадаете в ResetHandler только один раз при запуске - версия с собакой отпадает.

 

курсор прыгает на начало main в отладке, а следующим шагом на строку,
Откройте окно дизассемблера и посмотрите, по каким ассемблерным командам ходит ваша программа. Не всем ассемблерным командам можно найти соответствующие места в исходнике на языке высокого уровня. Бывает, что одна команда ассемблера соответствует сразу нескольким строчкам в разных местах исходника (например, если в функции есть несколько выражений return 0 - компилятор может их реализовать его одном месте, а из остальных сделать перход на этот код, или вынести некий общий код в подпрограмму). В общем, вам дорога прямиком в дизассемблер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за комментарий. Только сегодня увидела, так как забыла что несмотря на соответствующую галку оповещения об ответах не приходят на почту.

Дизассемблер действительно помог. Выяснила, что все же уходит в hard fault из-за попытки записи за границы sram, что было вызвано неправильной установкой значения переменной, которая задавала номер элемента массива для записи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...