avr-gcc

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Russian to

Threaded View
Привет, All !

Какой модификатор надо поставить у переменной чтоб она легла в eeprom?

char *foo="FOO" ложится в ram, const char *bar="BAR" ложится в rom, если я не
ошибаюсь.

.                                            С уважением, Hикита.
icq:240059686, lj-user:nicka_startcev
... Терпенье и трут тухес натрут?

avr-gcc
Mon Oct 24 2005 23:33, Nickita A Startcev wrote to All:

 
 NAS> Какой модификатор надо поставить у переменной чтоб она легла в eeprom?

 Hикакой.
 EEPROM - файл, а не область памяти.

 NAS> char *foo="FOO" ложится в ram, const char *bar="BAR" ложится в rom, если
 NAS> я не ошибаюсь.

 Выкинуть avrgcc и пользоваться IAR.

 VLV

 "Григорий Котовский ограбил городскую тюрьму..." (c) Cолженицын


avr-gcc
*** Ответ на письмо из carbonArea (carbonArea).

Привет, Vladimir !


 25 Oct 05 , 00:53  Vladimir Vassilevsky писал к Nickita A Startcev:

 VV>  Выкинуть avrgcc и пользоваться IAR.

Почему? Какие недостатки у gcc?
(про const char *a="foobar" я таки прогнал)

.                                                С уважением, Hикита.
... Hикого умнее нет наашего Хасана..

avr-gcc
Tue Oct 25 2005 10:41, Nickita A Startcev wrote to Vladimir Vassilevsky:

 
 VV>>  Выкинуть avrgcc и пользоваться IAR.
 NAS> Почему? Какие недостатки у gcc?
 
 Потому что IAR AVR категорически лучше avrgcc по _всем_ параметрам,
 кроме того, что он не бесплатный. Если это для вас важно.

 VLV

 "Григорий Котовский ограбил городскую тюрьму..." (c) Cолженицын


avr-gcc
Привет, Vladimir !


 25 Oct 05 , 19:14  Vladimir Vassilevsky писал к Nickita A Startcev:

VV>>>  Выкинуть avrgcc и пользоваться IAR.
NAS>> Почему? Какие недостатки у gcc?

VV>  Потому что IAR AVR категорически лучше avrgcc по _всем_ параметрам,
VV>  кроме того, что он не бесплатный. Если это для вас важно.

Бесплатных iar'ов не бывает?
host-платформа у них у всех win32? Демо-версий с ограниченным объемом исходника
или еще с какой-нибудь "мелкой пакостью" у них нет?

.                                            С уважением, Hикита.
icq:240059686, lj-user:nicka_startcev
... Диплодоки и диплококки

avr-gcc
Hello Nickita.

Wed Oct 26 2005 22:25, Nickita A Startcev wrote to Vladimir Vassilevsky:

 NAS> Демо-версий с ограниченным объемом исходника или еще с какой-нибудь
 NAS> "мелкой пакостью" у них нет?

Только с ограничением времени.  Которое лечится.  Hу и в демо-версии нет
исходников RTL.


Dimmy.


avr-gcc
Привет, Dimmy !


 27 Oct 05 , 07:46  Dimmy Timchenko писал к Nickita A Startcev:

NAS>> Демо-версий с ограниченным объемом исходника или еще с
NAS>> какой-нибудь "мелкой пакостью" у них нет?

DT> Только с ограничением времени.  Которое лечится.  Hу и в демо-версии
DT> нет исходников RTL.

гм. Пока останусь на gcc. Если упрусь в недостаток памяти/скорости/удобства -
пойду искать iar.

.                                            С уважением, Hикита.
icq:240059686, lj-user:nicka_startcev
... Press Shift + Reset to continue

avr-gcc
Hello Nickita.

Fri Oct 28 2005 08:48, Nickita A Startcev wrote to me:

 DT>> Только с ограничением времени.  Которое лечится.  Hу и в демо-версии
 DT>> нет исходников RTL.

 NAS> гм. Пока останусь на gcc. Если упрусь в недостаток
 NAS> памяти/скорости/удобства - пойду искать iar.

Hу, если инструмент освоил, привык, то жить можно. :)


Dimmy.


avr-gcc
Привет Nickita!

24 Oct 05 23:33, Nickita A Startcev писал All:

 NS> Какой модификатор надо поставить у переменной чтоб она легла в eeprom?

 NS> char *foo="FOO" ложится в ram, const char *bar="BAR" ложится в rom,
 NS> если я не ошибаюсь.

    Короткий ответ - да. Более развернутый: компилятор кладет объекты не в
память какого-то типа, а в именованные секции. Есть стандартные имена секций:
исполняемый код кладется в .text, инициализированные неконстантные данные
кладутся в .data, инициализированные константные - в .rodata,
неинициализированные - в .bss и т.п. А раскладка этих секций по реальным
областям памяти - задача линкера.

    Универсальное решение - разместить переменную например в секции .eeprom с
помощью атрибута section, например так:

    int var __attribute__ ((section(".eeprom")));

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... Закрой свой Ворд!

avr-gcc
Привет, Alex !


 25 Oct 05 , 15:50  Alex Mogilnikov писал к Nickita A Startcev:

AM>     Универсальное решение - разместить переменную например в секции
AM> .eeprom с помощью атрибута section, например так:

AM>     int var __attribute__ ((section(".eeprom")));

Ага, спасибо.
Посмотрю документацию в эту сторону.

.                                            С уважением, Hикита.
icq:240059686, lj-user:nicka_startcev
... People are strange ... (ц) Doors

avr-gcc
Здравствуй, Nickita!

Monday October 24 2005 23:33, you (2:5030/1321.19) wrote to All:

 NS> Какой модификатор надо поставить у переменной чтоб она легла в eeprom?

 NS> char *foo="FOO" ложится в ram, const char *bar="BAR" ложится в rom,
 NS> если я не ошибаюсь.

#include <avr/pgmspace.h>

//...

PROGMEM char test_string [] = "This is a something";
char buffer[STRING_SIZE];

//...

strcpy_P(buffer, test_string);

//...

p.s. gcc хоpоший инстpумент.

Alex


avr-gcc
Здравствуй, Nickita!

Wednesday October 26 2005 01:36, I wrote to you:

 NS>> Какой модификатор надо поставить у переменной чтоб она легла в
 NS>> eeprom?

Блин... только ща увидел что EEPROM, а не FLASH ... =)))

Соppи.

#ifndef __ATTR_EEPROM__
#define __ATTR_EEPROM__ __attribute__((section(".eeprom")))
#define EEPROM __ATTR_EEPROM__
#endif

EEPROM int foo = 0xABCD;

A это Makefile. С небольшими изменениями заимствован из WinAVR demo
---------------

PRG            = test
OBJ            = test.o
MCU_TARGET     = atmega16
OPTIMIZE       = -O2

DEFS           =
LIBS           =

# You should not have to change anything below here.

CC             = avr-gcc

# Override is only needed by avr-lib build system.

override CFLAGS        = -g -Wall $(OPTIMIZE) -mmcu=$(MCU_TARGET) $(DEFS)
override LDFLAGS       = -Wl,-Map,$(PRG).map

OBJCOPY        = avr-objcopy
OBJDUMP        = avr-objdump

all: $(PRG).elf lst text eeprom

$(PRG).elf: $(OBJ)
 $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)

clean:
 rm -rf *.o $(PRG).elf
 rm -rf *.lst *.map $(EXTRA_CLEAN_FILES)

lst:  $(PRG).lst

%.lst: %.elf
 $(OBJDUMP) -h -S $< > $@

# Rules for building the .text rom images

text: hex bin srec

hex:  $(PRG).hex
bin:  $(PRG).bin
srec: $(PRG).srec

%.hex: %.elf
 $(OBJCOPY) -j .text -j .data -O ihex $< $@

%.srec: %.elf
 $(OBJCOPY) -j .text -j .data -O srec $< $@

%.bin: %.elf
 $(OBJCOPY) -j .text -j .data -O binary $< $@

# Rules for building the .eeprom rom images

eeprom: ehex ebin esrec

ehex:  $(PRG)_eeprom.hex
ebin:  $(PRG)_eeprom.bin
esrec: $(PRG)_eeprom.srec

%_eeprom.hex: %.elf
 $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O ihex $< $@

%_eeprom.srec: %.elf
 $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O srec $< $@

%_eeprom.bin: %.elf
 $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O binary $< $@

Alex


avr-gcc
Привет, Alex !


 27 Oct 05 , 00:49  Alex Gavrikov писал к Nickita A Startcev:


NS>>> Какой модификатор надо поставить у переменной чтоб она легла в
NS>>> eeprom?

AG> Блин... только ща увидел что EEPROM, а не FLASH ... =)))

AG> Соppи.

AG> #ifndef __ATTR_EEPROM__
AG> #define __ATTR_EEPROM__ __attribute__((section(".eeprom")))
AG> #define EEPROM __ATTR_EEPROM__
AG> #endif

AG> EEPROM int foo = 0xABCD;

[skip]
Ага, понятно.
куда ляжет переменная - зависит от секции, в которой она определена, как секции
указать принудительно сверьху сказано.

Мэйкфайл я тоже "под себя" модифицировал:

=== Cut avr.smak ===
MCU     = atmega32
DEFS        =
LIBS        =
CC      = avr-gcc
CFLAGS      = -g -Wall -O2 -mmcu=$(MCU) $(DEFS) -I/usr/include/avr
LDFLAGS     = -Wl,-Map,$(basename $@).map

OBJCOPY        = avr-objcopy
OBJDUMP        = avr-objdump

.SUFFIXES: .elf .o .lst .hex .bin .srec .eeprom_hex .eeprom_bin .eeprom_srec

vpath %.c src
#vpath %.o out

out/%.o: %.c
    $(CC) $(CFLAGS) -c -o $@ $^

out/%.elf:
    $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)
    $(OBJDUMP) -h -S $@ > $(basename $@).lst
    $(OBJCOPY) -j .text -j .data -O ihex $@ $(basename $@).hex
    $(OBJCOPY) -j .text -j .data -O srec $@ $(basename $@).srec
    $(OBJCOPY) -j .text -j .data -O binary $@ $(basename $@).bin
    $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O ihex $@ $(basename
$@).eeprom.hex
    $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O srec $@ $(basename
$@).eeprom.srec
    $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O binary $@
$(basename $@).eeprom.bin
=== Cut ===

=== Cut Makefile ===
NAME    = test # имя бинарника
OBJS    = main.o # список объектников

include avr.smak

all:  out out/$(NAME).elf

out/$(NAME).elf: out/$(OBJS)

out:
    mkdir out

=== Cut ===

.                                            С уважением, Hикита.
icq:240059686, lj-user:nicka_startcev
... Добросовестно и усердно веселиться?!

Site Timeline