AVR studio в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Ответить
Сообщения: 2
Зарегистрирован: Вт ноя 16, 2021 13:35:39

Сообщение Сергей Серебряков »

Добрый день! Поставил AtmelStudio7 и вроде начал писать код. Все нормально компилируется, в Протеусе симулируется, но не могу разобраться с ПОШАГОВОЙ ОТЛАДКОЙ.

Устанавливаю точку останова на нужной строке (красный кружек), нажимаю кнопку Start debugging and break, красный кружек точки останова меняется на желтый и при наведении мыши всплывает сообщение:
"the breakpoint will not currently be hit. unable to set requested breakpoint on target. Note: The current selected device is unable to set breakpoints during runtime"

МК выбран ATmega8, пишу на C

В свойствах проекта в Tool выбрал Simulator

Подскажите пожалуйста, что я делаю не правильно?
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA

Сообщение GoldenAndy »

Сергей Серебряков, А выбранная строка содержит исполняемый код?
Ибо ошибка говорит, что туда, где вы постапвили брякпоинт, никогда выполнение не придет.
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Контактная информация:
Реклама
Сообщения: 2
Зарегистрирован: Вт ноя 16, 2021 13:35:39

Сообщение Сергей Серебряков »

GoldenAndy писал(а):Сергей Серебряков, А выбранная строка содержит исполняемый код?
Ибо ошибка говорит, что туда, где вы постапвили брякпоинт, никогда выполнение не придет.
GoldenAndy, содержит
Вложения
2.png
[b]GoldenAndy[/b], содержит
(65.75 КБ) 195 скачиваний
Друг Кота
Аватара пользователя
Сообщения: 15790
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Для ассемблера контрольная точка однозначно коду соответствует.
:hunger:
А вот как в Си - не ведаю...
Может по листингу с командами трассировку делать надо?
:dont_know:
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA

Сообщение GoldenAndy »

BOB51, да и в сях на таком коде должно работать.
Студия в этом плане по возможности некорректный бряк перемещает туда, где он будет корректен.
Я повторил показанный Сергеем кусок кода (картинка большая, засим под спойлером)
СпойлерИзображение
У меня бряк ставится на
DDRB = 0b00000001;
Но при дебаге по F11 честно перескакивает на
PORTB = 0b00000001;

Скорее всего это из-за того, что заполнение DDRB - это первая команда в Си-листинге.
Но при выполнении по F5 студия честно останавливается на присвоении PORTB.

Сергей Серебряков, попробуйте запустить дебаг (F11) и пошагово выполнить (F10/F11) вашу программу.

И да, проверьте, какие у вас настройки оптимизации и дебага.
У меня с вот такими работает:
Изображение
Вложения
dd.jpg
(60.28 КБ) 1020 скачиваний
d.jpg
(140.4 КБ) 345 скачиваний
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

В 4 студии была функция Up-Download memory чтобы в процессе отладки можно было прочитать или записать память из файла. В 7-й студии не нашёл. Как это там называется или кто как решает такой вопрос?
Вложения
up-download memory.jpg
(40.25 КБ) 175 скачиваний
Реклама
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

как в 7 студии, при помощи комбинации клавиш, закоментировать кусок кода ?
Tell Me The Truth
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA

Сообщение GoldenAndy »

FreshMan, выделяете текст.
[/] на доп.клавиатуре коментит построчными // комментариями.
[*] на доп. клавиатуре комментит выделенное блочным /* комментарием */
Но если не дунуть текст не выделять - ничего не получится.
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

GoldenAndy, да вот не работает
выделил текст, нажал / и текст удалился
в эклипсе эта фича работает через ctrl+/, а здесь выходит ее нет ?
Tell Me The Truth
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA

Сообщение GoldenAndy »

Работает....
Изображение

* и / - на нумпаде!
Вложения
GIF.gif
(96.58 КБ) 817 скачиваний
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

GoldenAndy, прям сказка какая то
почему же у меня не получается ?
может версии у нас разные или нужно выставить доп. галочки ?
Изображение
Tell Me The Truth
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA

Сообщение GoldenAndy »

FreshMan, не знаю.
Я это не настраивал. Просто как то тапнул по нумпаду - а оно надчало комментить. Понравилось.
Атмел Студия 7.0.634
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Контактная информация:
Открыл глаза
Сообщения: 46
Зарегистрирован: Ср янв 04, 2017 14:32:28

Сообщение kas1830 »

Котаны, всем привет.

Во время отладки вывожу в окне Output некоторые переменные в прерываниях. Для этого настраиваю Action в точках останова. Но мне также дополнительно требуется выводить, сколько натикало в Cycle Counter в каждом прерывании:

Изображение

Перерыл все - не нашел (а может плохо искал). Единственное, в Visual Studio 2022 для точек останова есть функция $TICK
https://docs.microsoft.com/en-us/visual ... racepoints
Оказывается, она работает и для Microchip Studio, хотя ее нет в списке поддерживаемых функций, но, как я понял, выводит тики процессора машины, а не МК.

Может, есть обходной вариант или костыль?

Спасибо.
Прорезались зубы
Сообщения: 217
Зарегистрирован: Ср янв 11, 2012 11:55:51

Сообщение Land »

Доброго всем. Наверняка такой вопрос задавался, но поиском не нашел. Может ли такое быть, что Студия при оптимизации кода, заменяет 16 битную переменную на 8 битную? И как с этим бороться? переменная объявлена как uint16_t, присвоено значение 1162, декрементом должна добежать до нуля, но в Протеусе четко видно, что добегает до 907 и потом сразу падает в ноль :(
Поставщик валерьянки для Кота
Сообщения: 1974
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение veso74 »

Сомневайтесь в этом утверждении (вполне вероятно, что другое), но поставьте volatile для этого случая и попробуйте.

через переводчик:
Ключевое слово volatile предназначено для предотвращения применения компилятором каких-либо оптимизаций к объектам, которые могут изменяться таким образом, который не может быть определен компилятором.
Контактная информация:
Прорезались зубы
Сообщения: 217
Зарегистрирован: Ср янв 11, 2012 11:55:51

Сообщение Land »

да volatile она с рождения. не помогает (
Поставщик валерьянки для Кота
Сообщения: 1974
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение veso74 »

Наверное тогда другой случай. Дайте кусок кода (чтоб в темной комнате не гадать ... :) )
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA

Сообщение GoldenAndy »

Land, запустите на выполнение в симуляторе студии. поставте бряк в проблемном месте и покажите нам сишный код и дизасм этого места.
ЗЫ. Возможно, дизасм вам даже без нас ответ даст, 16 бит там или 8.
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18787
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

проблема-то явно не в замене 16-бит на 8, 8-битная переменная не сможет до 900 добежать никак, только до 255.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Прорезались зубы
Сообщения: 217
Зарегистрирован: Ср янв 11, 2012 11:55:51

Сообщение Land »

[uquote="ARV",url="/forum/viewtopic.php?p=4224321#p4224321"]проблема-то явно не в замене 16-бит на 8, 8-битная переменная не сможет до 900 добежать никак, только до 255.[/uquote]
счет вниз идет. Декремент.
Вот тот кусок кода:

Код: Выделить всё

if(count_bite > 15)
			{
				TCCR0B = 0x00; 
				TIFR0 |= (1<< OCF0A)|(1 << OCF0B);
				TCCR0A &= ~(1 << WGM01);
				OCR0A = 0x00;
				TIMSK0 = 0x00;	
				TCNT0 = 0x00;
				OCR0B = 0x25; // 500Hz 0x25 для тактов	
				TIMSK0 |= (1 << OCIE0B);	
				steps = STEP;	
				if(buffer == COMMAND_OPEN) 
					{
						if(PORTB_RD(RVRS)) PORTB_ON(INA); else PORTB_OFF(INA); // реверс включен или нет
						PORTB |= 0x02; TCCR0B |= (1 << CS02)|(0<< CS01)|(1<< CS00); // EN1 ON, EN2 OFF
					} else
						{	
							if(buffer == COMMAND_CLOSE)
								{
									if(PORTB_RD(RVRS)) PORTB_OFF(INA); else PORTB_ON(INA); // реверс включен или нет
									PORTB |= 0x04; TCCR0B |=(1 << CS02)|(0<< CS01)|(1<< CS00); // EN1 OFF, EN2 ON
								} else steps = 0; // для перехода к сбросу
						}
						
				while (steps){} // висим в цикле пока не отщелкаются все шаги
				TCCR0B = 0x00;
				TIFR0 |= (1<< OCF0A)|(1 << OCF0B);
				TIMSK0 = 0x00;
				PORTB &= ~0x19; // ~(1 << INA)|(1 << EN1)|(1 << EN2)
				flag = RST;
			}
строка while (steps){} . В протеусе слежу за значением steps в окне
переменная steps глобальная volatile uint16_t steps = STEP; Ей присваивается значение STEP = 1162. В прерывании таймера step декрементируется:

Код: Выделить всё

ISR(TIM0_COMPB_vect)
{
	PORTB ^= (1 << EN1)|(1 << EN2);
	if(!i) {PORTB_XOR(INA); i = 2;} else;
	i--;
	--steps;
	TCNT0 = 0;
}
в дизасемблере присвоение значения выглядит так (1162 = 0x048A):

Код: Выделить всё

				steps = STEP;	
000000CD  LDI R20,0x8A		Load immediate 
--- D:\FIRMWARE\ATMEL\Jalousie_NEW\Driver\Driver\Debug/.././main.c -------------
000000CE  LDI R21,0x04		Load immediate  
00000143  STS 0x0062,R21		Store direct to data space 
00000145  STS 0x0061,R20		Store direct to data space
а декремент в прерывании уже так:

Код: Выделить всё

	--steps;
0000003F  LDS R24,0x0061		Load direct from data space 
00000041  LDS R25,0x0062		Load direct from data space 
00000043  SBIW R24,0x01		Subtract immediate from word 
00000044  STS 0x0062,R25		Store direct to data space 
00000046  STS 0x0061,R24		Store direct to data space
и, если я правильно понимаю, как-то так цикл while (steps){}

Код: Выделить всё

00000163  STS 0x0062,R1		Store direct to data space 
00000165  STS 0x0061,R1		Store direct to data space 
00000167  LDS R24,0x0061		Load direct from data space 
00000169  LDS R25,0x0062		Load direct from data space 
0000016B  OR R24,R25		Logical OR 
0000016C  BRNE PC-0x05		Branch if not equal 
вроде как и все правильно :dont_know: Может это глюк протеуса?
Только почему Студия последовательно два значения в один регистр пихает?
00000163 STS 0x0062,R1 Store direct to data space
00000165 STS 0x0061,R1 Store direct to data space
типа 16-ти разрядное значение загрузили:
Синтаксис: Операнды: Счётчик команд:
(i) STS k16, Rr 0 ≤ r ≤ 31, 0 ≤ k ≤ 65535 PC ← PC + 2

Добавлено after 1 hour 23 minutes 58 seconds:
[uquote="GoldenAndy",url="/forum/viewtopic.php?p=4224245#p4224245"]Land, запустите на выполнение в симуляторе студии. поставте бряк в проблемном месте и покажите нам сишный код и дизасм этого места.
ЗЫ. Возможно, дизасм вам даже без нас ответ даст, 16 бит там или 8.[/uquote]
А в Студии все работает :shock: С 950 шагов до 890 прошел нормально. И кому верить? Протеусу или Студии?
Ответить

Вернуться в «AVR»