-
11. Data: 2018-10-22 13:06:59
Temat: Re: ESP8266 - rozmiar flasha
Od: Atlantis <m...@w...pl>
On 22.10.2018 12:53, Zbych wrote:
> Pokaż jak wygląda mapa tak wygenrowanej binarki (objdump -h *.elf)
httpd.out: file format elf32-little
Sections:
Idx Name Size VMA LMA File off Algn
0 .data 00000864 3ffe8000 3ffe8000 000000e0 2**4
CONTENTS, ALLOC, LOAD, DATA
1 .rodata 00001188 3ffe8870 3ffe8870 00000950 2**4
CONTENTS, ALLOC, LOAD, READONLY, DATA
2 .bss 000066c0 3ffe99f8 3ffe99f8 00001ad8 2**4
ALLOC
3 .irom0.text 00037448 40240000 40240000 00009120 2**4
CONTENTS, ALLOC, LOAD, CODE
4 .text 0000763c 40100000 40100000 00001ad8 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
5 .xtensa.info 00000038 00000000 00000000 00040568 2**0
CONTENTS, READONLY
6 .xt.prop 0002bdc4 00000000 00000000 000405a0 2**0
CONTENTS, READONLY
7 .xt.lit 000015e8 00000000 00000000 0006c364 2**0
CONTENTS, READONLY
8 .comment 00002050 00000000 00000000 0006d94c 2**0
CONTENTS, READONLY
9 .debug_frame 000011fc 00000000 00000000 0006f99c 2**2
CONTENTS, READONLY, DEBUGGING
10 .debug_info 0000f518 00000000 00000000 00070b98 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_abbrev 00002a70 00000000 00000000 000800b0 2**0
CONTENTS, READONLY, DEBUGGING
12 .debug_loc 000046ee 00000000 00000000 00082b20 2**0
CONTENTS, READONLY, DEBUGGING
13 .debug_aranges 00000678 00000000 00000000 00087210 2**3
CONTENTS, READONLY, DEBUGGING
14 .debug_ranges 000006f0 00000000 00000000 00087888 2**0
CONTENTS, READONLY, DEBUGGING
15 .debug_line 0000544c 00000000 00000000 00087f78 2**0
CONTENTS, READONLY, DEBUGGING
16 .debug_str 000021fb 00000000 00000000 0008d3c4 2**0
CONTENTS, READONLY, DEBUGGING
17 .debug_pubnames 0000011a 00000000 00000000 0008f5bf 2**0
CONTENTS, READONLY, DEBUGGING
-
12. Data: 2018-10-22 13:47:52
Temat: Re: ESP8266 - rozmiar flasha
Od: Zbych <a...@o...pl>
W dniu 22.10.2018 o 13:06, Atlantis pisze:
> On 22.10.2018 12:53, Zbych wrote:
>
>> Pokaż jak wygląda mapa tak wygenrowanej binarki (objdump -h *.elf)
>
> httpd.out: file format elf32-little
>
> Sections:
> Idx Name Size VMA LMA File off Algn
> 3 .irom0.text 00037448 40240000 40240000 00009120 2**4
> CONTENTS, ALLOC, LOAD, CODE
> 4 .text 0000763c 40100000 40100000 00001ad8 2**2
> CONTENTS, ALLOC, LOAD, READONLY, CODE
No to teraz pytanie kiedy kod trafia do sekcji .irom0.text a kiedy do
.text.
Masz tam jakieś atrybuty przy funkcjach? __attribute__((section("blabla")))
-
13. Data: 2018-10-22 14:30:10
Temat: Re: ESP8266 - rozmiar flasha
Od: "Grzegorz Niemirowski" <g...@p...onet.pl>
Atlantis <m...@w...pl> napisał(a):
> To dosyć dziwne, bo:
> 1) Skrypt linkera jest generowany w locie, przez Makefile.
Właśnie, takie coś byłoby dziwne :) Skąd ta teoria? Skrypt nie jest
generowany, jest jedynie wybierany dynamicznie z mapy.
Makefile.ota:LD_MAP_2:=512:eagle.app.v6.new.512.app2
.ld
1024:eagle.app.v6.new.1024.app2.ld 2048:eagle.app.v6.new.2048.ld
4096:eagle.app.v6.new.2048.ld
Makefile.ota:LD_SCRIPT_USR2 := $(call
maplookup,$(ESP_SPI_FLASH_SIZE_K),$(LD_MAP_2))
Skrypty linkera podchodzą z SDK. Który skrypt jest wybierany, możesz
sprawdzić uruchamiając make z parametrem VERBOSE=1
--
Grzegorz Niemirowski
https://www.grzegorz.net/
-
14. Data: 2018-10-22 14:33:41
Temat: Re: ESP8266 - rozmiar flasha
Od: Atlantis <m...@w...pl>
On 22.10.2018 13:47, Zbych wrote:
> No to teraz pytanie kiedy kod trafia do sekcji .irom0.text a kiedy do
> .text.
> Masz tam jakieś atrybuty przy funkcjach? __attribute__((section("blabla")))
Standardowo przy swoich funkcjach daję ICACHE_FLASH_ATTR. Gdzieś w
plikach nagłówkowych SDK jest to zdefiniowane jako
__attribute__((section(".irom0.text."))).
Z tego co pamiętam, powoduje to, że taki kod jest wykonywany (wolniej)
bezpośrednio z flasha.
Próbowałem usunąć ten argument z paru funkcji, ale nic to nie daje - kod
dalej nie chce się kompilować.
Jakiś pomysł? Co może być nie tak?
-
15. Data: 2018-10-22 16:00:37
Temat: Re: ESP8266 - rozmiar flasha
Od: Zbych <a...@o...pl>
W dniu 22.10.2018 o 14:33, Atlantis pisze:
> On 22.10.2018 13:47, Zbych wrote:
>
>> No to teraz pytanie kiedy kod trafia do sekcji .irom0.text a kiedy do
>> .text.
>> Masz tam jakieś atrybuty przy funkcjach? __attribute__((section("blabla")))
>
> Standardowo przy swoich funkcjach daję ICACHE_FLASH_ATTR. Gdzieś w
> plikach nagłówkowych SDK jest to zdefiniowane jako
> __attribute__((section(".irom0.text."))).
>
> Z tego co pamiętam, powoduje to, że taki kod jest wykonywany (wolniej)
> bezpośrednio z flasha.
>
> Próbowałem usunąć ten argument z paru funkcji, ale nic to nie daje - kod
> dalej nie chce się kompilować.
Jak usuwasz ICACHE_FLASH_ATTR to przemieszczasz funkcję z irom0.text do
.text, który ma tylko 32kB, więc tylko pogarszasz sytuację. Zrób
dokładnie odwrotnie i dodaj do kilku funkcji ICACHE_FLASH_ATTR.
-
16. Data: 2018-10-22 17:43:04
Temat: Re: ESP8266 - rozmiar flasha
Od: Atlantis <m...@w...pl>
On 10/22/18 4:00 PM, Zbych wrote:
> Jak usuwasz ICACHE_FLASH_ATTR to przemieszczasz funkcję z irom0.text do
> .text, który ma tylko 32kB, więc tylko pogarszasz sytuację. Zrób
> dokładnie odwrotnie i dodaj do kilku funkcji ICACHE_FLASH_ATTR.
Prawie wszędzie pododawałem ICACHE_FLASH_ATTR. W swoim kodzie miałem
tylko kilka funkcji bez tego parametru (m.in. główną pętlę i kilka
callbacków, które w przykładach były zrealizowane w ten sposób, więc
zostawiłem). Nic się nie zmieniło. Zresztą funkcja która "przeważa" też
jest ICACHE_FLASH_ATTR...
Nie wiem jak biblioteka esphttpd, ale w moim kodzie prawie wszystko w
tej chwili powinno trafiać do irom0.text.
-
17. Data: 2018-10-22 18:54:18
Temat: Re: ESP8266 - rozmiar flasha
Od: Zbych <a...@o...pl>
Atlantis wrote on 22.10.2018 17:43:
> On 10/22/18 4:00 PM, Zbych wrote:
>
>> Jak usuwasz ICACHE_FLASH_ATTR to przemieszczasz funkcję z irom0.text do
>> .text, który ma tylko 32kB, więc tylko pogarszasz sytuację. Zrób
>> dokładnie odwrotnie i dodaj do kilku funkcji ICACHE_FLASH_ATTR.
>
> Prawie wszędzie pododawałem ICACHE_FLASH_ATTR. W swoim kodzie miałem
> tylko kilka funkcji bez tego parametru (m.in. główną pętlę i kilka
> callbacków, które w przykładach były zrealizowane w ten sposób, więc
> zostawiłem). Nic się nie zmieniło. Zresztą funkcja która "przeważa" też
> jest ICACHE_FLASH_ATTR...
>
> Nie wiem jak biblioteka esphttpd, ale w moim kodzie prawie wszystko w
> tej chwili powinno trafiać do irom0.text.
Zawsze możesz sprawdzić czy funkcje trafiają do tego segmentu co trzeba
albo porównując rozmiar poszczególnych segmentów, albo robiąc
szczegółową mapę z nazwami funkcji.
-
18. Data: 2018-10-24 09:43:34
Temat: Re: ESP8266 - rozmiar flasha
Od: Atlantis <m...@w...pl>
On 22.10.2018 18:54, Zbych wrote:
> Zawsze możesz sprawdzić czy funkcje trafiają do tego segmentu co trzeba
> albo porównując rozmiar poszczególnych segmentów, albo robiąc
> szczegółową mapę z nazwami funkcji.
W jaki sposób? ;)
Czyli mam rozumieć, że źródło problemu nie leży w zbyt małej ilości
flasha, ale raczej jest jakiś problem ze skryptem linkera?
-
19. Data: 2018-10-24 11:39:04
Temat: Re: ESP8266 - rozmiar flasha
Od: Zbych <a...@o...pl>
W dniu 24.10.2018 o 09:43, Atlantis pisze:
> On 22.10.2018 18:54, Zbych wrote:
>
>> Zawsze możesz sprawdzić czy funkcje trafiają do tego segmentu co trzeba
>> albo porównując rozmiar poszczególnych segmentów, albo robiąc
>> szczegółową mapę z nazwami funkcji.
>
> W jaki sposób? ;)
> Czyli mam rozumieć, że źródło problemu nie leży w zbyt małej ilości
> flasha, ale raczej jest jakiś problem ze skryptem linkera?
Problem polega na tym, że ktoś bezmyślnie przyjął położenie segmentu
.text. Domyślnie funkcje powinny być w większym (i wolniejszym)
segmencie a tylko wybrane funkcje powinny trafiać do tego szybszego (i
mniejszego) segmentu. A według tego co piszesz jest dokładnie na odwrót.
Możesz kazać linkerowi wyprodukować plik z mapą (-Wl,-Map=aaaaa.map) -
powinny być tam widoczne wszystkie funkcje i segmenty, do których trafiły.