AVR studio в вопросах и ответах
Это память программ как и написано. В ней лежит прошивка.
- Реклама
- Сообщения: 90
- Зарегистрирован: Пн апр 03, 2017 11:40:46
Обычное окно отладчика для просмотра содержимого памяти. Что вас смущает?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Я конечно все не проверял, но разницы не увидел. Одни и теже значения. Только в первом случае побайтный режим просмотра, во втором пословный (шина данных у памяти программ AVR 16 битная, т.е. слово 16 бит)201bazza писал(а):так совершенно другие значения?
Программа лежит в памяти программ, где то ей надо же находится.201bazza писал(а):Что за память программ, можно поподробнее?
- Сообщения: 90
- Зарегистрирован: Пн апр 03, 2017 11:40:46
- Реклама
Вы наверное сами программу останавливаете, а так как 4 мс это много и симуляция значительно медленнее реального времени, то Вы туда и попадаете.
Причина того, что при пошаговой отладке происходят загадочные скачки "непонятно куда" кроются в том, что при включенной оптимизации GCC генерирует отладочную информацию некорректно. К этому надо привыкнуть и смириться с этим... Или отлаживать с включенной оптимизацией.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Господа программисты! Подскажите начинающему...
Можно ли в студии, используя команды препроцессора, или иные возможности, сделать так, чтобы компилировались различные варианты кода в АВТОМАТИЧЕСКОМ режиме?
Я пока в сети не нашел такого решения и сомневаюсь, возможно ли такое вообще.
Как простейший пример для чего это нужно, например, делать две различные прошивки для динамической индикации под ОА и ОК.
Я об этом задумался, когда пришлось, по просьбам форумчан, подгонять свой код под их требования. Сейчас вношу изменения и вручную компилирую. Ветвление на варианты сделал по командам препроцессора. Но каждый раз боюсь запутаться, какой я вариант откомпилировал, а какой нет, если в программу вносится общая корректировка.
PS. просто даже на форуме видел, что народ выкладывает кучу вариантов прошивок под свои конструкции. И в ручную это делать замороченно.
И второй вопрос, как организовать учет версий и учет изменений в коде? Это можно делать автоматически или все делается вручную?
То есть заводится файл *.TXT и ручками прописываются изменения?
Можно ли в студии, используя команды препроцессора, или иные возможности, сделать так, чтобы компилировались различные варианты кода в АВТОМАТИЧЕСКОМ режиме?
Я пока в сети не нашел такого решения и сомневаюсь, возможно ли такое вообще.
Как простейший пример для чего это нужно, например, делать две различные прошивки для динамической индикации под ОА и ОК.
Я об этом задумался, когда пришлось, по просьбам форумчан, подгонять свой код под их требования. Сейчас вношу изменения и вручную компилирую. Ветвление на варианты сделал по командам препроцессора. Но каждый раз боюсь запутаться, какой я вариант откомпилировал, а какой нет, если в программу вносится общая корректировка.
PS. просто даже на форуме видел, что народ выкладывает кучу вариантов прошивок под свои конструкции. И в ручную это делать замороченно.
И второй вопрос, как организовать учет версий и учет изменений в коде? Это можно делать автоматически или все делается вручную?
То есть заводится файл *.TXT и ручками прописываются изменения?
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
#define SOMETHING // вариант
#ifdef SOMETHING
код для варианта
#endif
#ifdef SOMETHING
код для варианта
#endif
Никакая контра не уйдёт от нас
Автоматически - никак. Все равно, кроме вас, никто не знает, что именно вы хотите в сию минуту скомпилировать. Поэтому ПОЛУАВТОМАТИЧЕСКИ - можно.
Даже в древней студии (4.16, например), есть в настройках проекта Active configuration - это папка, куда будет складываться результат компиляции. НО!!! при этом каждая конфигурация имеет СВОИ НАСТРОЙКИ, т.е. все остальные опции проекта могут быть индивидуальными для каждой конфигурации.
Создаете конфигурацию ОК, добавляете в разделе Custom options опцию -D__OK__, и затем по коду при помощи #if defined(__OK__) пишите особый код для общего коллектора. Затем создаете конфигурацию ОА, для нее определяете макрос __OA__ и, соответственно #if defined(__OA__) расписываете... И так сколько угодно... можно и для разных камней делать, и для разных кварцев - для чего угодно!
макрос, определенный при помощи директивы -D виден во всех "исходниках" проекта - пользуйтесь.
Останется только при компиляции выбрать нужную конфигурацию - и все! Говорят, как-то можно еще одной кнопкой ВСЕ конфигурации отбилдить, но я не умею...
Даже в древней студии (4.16, например), есть в настройках проекта Active configuration - это папка, куда будет складываться результат компиляции. НО!!! при этом каждая конфигурация имеет СВОИ НАСТРОЙКИ, т.е. все остальные опции проекта могут быть индивидуальными для каждой конфигурации.
Создаете конфигурацию ОК, добавляете в разделе Custom options опцию -D__OK__, и затем по коду при помощи #if defined(__OK__) пишите особый код для общего коллектора. Затем создаете конфигурацию ОА, для нее определяете макрос __OA__ и, соответственно #if defined(__OA__) расписываете... И так сколько угодно... можно и для разных камней делать, и для разных кварцев - для чего угодно!
макрос, определенный при помощи директивы -D виден во всех "исходниках" проекта - пользуйтесь.
Останется только при компиляции выбрать нужную конфигурацию - и все! Говорят, как-то можно еще одной кнопкой ВСЕ конфигурации отбилдить, но я не умею...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
ARV, спасибо! Меня даже полуавтомат устроил бы, хотя есть выбор всех конфигураций. Надо пробовать.
У меня Atmel Studio 7. Тут все по-другому. Пытаюсь разобраться и найти все настройки, что Вы написали.
Тут я создал две конфигурации: ОА и ОК. Папки создаются автоматически, что уже хорошо.

Попытался прописать как на картинке.
В коде помощник редактора мне предложил такое написание
Черта перед ОА одна, Именно так там в качестве примера была написано _DEBUG.
Попытался откомпилировать - выдает кучу ошибок. Читаю справку. Пока не понял, где ошибка
Добавлено after 7 minutes 8 seconds:
У меня Atmel Studio 7. Тут все по-другому. Пытаюсь разобраться и найти все настройки, что Вы написали.
Похоже этот пункт я нашел верно. Находится в свойствах проекта - Configuration Manager...ARV писал(а):есть в настройках проекта Active configuration
Тут я создал две конфигурации: ОА и ОК. Папки создаются автоматически, что уже хорошо.
С этим сложнее. Не нашел такой пункт меню, нашел нечто похожееARV писал(а):Создаете конфигурацию ОК, добавляете в разделе Custom options опцию -D__OK__,
Попытался прописать как на картинке.
В коде помощник редактора мне предложил такое написание
Код: Выделить всё
#ifdef _OA
#endif // _OAЧерта перед ОА одна, Именно так там в качестве примера была написано _DEBUG.
Попытался откомпилировать - выдает кучу ошибок. Читаю справку. Пока не понял, где ошибка
Добавлено after 7 minutes 8 seconds:
Директиву #if defined студия не понимает. Есть #ifdefARV писал(а):#if defined(__OK__)
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я бы советовал обязательно добавлять подчеркивания к имени макроса, так меньше шансов нарваться на повторное определение... Ну и по умолчанию "строенные" макросы gcc имеют по 2 подчеркивания спереди и, часто, сзади, поэтому свои вы можете делать с одним или тремя... на всякий случай.
а вот по поводу defined я удивлен... avr-gcc должен понимать это, это ж его родное!
а вот по поводу defined я удивлен... avr-gcc должен понимать это, это ж его родное!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 225
- Зарегистрирован: Сб янв 14, 2012 22:53:50
[uquote="serg_svd",url="/forum/viewtopic.php?p=3201739#p3201739"]Господа программисты! Подскажите начинающему...
Можно ли в студии, используя команды препроцессора, или иные возможности, сделать так, чтобы компилировались различные варианты кода в АВТОМАТИЧЕСКОМ режиме?[/uquote]
Можно делать вложенные дифайны, например
Можно ли в студии, используя команды препроцессора, или иные возможности, сделать так, чтобы компилировались различные варианты кода в АВТОМАТИЧЕСКОМ режиме?[/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
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Создаем отдельный хедер, что-то вроде presets.h и туда кидаем все директивы. Включаем в проект. И тут важно помнить, что сишный компайлер не умеет возвращаться, поэтому хедер с директивами должен быть объявлен раньше прочих инклудов, где эти директивы используются.И второй вопрос, как организовать учет версий и учет изменений в коде? Это можно делать автоматически или все делается вручную?
То есть заводится файл *.TXT и ручками прописываются изменения?
prinv , philosoraptor это для ручного режима. Я так и делал.
Вот ARV более подходящий вариант для меня написал.
Причем об использовании Configuration Manager... я и до этого догадывался и пробовал даже, но ничего не вышло.
Потому, что надо было еще дополнительно настраивать проект.
У меня же главная проблема - я не владею терминологией в полном объеме. Поэтому и не получилось самому ответ найти просто из-за того, что поисковый запрос неправильно давал.
Вопрос к ARV
Почитал тут хелп, неправильно писал директивы препроцессора. Нужно варианты компиляции писать так
Но вот компилятор явно не понимает. Слово defined в редакторе выделено черным цветом.
Хотя посмотрел встроенные хидеры, там встречается такое написание.
Значит проблема в том, что я что-то где-то в настройках компилятора не активировал
Вот ARV более подходящий вариант для меня написал.
Причем об использовании Configuration Manager... я и до этого догадывался и пробовал даже, но ничего не вышло.
Потому, что надо было еще дополнительно настраивать проект.
У меня же главная проблема - я не владею терминологией в полном объеме. Поэтому и не получилось самому ответ найти просто из-за того, что поисковый запрос неправильно давал.
Вопрос к ARV
Почитал тут хелп, неправильно писал директивы препроцессора. Нужно варианты компиляции писать так
Код: Выделить всё
#if defined(__OA__) // Общий анод
....
#elif defined(__OK__) // Общий катод
....
#endifХотя посмотрел встроенные хидеры, там встречается такое написание.
Значит проблема в том, что я что-то где-то в настройках компилятора не активировал
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Опция -std=gnu99 есть? Или на вкладке General должно быть что-то про стандарт Си, или в Miscellaneus самостоятельно добавьтеserg_svd писал(а):Значит проблема в том, что я что-то где-то в настройках компилятора не активировал
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
ARV Еще раз огромное спасибо за помощь!!!!
Все получилось. Ошибка была моя. Вернее даже не знаю, ошибка или нет.
В общем я поудалял все конфигурации, что я создавал до этого. Остались только DEBUG и RELEASE.
Далее, я настроил нужный мне уровень оптимизации в RELEASE (это делать необязательно в принципе).
Далее, в Configuration Manager... в списке Active solution configurationя выбрал <NEW>. В появившемся окне Задается имя конфигурации и, обязательно, в списке Copy settings from: выбираем Release! Я этого первоначально не сделал, и бог его знает, какие настройки выставил компилятор по-умолчанию и при компиляции вываливалась куча ошибок. А так копируются настройки с Release. Галочку оставить.

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

Ёлки палки! и это получилось
. Имя прописывается на вкладке Build
Все получилось. Ошибка была моя. Вернее даже не знаю, ошибка или нет.
В общем я поудалял все конфигурации, что я создавал до этого. Остались только DEBUG и RELEASE.
Далее, я настроил нужный мне уровень оптимизации в RELEASE (это делать необязательно в принципе).
Далее, в Configuration Manager... в списке Active solution configurationя выбрал <NEW>. В появившемся окне Задается имя конфигурации и, обязательно, в списке Copy settings from: выбираем Release! Я этого первоначально не сделал, и бог его знает, какие настройки выставил компилятор по-умолчанию и при компиляции вываливалась куча ошибок. А так копируются настройки с Release. Галочку оставить.
Вот у меня как раз проблема и была в том, что не скопировал настройки с релиза.
Кстати, единственное пока не знаю, стоит ли оставлять в опциях -D NDEBUG, такой стоит по-умолчанию для Release
PS эххх.... еще б к имени файла в папке добавлял бы имя конфигурации
Ёлки палки! и это получилось
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
- Сообщения: 225
- Зарегистрирован: Сб янв 14, 2012 22:53:50
[uquote="serg_svd",url="/forum/viewtopic.php?p=3201986#p3201986"]более подходящий вариант для меня[/uquote]
Если нет цели сделать код максимально портируемым и платформонезависимым, то можно и так, наверно. Лично мне же проще строчку в хедере поменять.
Если нет цели сделать код максимально портируемым и платформонезависимым, то можно и так, наверно. Лично мне же проще строчку в хедере поменять.
Подскажите, как подключить внешний хидер в 6 студии? Не могу найти, блиннннн...
Разобрался
Разобрался
Решил я тут попробовать на Си порисовать для АТмега168.
Все, как напсано у :
http://easyelectronics.ru/avr-uchebnyj- ... ast-1.html
делаю.
А он мне не создает в папке Мэйк-файл.
Студия 4,19
Добавлено after 11 minutes 7 seconds:
все. разобрался. Спасибо. Надо было просто скомпилировать.
Добавлено after 26 minutes 46 seconds:
Короче, у меня косяк какой-то в Студии. Только что поставил сверху ВинАВР. Он у меня, похоже, не увязался с нею. При компиляции выдает ошибку и все тут.
Сигнатура проблемы:
Имя события проблемы: APPCRASH
Имя приложения: avr-gcc.exe
Причем какую ошибку я понять не могу. Сначала жаловался, что какого-то файла у него нет.
Добавлено after 7 minutes 54 seconds:
/usr/bin/sh
Вот этот ресурс вроде говорит временно не доступен. А где его искать? Что-то все перекопал.
Добавлено after 2 minutes 46 seconds:
И вроде как на rm.exe жаловался. Я его нашел в папках Студии. А вот чего делать дальше не бум-бум.
З.Ы. Все. прошу пощения за беспокойство. Все исправил, все работает. )))
Все, как напсано у :
http://easyelectronics.ru/avr-uchebnyj- ... ast-1.html
делаю.
А он мне не создает в папке Мэйк-файл.
Студия 4,19
Добавлено after 11 minutes 7 seconds:
все. разобрался. Спасибо. Надо было просто скомпилировать.
Добавлено after 26 minutes 46 seconds:
Короче, у меня косяк какой-то в Студии. Только что поставил сверху ВинАВР. Он у меня, похоже, не увязался с нею. При компиляции выдает ошибку и все тут.
Сигнатура проблемы:
Имя события проблемы: APPCRASH
Имя приложения: avr-gcc.exe
Причем какую ошибку я понять не могу. Сначала жаловался, что какого-то файла у него нет.
Добавлено after 7 minutes 54 seconds:
/usr/bin/sh
Вот этот ресурс вроде говорит временно не доступен. А где его искать? Что-то все перекопал.
Добавлено after 2 minutes 46 seconds:
И вроде как на rm.exe жаловался. Я его нашел в папках Студии. А вот чего делать дальше не бум-бум.
З.Ы. Все. прошу пощения за беспокойство. Все исправил, все работает. )))
Станислав
- Сообщения: 31
- Зарегистрирован: Ср сен 13, 2017 05:53:24
Здравствуйте. Зависает отладчик Atmelstudio 6.2
вот код
при пошаговой отладке проходит строчку port_ini(); как доходит до структур просто тупо зависает на месте и все иконки на панели становятся неактивными, как быть? мб где то галки в настройках не стоит? помогите.Хочу через Watch посмотреть что там внутри происходит
вот код
Код: Выделить всё
void port_ini (void){
DDRB = (1 << PB0) //выход
|(1 << PB1)//выход
|(0 << PB2)
|(0 << PB3)
|(0 << PB4);
PORTB=0b00000000;
}
typedef struct //создаем синоним структуры
{
unsigned char sequence; //последовательность
unsigned char intervals[8]; //время
} Timers;
int main(void)
{
port_ini(); //Инициализируем порты
Timers Timer_1 = {0b10101010, {1, 1, 1, 1, 2, 1, 2, 1}};
Timers Timer_2 = {0b01010101, {1, 1, 1, 1, 2, 1, 2, 1}};
while(1)
{
Timer_1.sequence = 54;
Timer_2.sequence = Timer_1.sequence;
Timer_2.sequence = 4;
Timer_1.sequence = Timer_2.sequence;
}
}





