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

Обсуждаем контроллеры компании Atmel.
Ответить
Открыл глаза
Аватара пользователя
Сообщения: 67
Зарегистрирован: Вс фев 09, 2014 13:09:04

Сообщение alex11660 »

Авр студия 5. Пошаговая отладки. Иметься код:

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

#define F_CPU 8000000
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
	DDRD = 0xFF;
	PORTD = 0b00000000;
	while(1)
	{
		PORTD |= (1<<(PORTD0));
		_delay_ms(500);
		PORTD &= ~(1<<(PORTD0));
		_delay_ms(500);
	}
}
Я только начинающий, поэтому хочу в пошаговой отладке наблюдать состояние регистров D, но когда я дохожу до функции _delay_ms(500); то я в нее захожу и не могу выйти, как мне ее перепрыгнуть, или что бы не заходить во внутрь ее ? Спасибо.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Симуляция не в реальном времени, поэтому 500мс по факту значительно дольше.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

Сообщение Сериг »

Всех приветствую! Хочу собрать устройство http://radioded.ru/skhema-na-mikrokontr ... e-attiny85, там дан исходник (прикреплю снизу), установил студию, ну ничего не понимаю в ней, после CVavr, хотел бы попросить кого-нибудь о помощи скомпилировать с изменениями (рандомным воспроизведением файлов). Буду очень благодарен, можно в личку. Спасибо за внимание!
Вложения
src.zip
(112.62 КБ) 348 скачиваний
Встал на лапы
Сообщения: 90
Зарегистрирован: Пн апр 03, 2017 11:40:46

Сообщение 201bazza »

Всем привет! При запуске Отладки в Atmel Studio 6.1 вылазит окно "Memory 1". Что это такое? Я так понимаю это структура памяти какая то?

Изображение
Реклама
Эиком - электронные компоненты и радиодетали
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Это память программ как и написано. В ней лежит прошивка.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Встал на лапы
Сообщения: 90
Зарегистрирован: Пн апр 03, 2017 11:40:46

Сообщение 201bazza »

[uquote="Z_h_e",url="/forum/viewtopic.php?p=3190866#p3190866"]Это память программ как и написано. В ней лежит прошивка.[/uquote]

Почему, когда я загружаю .hex файл в утилиту для прошивки микроконтроллера, так совершенно другие значения? Что за память программ, можно поподробнее?

Изображение
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18862
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Обычное окно отладчика для просмотра содержимого памяти. Что вас смущает?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

201bazza писал(а):так совершенно другие значения?
Я конечно все не проверял, но разницы не увидел. Одни и теже значения. Только в первом случае побайтный режим просмотра, во втором пословный (шина данных у памяти программ AVR 16 битная, т.е. слово 16 бит)
201bazza писал(а):Что за память программ, можно поподробнее?
Программа лежит в памяти программ, где то ей надо же находится.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Встал на лапы
Сообщения: 90
Зарегистрирован: Пн апр 03, 2017 11:40:46

Сообщение 201bazza »

Благодарю всех за помощь! Более-менее понятно стало. Теперь далее с отладчиком проблемы. Почему при завершении цикла "while(OCR2<0xff) //снижение яркости" отладчик перескакивает в файл delay.h на 164 строчку __builtin_avr_delay_cycles(__ticks_dc); ??????

Изображение
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Вы наверное сами программу останавливаете, а так как 4 мс это много и симуляция значительно медленнее реального времени, то Вы туда и попадаете.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18862
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Причина того, что при пошаговой отладке происходят загадочные скачки "непонятно куда" кроются в том, что при включенной оптимизации GCC генерирует отладочную информацию некорректно. К этому надо привыкнуть и смириться с этим... Или отлаживать с включенной оптимизацией.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2564
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Сообщение serg_svd »

Господа программисты! Подскажите начинающему... :cry:
Можно ли в студии, используя команды препроцессора, или иные возможности, сделать так, чтобы компилировались различные варианты кода в АВТОМАТИЧЕСКОМ режиме?
Я пока в сети не нашел такого решения и сомневаюсь, возможно ли такое вообще.
Как простейший пример для чего это нужно, например, делать две различные прошивки для динамической индикации под ОА и ОК.

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

PS. просто даже на форуме видел, что народ выкладывает кучу вариантов прошивок под свои конструкции. И в ручную это делать замороченно.

И второй вопрос, как организовать учет версий и учет изменений в коде? Это можно делать автоматически или все делается вручную?
То есть заводится файл *.TXT и ручками прописываются изменения?
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Вымогатель припоя
Аватара пользователя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь

Сообщение prinv »

#define SOMETHING // вариант

#ifdef SOMETHING

код для варианта

#endif
Никакая контра не уйдёт от нас
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18862
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Автоматически - никак. Все равно, кроме вас, никто не знает, что именно вы хотите в сию минуту скомпилировать. Поэтому ПОЛУАВТОМАТИЧЕСКИ - можно.

Даже в древней студии (4.16, например), есть в настройках проекта Active configuration - это папка, куда будет складываться результат компиляции. НО!!! при этом каждая конфигурация имеет СВОИ НАСТРОЙКИ, т.е. все остальные опции проекта могут быть индивидуальными для каждой конфигурации.

Создаете конфигурацию ОК, добавляете в разделе Custom options опцию -D__OK__, и затем по коду при помощи #if defined(__OK__) пишите особый код для общего коллектора. Затем создаете конфигурацию ОА, для нее определяете макрос __OA__ и, соответственно #if defined(__OA__) расписываете... И так сколько угодно... можно и для разных камней делать, и для разных кварцев - для чего угодно!

макрос, определенный при помощи директивы -D виден во всех "исходниках" проекта - пользуйтесь.

Останется только при компиляции выбрать нужную конфигурацию - и все! Говорят, как-то можно еще одной кнопкой ВСЕ конфигурации отбилдить, но я не умею...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2564
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Сообщение serg_svd »

ARV, спасибо! Меня даже полуавтомат устроил бы, хотя есть выбор всех конфигураций. Надо пробовать.
У меня Atmel Studio 7. Тут все по-другому. Пытаюсь разобраться и найти все настройки, что Вы написали.
ARV писал(а):есть в настройках проекта Active configuration
Похоже этот пункт я нашел верно. Находится в свойствах проекта - Configuration Manager...
Тут я создал две конфигурации: ОА и ОК. Папки создаются автоматически, что уже хорошо.
ARV писал(а):Создаете конфигурацию ОК, добавляете в разделе Custom options опцию -D__OK__,
С этим сложнее. Не нашел такой пункт меню, нашел нечто похожее
Изображение
Попытался прописать как на картинке.
В коде помощник редактора мне предложил такое написание

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

#ifdef _OA
#endif // _OA

Черта перед ОА одна, Именно так там в качестве примера была написано _DEBUG.

Попытался откомпилировать - выдает кучу ошибок. Читаю справку. Пока не понял, где ошибка

Добавлено after 7 minutes 8 seconds:
ARV писал(а):#if defined(__OK__)
Директиву #if defined студия не понимает. Есть #ifdef
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18862
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Я бы советовал обязательно добавлять подчеркивания к имени макроса, так меньше шансов нарваться на повторное определение... Ну и по умолчанию "строенные" макросы gcc имеют по 2 подчеркивания спереди и, часто, сзади, поэтому свои вы можете делать с одним или тремя... на всякий случай.

а вот по поводу defined я удивлен... avr-gcc должен понимать это, это ж его родное!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Прорезались зубы
Аватара пользователя
Сообщения: 225
Зарегистрирован: Сб янв 14, 2012 22:53:50

Сообщение philosoraptor »

[uquote="serg_svd",url="/forum/viewtopic.php?p=3201739#p3201739"]Господа программисты! Подскажите начинающему... :cry:
Можно ли в студии, используя команды препроцессора, или иные возможности, сделать так, чтобы компилировались различные варианты кода в АВТОМАТИЧЕСКОМ режиме?[/uquote]

Можно делать вложенные дифайны, например

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

	      #define  ID_CHK  // AUTO display driver type chip detect
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   #ifndef ID_CHK
				    // #define id 0x7783  
				    #define id 0x9325  // set display driver type here manually
     	////////////     #define id 0x9341    //////////// 
   #define readID()   id   //
   #define readReg(val)   id    // dummy placeholder
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   #else 
    uint32_t id = 0; 
   #endif 
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////	
И второй вопрос, как организовать учет версий и учет изменений в коде? Это можно делать автоматически или все делается вручную?
То есть заводится файл *.TXT и ручками прописываются изменения?
Создаем отдельный хедер, что-то вроде presets.h и туда кидаем все директивы. Включаем в проект. И тут важно помнить, что сишный компайлер не умеет возвращаться, поэтому хедер с директивами должен быть объявлен раньше прочих инклудов, где эти директивы используются.
Собутыльник Кота
Аватара пользователя
Сообщения: 2564
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Сообщение serg_svd »

prinv , philosoraptor это для ручного режима. Я так и делал.
Вот ARV более подходящий вариант для меня написал.
Причем об использовании Configuration Manager... я и до этого догадывался и пробовал даже, но ничего не вышло.
Потому, что надо было еще дополнительно настраивать проект.
У меня же главная проблема - я не владею терминологией в полном объеме. Поэтому и не получилось самому ответ найти просто из-за того, что поисковый запрос неправильно давал.

Вопрос к ARV
Почитал тут хелп, неправильно писал директивы препроцессора. Нужно варианты компиляции писать так

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

#if defined(__OA__)		// Общий анод
....
#elif defined(__OK__)	// Общий катод
....
#endif
Но вот компилятор явно не понимает. Слово defined в редакторе выделено черным цветом.
Хотя посмотрел встроенные хидеры, там встречается такое написание.

Значит проблема в том, что я что-то где-то в настройках компилятора не активировал
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18862
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

serg_svd писал(а):Значит проблема в том, что я что-то где-то в настройках компилятора не активировал
Опция -std=gnu99 есть? Или на вкладке General должно быть что-то про стандарт Си, или в Miscellaneus самостоятельно добавьте
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2564
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Сообщение serg_svd »

ARV Еще раз огромное спасибо за помощь!!!! :beer:
Все получилось. Ошибка была моя. Вернее даже не знаю, ошибка или нет.
В общем я поудалял все конфигурации, что я создавал до этого. Остались только DEBUG и RELEASE.
Далее, я настроил нужный мне уровень оптимизации в RELEASE (это делать необязательно в принципе).
Далее, в Configuration Manager... в списке Active solution configurationя выбрал <NEW>. В появившемся окне Задается имя конфигурации и, обязательно, в списке Copy settings from: выбираем Release! Я этого первоначально не сделал, и бог его знает, какие настройки выставил компилятор по-умолчанию и при компиляции вываливалась куча ошибок. А так копируются настройки с Release. Галочку оставить.
Изображение

Вот у меня как раз проблема и была в том, что не скопировал настройки с релиза.
Кстати, единственное пока не знаю, стоит ли оставлять в опциях -D NDEBUG, такой стоит по-умолчанию для Release

PS эххх.... еще б к имени файла в папке добавлял бы имя конфигурации :)) :)) :)) :))
Ёлки палки! и это получилось :). Имя прописывается на вкладке Build
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Ответить

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