Отладка Atmel-Ice с программными точками останова (SAMD21, SWD)

У меня возникали различные проблемы при попытке установить программные точки останова в Atmel Studio 7 с помощью отладчика Atmel-ICE с помощью SWD. Мне было интересно, может ли кто-нибудь объяснить более подробно (или указать мне направление документации), чтобы дать мне лучшее понимание того, почему я получаю следующие проблемы:

  1. Точки останова перемещаются при компиляции
  2. «Невозможно установить запрошенную точку останова на цели»
  3. Точка останова попадает только в первый раз в цикле

Следующий код представляет собой тестовую программу, которую я написал, чтобы продемонстрировать это с помощью процедур задержки и драйвера PORT ASF:

#include <asf.h>
#define LED PIN_PA01

int main (void)
{
  system_init();
  delay_init();
  struct port_config config_port_pin;
  config_port_pin.direction = PORT_PIN_DIR_OUTPUT;
  port_pin_set_config(LED, &config_port_pin);

  while(1)
  {
    port_pin_toggle_output_level(LED);
    delay_ms(100);
  }
}
  1. Если точка останова установлена ​​на линии переключения светодиодов, то точка останова перемещается на следующую линию задержки.
  2. Если задержка закомментирована, а точка останова размещена в строке переключения светодиодов, это говорит мне, что невозможно установить запрошенную точку останова на цели.
  3. Если точка останова помещается на линию задержки, она срабатывает (программа останавливается) только на первой итерации цикла while. Если я продолжаю (F5), программа продолжает работать (светодиод переключается каждые 100 мс), но не останавливается в точке останова.

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


person Lance Molyneaux    schedule 04.07.2016    source источник
comment
Это связано с уровнем оптимизации компилятора. Отключите все флаги оптимизации, и сгенерированный код будет именно тем, что вы написали, и вы сможете установить точки останова там, где хотите, используя свой c исходный код.   -  person LPs    schedule 04.07.2016
comment
@LPs: это похоже на ответ, а не на комментарий. Здесь было бы законно спросить, какие параметры компилятора установлены, но если вы собираетесь утверждать причину и предлагать решение, вы должны опубликовать это как ответ.   -  person Clifford    schedule 04.07.2016
comment
@Clifford Может быть, да, я понимаю твою точку зрения. Обычно я избегаю публиковать такой ответ, если контекст не совсем ясен: он слишком расплывчатый. Как вы написали, я действительно не знаю, что использует компилятор OP, поэтому я не могу предложить, какой вариант компилятора удалить/изменить.   -  person LPs    schedule 04.07.2016
comment
@LPs: Проблема в том, что если вы угадали правильно (и я подозреваю, что вы это сделали), ОП может никогда не прояснить ситуацию, потому что его проблема решена, а польза сообщества его мало интересует. Кроме того, кто-то другой может опубликовать ваш ответ и потребовать кредит!   -  person Clifford    schedule 04.07.2016
comment
Какие параметры компилятора и компилятора вы применяете?   -  person Clifford    schedule 04.07.2016
comment
@Клиффорд Да, я согласен. Честно говоря, мне очень надоели пользователи, которые задают вопросы, не давая ответов на пояснения, требуемые комментариями, и моей инстинктивной реакцией было перестать спрашивать и попытаться угадать. В данном конкретном случае это совершенно очевидно.. Кстати, я возьму на заметку вашу позицию, я постараюсь применить ее в будущем. ;)   -  person LPs    schedule 04.07.2016
comment
Вероятно, наиболее информативным было бы попытаться переключиться на представление смешанного исходного кода и сборки и посмотреть, где заканчиваются точки останова. Что касается параметров компилятора, то они, предположительно, скрыты в меню Atmel Studio IDE, хотя при компиляции создается make-файл, в котором можно увидеть фактические вызовы arm-none-eabi-gcc с параметрами.   -  person Chris Stratton    schedule 04.07.2016
comment
Настройки компилятора также будут видны в необработанном журнале сборки.   -  person Clifford    schedule 04.07.2016
comment
@LPs Спасибо, я прочитал немного больше об оптимизации компилятора и решил эти проблемы, спасибо!   -  person Lance Molyneaux    schedule 05.07.2016


Ответы (1)


я знаю, что вы ответили на свою проблему, но это действительно хороший учебник, который кто-то написал об оптимизации компилятора

https://www.avrfreaks.net/forum/tutcoptimization-and-importance-volatile-gcc

person Hasan alattar    schedule 26.04.2018