AVRGCC jak zalozit noinit promennou na danou adresu

Tomas Chvatal tchvatal na fordiag.cz
Středa Srpen 9 15:16:55 CEST 2023


Dobry den.

Dekuji moc za informace.
Udelam ten linker script.

>Mimochodom, nechapem, co myslite pod....

To asi neobsahuje, ale nejak se ten HEX opravdu natahne (nezkoumal jsem kde 
presne).

Ja vysledny hex vyrabim spojenim aplikace a meho bootloaderu pomoci
srec_cat %in1% -Intel %in2% -Intel -o AppPlusBootl.hex -Intel

Na paleni pouzivam aplikaci eXtremeBurner a ta, pri natahovani HEX, zahlasi, 
ze je HEX pro dany cpu moc dlouhy.

Jen tusim, ze to bude nejak souviset s tim posunem sekce. Nic jineho 
nezmenim a po navratu na orig.stav je to ok.
Radek pro sekci .data se zmeni pouze ve sloupci ADRESA (odsouvam ji na 
adr.00800102),
ale nezmeni se jeji SIZE, coz by se, dle meho, melo.

>Idx Name          Size      VMA       LMA       File off  Algn
>  0 .data         00000222  00800100  00004148  000041fc  2**0
>  0 .data         00000222  00800102  00004148  000041fc  2**0

s přáním hezkého dne / best regards
Tomáš Chvátal
tchvatal na fordiag.cz

----- Původní zpráva ----- 
Od: "Jan Waclawek" <konfera na efton.sk>
Komu: "HW-news" <hw-list na list.hw.cz>; <hw-list na list.hw.cz>
Odesláno: 9. srpna 2023 11:49
Předmět: Re: AVRGCC jak zalozit noinit promennou na danou adresu


Zacnem tym jednoduchym:

>Poddotaz: kde najdu nejaky popis parametru linkeru jako je 
>"--section-start"?

V manuali k linkeru, t.j.
https://sourceware.org/binutils/docs/ld/Options.html#index-_002d_002dsection_002dstart_003dsectionname_003dorg

Nie zeby to nejako zvlast pomohlo. V skutocnosti linker je nenormalne
zlozita zalezitost (presnejsie, projekt binutils, ktoreho ld je len jednou
sucastou, je nenormalne zlozita zalezitost, kvoli nenormalnemu rozsahu
cielov ktore to podchytava, a rozsahu variant pre vsetky ciele, a rozsahu
a zlozitosti cinnosti ktore sa pre vsetky tie ciele a varianty robia), a
manual obsahuje len zlomok informacie, vacsinou pre "typicke aplikacie".
Bohuzial, tu plne plati zasada "skutocnej dokumentacie"...

Teraz to tazke.

To, co sa snazite urobit by sa malo spravne riesit tym, ze pouzijete
vlastny linker script, a v nom si prehodite .noinit na zaciatok data.
Najlepsie zobrat ten, ktory je defaultny (ak to arduino nejako nepomenilo,
tak [avr-gcc]/lib/ldscripts/avrN.x - snad sa nepouziva niektory z dalsich
styroch s inou priponou,
https://www-user.tu-chemnitz.de/~heha/hsn/chm/avr-libc.chm/faq_linkerscripts.html
), skopirovat si ho k sebe, mozno premenovat aby bolo jasne o co ide; a do
prikazu ktorym sa spusta linker (znova, netusim ako to robi arduino a ani
ma to nezaujima) pridat -Wl,-Tmy_linkerscript.x

Vsetky ostatne postupy narazaju na to, ze nimi porusujete nejaky zauzivany
postup.

Mimochodom, nechapem, co myslite pod:

>coz zafunguje, posune se na tuto adresu, ale NEzmeni se pak jeji velikost
>a vznikly HEX soubor pri natazeni do flash.programu hlasi "soubor HEX je
>prilis velky pro dany cip".

ved hex neobsahuje output section data... ?

wek


----- Original Message ---------------

Subject: AVRGCC jak zalozit noinit promennou na danou adresu
   From: "Tomas Chvatal" <tchvatal na fordiag.cz>
   Date: Tue, 8 Aug 2023 08:37:09 +0200
     To: ".hw konfera" <Hw-list na list.hw.cz>

>Zdravim.
>
>(Microchip Studio, AVRGCC, Visual Micro, Arduino)
>
>Mam aplikaci ktera bude umet skocit do bootloaderu.
>Zalozil jsem si promennou BLstart ve ktere chci poslat do bootloaderu
>informaci o tom,
>ze zadam o reflash (ze ma bootloader cekat na reflash i bez stisku nejakeho
>tlacitka).
>
>Tedy potrebuji promennou BLstart:
>volatile unsigned char BLStartReq __attribute__ ((section (".noinit")));
>na nejake pevne dane adrese. Idealne 1.byte RAM,
>v sekci .noinit (jestli se nepletu).
>
>Pokud v linker prikazu pridam:
>-Wl,--section-start=.noinit=0x800100
>tak se mi prom.spravne posadi na adresu 0x0100
>
>Ale STEJNOU adresu take pouzije sekce .data.
>viz.:
>
>Sections:
>Idx Name          Size      VMA       LMA       File off  Algn
>  0 .data         00000222  00800100  00004148  000041fc  2**0
>                  CONTENTS, ALLOC, LOAD, DATA
>  1 .noinit       00000001  00800100  00004148  0000441e  2**0
>                  ALLOC
>
>
>Zkusil jsem tedy i sekci .data urcit adresu pomoci:
>-Wl,--section-start=.data=0x800102
>
>coz zafunguje, posune se na tuto adresu, ale NEzmeni se pak jeji velikost
>a vznikly HEX soubor pri natazeni do flash.programu hlasi "soubor HEX je
>prilis velky pro dany cip".
>viz.
>Sections:
>Idx Name          Size      VMA       LMA       File off  Algn
>  0 .data         00000222  00800102  00004148  000041fc  2**0
>                  CONTENTS, ALLOC, LOAD, DATA
>  1 .noinit       00000001  00800100  00800100  0000441e  2**0
>                  ALLOC
>
>
>Co prosim prehlizim ? Lze pres nejaky linker option urcit velikost sekce
>.data ?
>Nebo musim zeditovat linker script ? (to bych nerad, Arduino ....)
>
>Poddotaz: kde najdu nejaky popis parametru linkeru jako je 
>"--section-start"
>?
>(zkousel jsem, ale nebyl jsem uspesny :-( )
>
>Diky predem za kazde info.
>
>s přáním hezkého dne / best regards
>Tomáą Chvátal
>tchvatal na fordiag.cz
>
>_______________________________________________
>HW-list mailing list  -  sponsored by www.HW.cz
>Hw-list na list.hw.cz
>http://list.hw.cz/mailman/listinfo/hw-list

_______________________________________________
HW-list mailing list  -  sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list 



Další informace o konferenci Hw-list