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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
_dark
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт апр 26, 2012 14:30:40
Откуда: под Москвой

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

Сообщение _dark »

Кто нибудь знает, можно ли разместить переменную по фиксированному адресу?
знаю, что для IAR это как-то возможно, а для AS?
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18637
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

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

Мой уютный бложик... заходите!
Реклама
Аватара пользователя
_dark
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт апр 26, 2012 14:30:40
Откуда: под Москвой

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

Сообщение _dark »

Задачка чуть шире, необходимо разместить несколько (обычно до 100) переменных по фиксированным адресам,
обычно эти адреса идут последовательно (или поледовательно несколькими групами), и переменные могут быть разными 1...4 байтные.

...хотя можно наверное все свалить в struct, а уже структуру загнать в отдельную секцию...
что-то типа

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

typedef struct{
	uint8_t a;
	uint8_t b;
	uint16_t c;
	uint16_t d;
	}misk;
только обращение к ним через misk.name_var немного напрягает
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

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

Сообщение COKPOWEHEU »

Ну, это если вся проблема во внешнем виде, это легко исправить макросами
struct{
uint8_t _var1; #define var1 fixvars._var1
uint8_t _var2; #define var2 fizvars._var2
}fixvars;
А не секрет, для чего понадобилось размещать множество переменных по фиксированным адресам?
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
_dark
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт апр 26, 2012 14:30:40
Откуда: под Москвой

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

Сообщение _dark »

COKPOWEHEU ага годится, спасибо!

Один из вариантов реализации протокола MODBUS RTU. Чтобы не писать длиный swith{case:....break;...} при дешифрации адреса ячеек (регистров и пр. переменных),
хочу их держать последовательно в памяти. Тогда резко сокращаяется код обработки команды, достаточно по адресу который передается в команде вычислить смещение и скопировать в буфер ответа запрошенное количество
регистров (ячеек, входов и пр.). Учитывая, что стандарт предусматривает запрос несколькоих регистров подряд (сколько определяет пользователь), то это еще более экономит память, не нужна будет сборка ответа из разрозненых переменных.


Кажется получилось

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

volatile typedef struct{
	uint8_t a;
	uint8_t b;
	uint16_t c;
	uint16_t d;
	}misk;
	
misk var __attribute__((section(".my_data"))) = {1,2,3,4};	

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

LDFLAGS += -Wl,-section-start=.my_data=0x800300
map
.my_data 0x00800300 0x6
.my_data 0x00800300 0x6 Variables.o
0x00800300 var
Добавлено after 29 minutes 1 second:
как правильно инициировать структуру значениями по умолчанию?
код ниже не работает (в части инициализации)...

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

volatile misk my_var __attribute__((section(".my_data"))) = {1,2,3,4};	
Последний раз редактировалось _dark Пт дек 16, 2016 18:30:52, всего редактировалось 1 раз.
Реклама
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

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

Сообщение COKPOWEHEU »

а так?

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

volatile misk my_var __attribute__((section(".my_data"))) = {.a=1, .b=2, .c=3, .d=4};
Реклама
Аватара пользователя
_dark
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт апр 26, 2012 14:30:40
Откуда: под Москвой

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

Сообщение _dark »

нет, не работает

вот так да, но это не то

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

my_var.a = 1;	my_var.b = 2; 	my_var.c = 3; 	my_var.d = 4; 
странно, вот здесь советовали по простому и это похоже работало...
http://radiokot.ru/forum/viewtopic.php?p=962848

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

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

Сообщение Z_h_e »

_dark писал(а):как правильно инициировать структуру значениями по умолчанию?
код ниже не работает (в части инициализации)...
Код:
volatile misk my_var __attribute__((section(".my_data"))) = {1,2,3,4};   
Может как-то атрибут мешает :dont_know: ? Например у меня при объявлении структуры все отлично инициализируется именно такой записью, но никаких атрибутов не применял.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18637
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

даже и не знаю: мне ничего не мешает, у меня все отлично инициализируется :) и атрибут можно в любое место ставить... avr-gcc-5.2.1

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

Мой уютный бложик... заходите!
Аватара пользователя
_dark
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт апр 26, 2012 14:30:40
Откуда: под Москвой

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

Сообщение _dark »

нет ошибок,
Build succeeded.
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========
просто ерунда в данных

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

volatile __attribute__((section(".my_data"))) misk my_var = {1,2,3,4};
....
//	my_var.a = 1; 
	__eePUT(0x40, my_var.a);	//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//	my_var.b = 2; 
	__eePUT(0x41, my_var.b);	//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//	my_var.c = 3; 
	__eePUT(0x42, my_var.c);	//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//	my_var.d = 4; 
	__eePUT(0x43, my_var.d);	//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	if(my_var.a < my_var.b) my_var.c = my_var.d + 1;
	__eePUT(0x44, my_var.c);	//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
выдает результат с 40 адреса:
00 00 00 78 00

если

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

volatile __attribute__((section(".my_data"))) misk my_var = {1,2,3,4};
...
	my_var.a = 1; 
	__eePUT(0x40, my_var.a);	//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	my_var.b = 2; 
	__eePUT(0x41, my_var.b);	//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	my_var.c = 3; 
	__eePUT(0x42, my_var.c);	//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	my_var.d = 4; 
	__eePUT(0x43, my_var.d);	//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	if(my_var.a < my_var.b) my_var.c = my_var.d + 1;
	__eePUT(0x44, my_var.c);	//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
то все ок:
01 02 03 04 05

AVR GCC 4.6.2

не везде, после фигурных скобок атрибут поставить нельзя - ругается

Z_h_e да мешает атрибут, без него все ок.
Но в нем то весь смысл, о чем здесь речь идет....
Последний раз редактировалось _dark Пт дек 16, 2016 20:04:43, всего редактировалось 1 раз.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

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

Сообщение Z_h_e »

А что за МК у Вас? Вроде как нет AVR, у которой ОЗУ начинается с адреса меньшим 0x60.

Адрес сегмента как определен у Вас? Возможно его надо определять как 0x00800060 для адреса 0x0060. Это нюансы Си и гарвардской архитектуры.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
_dark
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт апр 26, 2012 14:30:40
Откуда: под Москвой

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

Сообщение _dark »

Mega168PA 1к SRAM

секция начинается с 0x200
LDFLAGS += -Wl,-section-start=.my_data=0x800200
Добавлено after 5 minutes:
ARV свой код инициализации с атрибутом не выложите?
вместе с определением структуры
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18637
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

да я ваш скопировал :) но чистым этот тест не назовешь - я только убедился в отсутствии ошибок компиляции, в память я не смотрел, что там получалось. некогда, да и лень :roll:
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
_dark
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт апр 26, 2012 14:30:40
Откуда: под Москвой

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

Сообщение _dark »

ну ладно закончу эти экзерцисы,
в принципе понятно как без доп. секций все реализовать только на структурах...

Всем кто откликнулся Спасибо! :beer:

Добавлено after 39 minutes:
Я собственно о чем подумал, похоже дело в том, что

.my_data не является секцией .data ( глубокая мысль :))) ) и поэтому нет начальной инициализации.
вот если объявить .my_data как подсекцию .data, тогда наверное все должно получиться...

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

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

Сообщение ARV »

я, честно говоря, уже не очень четко помню... но по-моему, инициализируемая область ОЗУ - это секция .bss, а .data - это остальное ОЗУ, точнее вообще все ОЗУ, включая .bss...
ща попробую все-таки собрать более-менее адекватный тест... терпение :)

Добавлено after 1 hour 12 minutes 43 seconds:
в общем, дело такое...
во-первых, я все сказал наоборот: .bss - это область ОЗУ глобальных переменных, не имеющая начальных данных (обнуляется по умолчанию), а .data - это как раз проинициализированные переменные
во-вторых, при выделении отдельной секции под переменную, она оказывается именно по этому адресу... но как ее проинициализировать "по умолчанию", я так и не понял... похоже, что никак... либо я просто слишком туп, чтоб понять, как.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

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

Сообщение Z_h_e »

Доброго воскресного времени суток.
Существует ли возможность настроить AS6 так, чтобы он имя HEXа назначал по какому-то правилу. Например добавлял время или что-то выдергивал из исходника и добавлял к имени. И если да, то как это сделать.
Я makefile ручками не пишу, пользуюсь автоматизацией студии, мне бы как-нибудь там же и настроить это дело.
Спасибо.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
prinv
Вымогатель припоя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь
Контактная информация:

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

Сообщение prinv »

Поставил AVR Studio 4.19 и AVR Toolchain 3.3.0
При отладке появляется следующее окошко.
Что нужно сделать? Какую папку указать?
Изображение
Вложения
foldsrc.png
(10.27 КБ) 880 скачиваний
Никакая контра не уйдёт от нас
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18637
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

боюсь, что так не выйдет. я на 100% не уверен, но все предыдущие версии AVR Studio не умели "автоматически" работать ни с каким компилятором, кроме WinAVR. поэтому я могу вам дать не очень правильный совет: сначала установить WinAVR, а затем просто поверх ее папок перезаписать файлами из AVR Toolchain. студия будет думать, что это WinAVR, но фактически будет работать с новым компилятором.

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

Мой уютный бложик... заходите!
Аватара пользователя
prinv
Вымогатель припоя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь
Контактная информация:

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

Сообщение prinv »

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

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

Сообщение ARV »

prinv писал(а):AVR Toolchain это WinAVR и есть, только более новых версий
нет, это не совсем так.
WinAVR - это прежде всего инсталлятор, который делает такие изменения в окружении Windows, которые позволяют студии автоматически обнаружить его присутствие и соответственно предлагать создание проектов для WinAVR. о наличии toolchain студия, похоже, самостоятельно узнать не может, а как ей помочь - я не в курсе (точнее, сказал, как делал я)

кроме того, AVR Toolchain не содержит документации по avr-libc и вообще по avr-gcc, а WinAVR содержит все "из коробки".

функционально - да, это версии компилятора под AVR, но комплектность разная. в частности, мне очень не нравится формат вывода сводки о размере полученного кода, который выдает avr-size в toolchain последних версий, приходится применять версию из WinAVR
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Ответить

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