Страница 125 из 160

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

Добавлено: Ср дек 14, 2016 12:55:46
_dark
prinv нет, я их не различаю (даже на картинках не видел) :))
и тему посмотрел по диагонали,
(по ссылке в ней открывается другая, где вопрос подключения JTAG эмулятора как я понял был решен)

ps
По мне проще Dragon купить на Ali, т.к. время дорого, а цена у него смешная

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

Добавлено: Ср дек 14, 2016 13:15:43
prinv
Не нашел Dragon на Ali - поделитесь ссылкой?

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

Добавлено: Ср дек 14, 2016 14:25:59
_dark
первое что попалось (странно подарожал что ли, я брал по 55$ но пару лет назад...)
https://ru.aliexpress.com/store/product ... 60953.html

да ссылка странная :))
даже в Ч&Д и то
http://www.chipdip.ru/product/atavrdragon/

еще немного дешевле
http://www.ebay.com/itm/ATAVRDRAGON-Atm ... SwsFpWTm8G

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

Добавлено: Ср дек 14, 2016 17:25:32
prinv
Лучше уж Atmel ICE Basic за 6000 взять.

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

Добавлено: Пт дек 16, 2016 14:54:37
_dark
Кто нибудь знает, можно ли разместить переменную по фиксированному адресу?
знаю, что для IAR это как-то возможно, а для AS?

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

Добавлено: Пт дек 16, 2016 15:00:18
ARV
можно, для чего следует разместить переменную в отдельной секции памяти при помощи атрибута .section, а затем при линковке задать нужный адрес начала этой секции - переменная там и окажется.

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

Добавлено: Пт дек 16, 2016 15:24:10
_dark
Задачка чуть шире, необходимо разместить несколько (обычно до 100) переменных по фиксированным адресам,
обычно эти адреса идут последовательно (или поледовательно несколькими групами), и переменные могут быть разными 1...4 байтные.

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

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

typedef struct{
	uint8_t a;
	uint8_t b;
	uint16_t c;
	uint16_t d;
	}misk;
только обращение к ним через misk.name_var немного напрягает

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

Добавлено: Пт дек 16, 2016 16:02:04
COKPOWEHEU
Ну, это если вся проблема во внешнем виде, это легко исправить макросами
struct{
uint8_t _var1; #define var1 fixvars._var1
uint8_t _var2; #define var2 fizvars._var2
}fixvars;
А не секрет, для чего понадобилось размещать множество переменных по фиксированным адресам?

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

Добавлено: Пт дек 16, 2016 18:25:09
_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};	

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

Добавлено: Пт дек 16, 2016 18:30:40
COKPOWEHEU
а так?

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

volatile misk my_var __attribute__((section(".my_data"))) = {.a=1, .b=2, .c=3, .d=4};

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

Добавлено: Пт дек 16, 2016 18:36:23
_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 или у меня каша в голове?

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

Добавлено: Пт дек 16, 2016 19:13:36
Z_h_e
_dark писал(а):как правильно инициировать структуру значениями по умолчанию?
код ниже не работает (в части инициализации)...
Код:
volatile misk my_var __attribute__((section(".my_data"))) = {1,2,3,4};   
Может как-то атрибут мешает :dont_know: ? Например у меня при объявлении структуры все отлично инициализируется именно такой записью, но никаких атрибутов не применял.

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

Добавлено: Пт дек 16, 2016 19:24:07
ARV
даже и не знаю: мне ничего не мешает, у меня все отлично инициализируется :) и атрибут можно в любое место ставить... avr-gcc-5.2.1

какая ошибка-то хоть у вас вводится?

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

Добавлено: Пт дек 16, 2016 19:49:31
_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 да мешает атрибут, без него все ок.
Но в нем то весь смысл, о чем здесь речь идет....

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

Добавлено: Пт дек 16, 2016 20:00:12
Z_h_e
А что за МК у Вас? Вроде как нет AVR, у которой ОЗУ начинается с адреса меньшим 0x60.

Адрес сегмента как определен у Вас? Возможно его надо определять как 0x00800060 для адреса 0x0060. Это нюансы Си и гарвардской архитектуры.

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

Добавлено: Пт дек 16, 2016 20:12:21
_dark
Mega168PA 1к SRAM

секция начинается с 0x200
LDFLAGS += -Wl,-section-start=.my_data=0x800200
Добавлено after 5 minutes:
ARV свой код инициализации с атрибутом не выложите?
вместе с определением структуры

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

Добавлено: Пт дек 16, 2016 20:38:29
ARV
да я ваш скопировал :) но чистым этот тест не назовешь - я только убедился в отсутствии ошибок компиляции, в память я не смотрел, что там получалось. некогда, да и лень :roll:

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

Добавлено: Пт дек 16, 2016 21:23:27
_dark
ну ладно закончу эти экзерцисы,
в принципе понятно как без доп. секций все реализовать только на структурах...

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

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

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

но как это сделать?

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

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

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

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

Добавлено: Вс дек 18, 2016 08:20:11
Z_h_e
Доброго воскресного времени суток.
Существует ли возможность настроить AS6 так, чтобы он имя HEXа назначал по какому-то правилу. Например добавлял время или что-то выдергивал из исходника и добавлял к имени. И если да, то как это сделать.
Я makefile ручками не пишу, пользуюсь автоматизацией студии, мне бы как-нибудь там же и настроить это дело.
Спасибо.