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

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

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

Сообщение GoldenAndy »

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

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

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

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

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

Сообщение uk8amk »

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

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

Сообщение FreshMan »

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

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

Сообщение GoldenAndy »

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

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

Сообщение FreshMan »

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

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

Сообщение GoldenAndy »

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

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

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

Сообщение FreshMan »

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

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

Сообщение GoldenAndy »

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

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

Сообщение kas1830 »

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

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

Изображение

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

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

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

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

Сообщение Land »

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

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

Сообщение veso74 »

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

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

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

Сообщение Land »

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

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

Сообщение veso74 »

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

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

Сообщение GoldenAndy »

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

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

Сообщение ARV »

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

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

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

Сообщение 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 прошел нормально. И кому верить? Протеусу или Студии?
veso74
Поставщик валерьянки для Кота
Сообщения: 1905
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

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

Сообщение veso74 »

На "живой конструкции" нельзя попробовать? Напр. светодиод привязан к флагу, или флаг -> к дисплея и т.н. А нет двух свободных пинов для флаг-контроля через модуль rx/tx и UART с визуализации к компу? Так эти туманные вопросы (цитат: "И кому верить? Протеусу или Студии?"), часто граничащие со слухами, легендами и т.п. непроверенные утверждения, то будут устранены. Или код разрабатываться только "на бумаге" (и на симуляторе)?

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

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

Сообщение Land »

veso74, можно конечно в железе посмотреть. Печаль в том, что собственно этот кусок в железе тестировался и все крутилось. Правда с меньшим числом шагов, может я и не заметил проблемы. А ног свободных нет, это в 13-й тиньке сидит. Ок, значит надо будет опять проводочки паять )
Аватара пользователя
Карбофос
Опытный кот
Сообщения: 760
Зарегистрирован: Сб окт 22, 2016 17:33:32
Откуда: кг

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

Сообщение Карбофос »

[uquote="Land",url="/forum/viewtopic.php?p=4224413#p4224413"]

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

ISR(TIM0_COMPB_vect)
...
	--steps;
	TCNT0 = 0;
...
[/uquote]
Наверное, так делать не стОит.
Аватара пользователя
U235
Встал на лапы
Сообщения: 135
Зарегистрирован: Вт фев 21, 2012 20:42:26
Откуда: Санкт-Петербург, Россия, Земля

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

Сообщение U235 »

[uquote="Land",url="/forum/viewtopic.php?p=4224413#p4224413"]

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

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[/uquote]

В AVR GCC регистр R1 всегда содержит ноль. В функции компилятор не видит измений переменной steps и поэтому присваивает ей ноль, соответственно ваш цикл ожидания не отрабатывает. Добавьте volatile к определению переменной steps, это должно помочь. Другой подводный камень - прерывание может случиться между 00000167 и 00000169 и это тоже может привести к сбоям.
Ответить

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