AVRGCC jak zalozit noinit promennou na danou adresu
Jan Waclawek
konfera na efton.sk
Středa Srpen 9 11:49:48 CEST 2023
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
Další informace o konferenci Hw-list