Страница 1 из 1
Ошибка отладки в Atmel Studio 6
Добавлено: Ср дек 17, 2014 18:49:09
IM1
Здравствуйте.
Atmel Studio (6.2 vers 1502 sp1).
Столкнулся с крайне неприятной проблемой при работе с ATtiny2313, симулятор не видит порты при чтении. А именно: при отладке выставляем мышкой нужные разряды на ПИНах порта, а по команде IN они не читаются.
При замене девайса на ATtiny13 все ОК. Команду IN видим естественно в дизасемблере.
Кто-нибудь сталкивался с такой проблемой? Есть ли пути решения?
Для удобства прикладываю крохотный тестовый проект по этому вопросу.
Re: Ошибка отладки в Atmel Studio 6
Добавлено: Пт дек 19, 2014 00:17:48
IM1
Странно... Неужели никто не работал с ATtiny2313?
Уточняю (см. снимок) в этом месте: 00000023 IN R24,0x16
ATtiny2313 не читает ПИНы порта, а ATtiny13 читает на ура.
Может я что-то делаю не так, тогда пожалуйста подскажите.
Re: Ошибка отладки в Atmel Studio 6
Добавлено: Пт дек 19, 2014 19:23:45
codenamehawk
У вас включена оптимизация, компилятор выкинул присваивание, так как переменная prov более не используется.
Если переменная будет использоваться в прерывании используйте volatile
Измените программу, для отладки :
Код: Выделить всё
while(1)
{
//TODO:: Please write your application code
PORTB = prov;
}
Re: Ошибка отладки в Atmel Studio 6
Добавлено: Пт дек 19, 2014 23:30:02
IM1
codenamehawk писал(а):У вас включена оптимизация, компилятор выкинул присваивание, так как переменная prov более не используется.
Если переменная будет использоваться в прерывании используйте volatile
Спасибо.
А Вы проверяли свой совет?
Re: Ошибка отладки в Atmel Studio 6
Добавлено: Сб дек 20, 2014 16:56:57
IM1
Для
codenamehawk:
понял не проверяли, а я же давал снимок ассемблера, повторю фрагмент
Код: Выделить всё
00000023 IN R24,0x16 In from I/O location
00000024 STS 0x0060,R24 Store direct to data space
Компилятор не только не "выкинул присваивание", а честно прочитал ПИН В и сохранил в ОЗУ (что в общем-то и есть присваивание как таковое).
Для специалистов: ПОДСКАЖИТЕ ХОТЬ ЧТО-НИБУДЬ!
Вдогонку: на AVR Studio 4.18 build 684 все ОК.
Re: Ошибка отладки в Atmel Studio 6
Добавлено: Сб дек 20, 2014 21:32:42
codenamehawk
IM1 писал(а):Столкнулся с крайне неприятной проблемой при работе с ATtiny2313, симулятор не видит порты при чтении. А именно: при отладке выставляем мышкой нужные разряды на ПИНах порта, а по команде IN они не читаются.
Это верно, только отчасти.
Добавив чтение порта в основной цикл,
Код: Выделить всё
int main(void)
{
DDRB = 0;
prov = PINB;
cli ();
while(1)
{
//TODO:: Please write your application code
prov = PINB;
}
}
отладка начинает работать, но удалось заметить задержку между установкой PINB и считыванием этого значения из порта.
Уже такой код отлаживается нормально.
Код: Выделить всё
DDRB = 0;
asm("nop");
prov = PINB;
cli ();
В протеусе ваша программа работает нормально, так что скорее всего проблема в 6 студии.
Re: Ошибка отладки в Atmel Studio 6
Добавлено: Сб дек 20, 2014 22:06:05
dr.doc
отладка начинает работать, но удалось заметить задержку между установкой PINB и считыванием этого значения из порта
- пишу на ассемблере и у меня постоянно эта задержка при отладке. Уже привык и внимания этому не придаю.
Re: Ошибка отладки в Atmel Studio 6
Добавлено: Вс дек 21, 2014 00:26:11
IM1
codenamehawk писал(а):В протеусе ваша программа работает нормально, так что скорее всего проблема в 6 студии.
Ну Вы прям "Капитан Очевидность". Суть вопроса в этом и была, причем ни на миг не сомневаюсь, что в протеусе все будет ОК. Очень хотелось, чтобы кто-то попробовал у себя, вдруг чего-то я недопонимаю. Дело то минутное, и программу приложил. А в ответ - голая теория.
dr.doc писал(а):пишу на ассемблере и у меня постоянно эта задержка при отладке. Уже привык и внимания этому не придаю.
Опять же вопрос у меня был про студио 6.2 и именно о симуляции на С.
Как ассемблерист ассемблеристу скажу, что если у Вас в программе написана вот такая фигня:
и Вы стоите на брейкпойнте именно на этой команде, затем мышкой устанавливаете на PINB допустим 0х1а, затем (сделав достаточную паузу

) делаете 1 шаг в симуляторе, то в регистре R24 у Вас по любому должно появиться 0х1а, а не 0х00 как у меня. Уфф, уже писал, что дефект проявляется только на ATtiny2313 и все нормально на ATtiny13, на других девайсах не проверял. В студии 4 тоже все нормально, но я уже привык к замечательному редактору из 6-й, переходить обратно в 4-ю моветон.
Такая вот беда, достались несколько 2313 в подарок... очень жаль. В английском не настолько силен, чтобы писать производителю программы.
Re: Ошибка отладки в Atmel Studio 6
Добавлено: Вс дек 21, 2014 12:33:43
dr.doc
Поставьте для отладки nop перед данной командой.
Re: Ошибка отладки в Atmel Studio 6
Добавлено: Вс дек 21, 2014 14:50:02
IM1
dr.doc писал(а):Поставьте для отладки nop перед данной командой.
СПАСИБО!
Попробовал - оно, только 2 nop-а требуются, но это уже детали.
А то я вчера затосковал, когда увидел, что на ATmega8 тоже самое. Теперь буду обходить этот затык, а потом нопы выбрасывать, немного не элегантно, но терпимо.
П.С.
А на ТИНИ 13 работает и в студии 4 тоже и без нопов.
Re: Ошибка отладки в Atmel Studio 6
Добавлено: Вс дек 21, 2014 17:46:40
dr.doc
Хорошо что помогло. Есть вещи, в которые даже при отладке nop не вопрешь - все развалится...
Re: Ошибка отладки в Atmel Studio 6
Добавлено: Вс дек 21, 2014 22:41:03
zero648
У меня была подобная ситуация, но с точностью до "наоборот", т.е. в симуляторе работает, а в железе нет. Без "нопов" в железе кнопки не опрашивались, при частоте 4МГц контроллер не видел нажатия кнопок, если читать их сразу после переключения пинов на вход, пришлось добавить пару "нопов" для выдержки.
Re: Ошибка отладки в Atmel Studio 6
Добавлено: Пн дек 22, 2014 18:57:19
dr.doc
А антидребезг?
Re: Ошибка отладки в Atmel Studio 6
Добавлено: Пн дек 22, 2014 21:32:00
zero648
Не понял, а при чем тут антидребезг? Говорю же, при переключении на вход уровень сигнала на пине устанавливается не мгновенно, в зависимости от частоты.
Re: Ошибка отладки в Atmel Studio 6
Добавлено: Пн дек 22, 2014 21:39:54
dr.doc
Так это нормально. Там же цепочка триггеров, они и вносят задержку.
Re: Ошибка отладки в Atmel Studio 6
Добавлено: Вт дек 23, 2014 00:17:55
IM1
dr.doc писал(а):Так это нормально. Там же цепочка триггеров, они и вносят задержку.
Позвольте напомнить уважаемым котам, что речь идет всего лишь о СИМУЛЯЦИИ, а не о реальном устройстве. Уровни на портах ставятся МЫШКОЙ на экране симулятора и до команды ШАГ с точки зрения микроконтроллера проходит вечность, и всякие триггеры-миггеры здесь не причем.
Налицо ошибка симулятора СТУДИИ 6, разработчики решили (почему-то), что на брейкпойнте тактовый генератор микроконтроллера выключен. Опять же писал, что такого ляпа нет в СТУДИИ 4 и на некоторых девайсах в СТУДИИ 6, например на ТИНИ 13.
С уважением.
Re: Ошибка отладки в Atmel Studio 6
Добавлено: Вт дек 23, 2014 17:01:31
dr.doc
разработчики решили (почему-то), что на брейкпойнте тактовый генератор микроконтроллера выключен
- А как, по Вашему, происходит отладка дебаггером? На мой взгляд она пропускает тактовые импульсы генератора лишь в разрешенные моменты, что эквивалентно остановке генератора.
Re: Ошибка отладки в Atmel Studio 6
Добавлено: Вт дек 23, 2014 17:07:18
IM1
IM1 писал(а):Опять же писал, что такого ляпа нет в СТУДИИ 4 и на некоторых девайсах в СТУДИИ 6, например на ТИНИ 13.
