Jump to content
Sign in to follow this  
Guest SHIV

Проблемы при отладке в Atmel Studio 7

Recommended Posts

Guest SHIV

Добрый день. Изучаю программирование AVR по статьям DI HALT. С самим программированием проблем нет, а вот со студией на каждом шагу. Вот та статья. Код компилится, прошивается и работает. Проблема только при дебагинге в студии.
Tools->tools settings-> mask interrupts shile stepping = FALLSE
Atmega8->Toolchain->AVR/GNU C compiler -> Optimization = None
Пробовал ставить Atmel Studio 6 - не помогает.
Использовал как родной компилятор так и WinAVR - не помогает.

Итак, суть проблемы. Программа в фоне мигает светодиодом, по прерыванию окончания приема по UART изменяет состояния светодиода в зависимости от того что лежит в UDR. Оk. Вот крутиться желтая стрелочка в цикле while при нажатии step over , я тыкаю бит RXC. Если я в окне Disassembly бесконечно тыкаю step over - ничего не происходит, то есть я хожу в цикле от метки до rjmp. Если я в окне main.c тыкаю step over, при следующем тыке после установки бита RXC бит снимается, но стрелка из цикла не выходит. То есть все также крутиться там. Если я устанавливаю breakpoin в обработчик прерывания - алилуя, он заходит в прерывание, но самое интересное тут только начинается. Код прерывания:

ISR(USART_RXC_vect){
	
	switch(UDR){
		case '1': PORTD |= 1 << LED_GREEN; break;
		case '0': PORTD &= ~(1 << LED_GREEN); break;
		default: break;
	}
	
}

 Пытаюсь натыкать '1' в UDR а он говорит НЕ ДАМ! Квадратики просто не хотят тыкаться, а если меняю 0x00 на 0x31 он тут же сбрасывает регистр в ноль. Ммммм падла. Ок, в UDR ноль, значит просто перескочит на default. Он то перескакивает, да вот только флаг RXC не сбрасывает. В смысле? Возвращается в главный цикл, но флаг жи есть. Он обратно в прерывание, но вот во второй раз при выходе из switch флаг сбрасывается. ЧТО? Флаг должен сброситься когда происходит чтение UDR, по крайней мере мне так пацаны во дворе сказали. Идем в даташит и видим When interrupt-driven data reception is used, the receive complete routine must read the received data from UDR in order to clear the RXC Flag, otherwise a new interrupt will occur once the interrupt routine terminates. Пацаны не соврали. Ок, смотрю asm.

 LDI R30,0x2C		Load immediate 
 LDI R31,0x00		Load immediate 
 LDD R24,Z+0		Load indirect with displacement 

Ну вот, UDR (0x2c) читается. Atmel Studio, am I a joke for you? Так вот на втором проходе прерывания, на строчке LDD R24,Z+0 флаг таки сбрасывается. Если ручками вовремя в регистр R24 0x31 подставить то даже case работает.

 

Что это и как это понимать?

Резюмируем:
Почему студия не переходит в прерывание сама, а только если в прерывании брейкпоинт стоит?
Почему я не могу поменять состояние регистра UDR в окне I/O (кстати не только его, еще некоторые биты в других регистрах, они вроде бы не зарезервированы)?
Почему флаг не сбрасывается с первого раза?
Есть хорошие альтернативы Atmel Studio без таких приколов?
Почему так сложно?

Share this post


Link to post
Share on other sites
5 hours ago, Гость SHIV said:

Atmega8->Toolchain->AVR/GNU C compiler -> Optimization = None

У меня студия с такими настройками джае не компилирует) Ставлю минимальную оптимизацию.

 

Дебаг внутрисхемный или симулятор?

Share this post


Link to post
Share on other sites

Вебинар STM32G0 – новый лидер бюджетных 32-битных микроконтроллеров от STMicroelectronics

Компания Компэл приглашает вас 25 сентября принять участие в вебинаре, который посвящен новому семейству микроконтроллеров STM32G0. Вебинар рассчитан на технических специалистов и тех, кто хорошо знаком с семейством STM32. На вебинаре будут освоены современные методы тестирования производительности микроконтроллеров на примере самых бюджетных 32-битных семейств общего назначения STM32G0 и STM32F0 и проведено их подробное сравнение.

Подробнее

Guest SHIV

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

Share this post


Link to post
Share on other sites

Надо очень внимательно читать даташит на предмет изменения регистров. Впрочем, даже чтение даташита иногда не гарантирует результат. Я с новенькими Attiny встрял  - выяснилось, что ошибка в даташите.

https://www.avrfreaks.net/forum/attiny817-spi-interrupt-flags-if-not-cleared

В обработчик прерывания симулятор не заходит. Надо ставить бряку.

Share this post


Link to post
Share on other sites
                     

Литиевые батарейки Fanso в беспроводных датчиках пожарно-охранной сигнализации

Выбор подходящего элемента питания, способного обеспечивать требуемый уровень напряжения и выдавать необходимый ток на протяжении всего периода эксплуатации беспроводной пожарно-охранной системы является одной из первостепенных задач. Наиболее подходящим для этих целей элементом являются литий-тионилхлоридные элементы питания, а одним из наиболее конкурентоспособных производителей – компания Fanso, предлагающая своим клиентам продукты как универсальные, так и разработанные специально для решения конкретных задач.

Подробнее...

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Сообщения

    • А других у нас не купить. Эти самые дорогие, по 175 за штуку. Остальные хуже. Давно брал для УМ на 1875 подешевле, так они при завинчивании обломались под корешок, силумин.
    • Дурина, при загрузке в неё соответствующего ПО, тоже может программатором.  Но основная проблема всей темы вовсе не в программаторе.
    • @finn32 ,выходные терминалы эти оставишь?
    • Повёлся на мощность Она у этого пылесоса действительно большая, ~2,2 -2,5квт. Из которых эффективная на всасывание в районе 700вт. То есть пылесосит он действительно не плохо)) Да так собственно и хочу поступить) стоил бы фильтр до 3тр, то ещё куда не шло бы. А так, 5тр + доставка, мне жалко отдавать за кусок пластика с бумагой. Учитывая что например за подобную сумму можно купить целый пылесос) Прошлый пылесос (нилфиск) был как раз с мешками, проблема была в том, что к нему было не найти мешков и приходилось ножницами дорабатывать посадочную картонку, в принципе это не проблема была, у него потом просто двигатель клинанул, проработал он у меня долго, больше 7 лет. Вот после него захотелось мощный пылесос, но без пакетов)))
    • Название темы уже забавное. "Сквозной ток" однотактного генератора - надо записать в тетрадку.
    • Так об этом пишут уже десятки лет, зачем покупать "мерседес" если будете возить навоз на дачу. Хотите полный эксперимент отключите совсем датчик и увидите насколько хватит этого пылесоса раз не хотите менять фильтр.
    • На второй картинке 50 Гц на выходе. На печатке ЛБП ошибок не нашел. А сколько вольт на +моста? А какая ёмкость на выходе ЛБП. Осциллограммы питания +12 и -12 ОУ. С БП отключить цепь Z, ей нужен КС162. Пригодность КС182 зависит от напряжения на С6 в БП, если у тебя напряжения в БП больше на 2-3 вольта, чем написано на схеме, то КС182 может и подойдет. Последние наброски печаток и схема. Их не собирал, надо проверять. https://forum.cxem.net/applications/core/interface/file/attachment.php?id=647843   ЛБП 44.3.N.lay6
×
×
  • Create New...