AVR studio в вопросах и ответах
Re: AVR studio в вопросах и ответах
Кто нибудь знает, можно ли разместить переменную по фиксированному адресу?
знаю, что для IAR это как-то возможно, а для AS?
знаю, что для IAR это как-то возможно, а для AS?
- Реклама
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18637
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: AVR studio в вопросах и ответах
можно, для чего следует разместить переменную в отдельной секции памяти при помощи атрибута .section, а затем при линковке задать нужный адрес начала этой секции - переменная там и окажется.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: AVR studio в вопросах и ответах
Задачка чуть шире, необходимо разместить несколько (обычно до 100) переменных по фиксированным адресам,
обычно эти адреса идут последовательно (или поледовательно несколькими групами), и переменные могут быть разными 1...4 байтные.
...хотя можно наверное все свалить в struct, а уже структуру загнать в отдельную секцию...
что-то типа
только обращение к ним через misk.name_var немного напрягает
обычно эти адреса идут последовательно (или поледовательно несколькими групами), и переменные могут быть разными 1...4 байтные.
...хотя можно наверное все свалить в struct, а уже структуру загнать в отдельную секцию...
что-то типа
Код: Выделить всё
typedef struct{
uint8_t a;
uint8_t b;
uint16_t c;
uint16_t d;
}misk;
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: AVR studio в вопросах и ответах
Ну, это если вся проблема во внешнем виде, это легко исправить макросами
А не секрет, для чего понадобилось размещать множество переменных по фиксированным адресам?struct{
uint8_t _var1; #define var1 fixvars._var1
uint8_t _var2; #define var2 fizvars._var2
}fixvars;
Re: AVR studio в вопросах и ответах
COKPOWEHEU ага годится, спасибо!
Один из вариантов реализации протокола MODBUS RTU. Чтобы не писать длиный swith{case:....break;...} при дешифрации адреса ячеек (регистров и пр. переменных),
хочу их держать последовательно в памяти. Тогда резко сокращаяется код обработки команды, достаточно по адресу который передается в команде вычислить смещение и скопировать в буфер ответа запрошенное количество
регистров (ячеек, входов и пр.). Учитывая, что стандарт предусматривает запрос несколькоих регистров подряд (сколько определяет пользователь), то это еще более экономит память, не нужна будет сборка ответа из разрозненых переменных.
Кажется получилось
map
как правильно инициировать структуру значениями по умолчанию?
код ниже не работает (в части инициализации)...
Один из вариантов реализации протокола 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
Добавлено after 29 minutes 1 second:.my_data 0x00800300 0x6
.my_data 0x00800300 0x6 Variables.o
0x00800300 var
как правильно инициировать структуру значениями по умолчанию?
код ниже не работает (в части инициализации)...
Код: Выделить всё
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 в вопросах и ответах
а так?
Код: Выделить всё
volatile misk my_var __attribute__((section(".my_data"))) = {.a=1, .b=2, .c=3, .d=4};Re: AVR studio в вопросах и ответах
нет, не работает
вот так да, но это не то
странно, вот здесь советовали по простому и это похоже работало...
http://radiokot.ru/forum/viewtopic.php?p=962848
зы
не пойму где засада, это нюансы GCC или у меня каша в голове?
вот так да, но это не то
Код: Выделить всё
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 в вопросах и ответах
Может как-то атрибут мешает_dark писал(а):как правильно инициировать структуру значениями по умолчанию?
код ниже не работает (в части инициализации)...
Код:
volatile misk my_var __attribute__((section(".my_data"))) = {1,2,3,4};
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18637
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: AVR studio в вопросах и ответах
даже и не знаю: мне ничего не мешает, у меня все отлично инициализируется
и атрибут можно в любое место ставить... avr-gcc-5.2.1
какая ошибка-то хоть у вас вводится?
какая ошибка-то хоть у вас вводится?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: AVR studio в вопросах и ответах
нет ошибок,
выдает результат с 40 адреса:
00 00 00 78 00
если
то все ок:
01 02 03 04 05
AVR GCC 4.6.2
не везде, после фигурных скобок атрибут поставить нельзя - ругается
Z_h_e да мешает атрибут, без него все ок.
Но в нем то весь смысл, о чем здесь речь идет....
просто ерунда в данных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); //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
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 в вопросах и ответах
А что за МК у Вас? Вроде как нет AVR, у которой ОЗУ начинается с адреса меньшим 0x60.
Адрес сегмента как определен у Вас? Возможно его надо определять как 0x00800060 для адреса 0x0060. Это нюансы Си и гарвардской архитектуры.
Адрес сегмента как определен у Вас? Возможно его надо определять как 0x00800060 для адреса 0x0060. Это нюансы Си и гарвардской архитектуры.
Re: AVR studio в вопросах и ответах
Mega168PA 1к SRAM
секция начинается с 0x200
ARV свой код инициализации с атрибутом не выложите?
вместе с определением структуры
секция начинается с 0x200
Добавлено after 5 minutes:LDFLAGS += -Wl,-section-start=.my_data=0x800200
ARV свой код инициализации с атрибутом не выложите?
вместе с определением структуры
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18637
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: AVR studio в вопросах и ответах
да я ваш скопировал
но чистым этот тест не назовешь - я только убедился в отсутствии ошибок компиляции, в память я не смотрел, что там получалось. некогда, да и лень 
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: AVR studio в вопросах и ответах
ну ладно закончу эти экзерцисы,
в принципе понятно как без доп. секций все реализовать только на структурах...
Всем кто откликнулся Спасибо!
Добавлено after 39 minutes:
Я собственно о чем подумал, похоже дело в том, что
.my_data не является секцией .data ( глубокая мысль
) и поэтому нет начальной инициализации.
вот если объявить .my_data как подсекцию .data, тогда наверное все должно получиться...
но как это сделать?
в принципе понятно как без доп. секций все реализовать только на структурах...
Всем кто откликнулся Спасибо!
Добавлено after 39 minutes:
Я собственно о чем подумал, похоже дело в том, что
.my_data не является секцией .data ( глубокая мысль
вот если объявить .my_data как подсекцию .data, тогда наверное все должно получиться...
но как это сделать?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18637
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: AVR studio в вопросах и ответах
я, честно говоря, уже не очень четко помню... но по-моему, инициализируемая область ОЗУ - это секция .bss, а .data - это остальное ОЗУ, точнее вообще все ОЗУ, включая .bss...
ща попробую все-таки собрать более-менее адекватный тест... терпение
Добавлено after 1 hour 12 minutes 43 seconds:
в общем, дело такое...
во-первых, я все сказал наоборот: .bss - это область ОЗУ глобальных переменных, не имеющая начальных данных (обнуляется по умолчанию), а .data - это как раз проинициализированные переменные
во-вторых, при выделении отдельной секции под переменную, она оказывается именно по этому адресу... но как ее проинициализировать "по умолчанию", я так и не понял... похоже, что никак... либо я просто слишком туп, чтоб понять, как.
ща попробую все-таки собрать более-менее адекватный тест... терпение
Добавлено after 1 hour 12 minutes 43 seconds:
в общем, дело такое...
во-первых, я все сказал наоборот: .bss - это область ОЗУ глобальных переменных, не имеющая начальных данных (обнуляется по умолчанию), а .data - это как раз проинициализированные переменные
во-вторых, при выделении отдельной секции под переменную, она оказывается именно по этому адресу... но как ее проинициализировать "по умолчанию", я так и не понял... похоже, что никак... либо я просто слишком туп, чтоб понять, как.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: AVR studio в вопросах и ответах
Доброго воскресного времени суток.
Существует ли возможность настроить AS6 так, чтобы он имя HEXа назначал по какому-то правилу. Например добавлял время или что-то выдергивал из исходника и добавлял к имени. И если да, то как это сделать.
Я makefile ручками не пишу, пользуюсь автоматизацией студии, мне бы как-нибудь там же и настроить это дело.
Спасибо.
Существует ли возможность настроить AS6 так, чтобы он имя HEXа назначал по какому-то правилу. Например добавлял время или что-то выдергивал из исходника и добавлял к имени. И если да, то как это сделать.
Я makefile ручками не пишу, пользуюсь автоматизацией студии, мне бы как-нибудь там же и настроить это дело.
Спасибо.
- prinv
- Вымогатель припоя
- Сообщения: 677
- Зарегистрирован: Чт янв 20, 2011 09:07:08
- Откуда: Пермь
- Контактная информация:
Re: AVR studio в вопросах и ответах
Поставил AVR Studio 4.19 и AVR Toolchain 3.3.0
При отладке появляется следующее окошко.
Что нужно сделать? Какую папку указать?

При отладке появляется следующее окошко.
Что нужно сделать? Какую папку указать?
- Вложения
-
- foldsrc.png
- (10.27 КБ) 880 скачиваний
Никакая контра не уйдёт от нас
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18637
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: AVR studio в вопросах и ответах
боюсь, что так не выйдет. я на 100% не уверен, но все предыдущие версии AVR Studio не умели "автоматически" работать ни с каким компилятором, кроме WinAVR. поэтому я могу вам дать не очень правильный совет: сначала установить WinAVR, а затем просто поверх ее папок перезаписать файлами из AVR Toolchain. студия будет думать, что это WinAVR, но фактически будет работать с новым компилятором.
как сделать совсем правильно - не знаю, к сожалению...
как сделать совсем правильно - не знаю, к сожалению...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- prinv
- Вымогатель припоя
- Сообщения: 677
- Зарегистрирован: Чт янв 20, 2011 09:07:08
- Откуда: Пермь
- Контактная информация:
Re: AVR studio в вопросах и ответах
AVR Toolchain это WinAVR и есть, только более новых версий.
Никакая контра не уйдёт от нас
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18637
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: AVR studio в вопросах и ответах
нет, это не совсем так.prinv писал(а):AVR Toolchain это WinAVR и есть, только более новых версий
WinAVR - это прежде всего инсталлятор, который делает такие изменения в окружении Windows, которые позволяют студии автоматически обнаружить его присутствие и соответственно предлагать создание проектов для WinAVR. о наличии toolchain студия, похоже, самостоятельно узнать не может, а как ей помочь - я не в курсе (точнее, сказал, как делал я)
кроме того, AVR Toolchain не содержит документации по avr-libc и вообще по avr-gcc, а WinAVR содержит все "из коробки".
функционально - да, это версии компилятора под AVR, но комплектность разная. в частности, мне очень не нравится формат вывода сводки о размере полученного кода, который выдает avr-size в toolchain последних версий, приходится применять версию из WinAVR
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!



