Предлагаю CHERTS включить в UDK вот эту тулзу http://www.betgear.biz/MemUsage.rar
Очень полезна при анализе расклада памяти.
Очень полезна при анализе расклада памяти.
--- Makefile.orig Thu Mar 19 11:01:00 2015
+++ Makefile Thu Mar 19 10:59:12 2015
@@ -218,6 +218,7 @@
$(TARGET_OUT): $(APP_AR)
$(vecho) "LD $@"
$(Q) $(LD) -L$(SDK_LIBDIR) $(LD_SCRIPT) $(LDFLAGS) -Wl,--start-group $(LIBS) $(APP_AR) -Wl,--end-group -o $@
+ $(Q) $(SDK_TOOLS)/memanalyzer.exe $(OBJDUMP).exe $@
$(vecho) "Run objcopy, please wait..."
$(Q) $(OBJCOPY) --only-section .text -O binary $@ eagle.app.v6.text.bin
$(Q) $(OBJCOPY) --only-section .data -O binary $@ eagle.app.v6.data.bin
Исходники бы этой тузлы, и ссылку на официального автора.Переписал тулзу, чтобы она была консольной. Теперь можно в makefile добавить вот так:
В принципе получается то же самое, если использовать xtensa-lx106-elf-objdump в Makefile, табличка только выглядит поудобнее и есть вывод Total Used RAM, Free RAM и Free IRamВ итоге при компиляции будет видно что-то вроде этого:
$(Q) $(OBJDUMP) -h -j .data -j .rodata -j .bss -j .text -j .irom0.text $@
Sections:
Idx Name Size VMA LMA File off Algn
0 .data 000009f0 3ffe8000 3ffe8000 000000e0 2**4
CONTENTS, ALLOC, LOAD, DATA
1 .rodata 00000454 3ffe89f0 3ffe89f0 00000ad0 2**4
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00007be0 3ffe8e48 3ffe8e48 00000f28 2**4
ALLOC
3 .text 000062ce 40100000 40100000 00000f24 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
4 .irom0.text 000233ec 40240000 40240000 00007200 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
Section info:
Section| Description| Start (hex)| End (hex)|Used space
------------------------------------------------------------------------------
data| Initialized Data (RAM)| 3FFE8000| 3FFE89F0| 2544
rodata| ReadOnly Data (RAM)| 3FFE89F0| 3FFE8E44| 1108
bss| Uninitialized Data (RAM)| 3FFE8E48| 3FFF0A28| 31712
text| Cached Code (IRAM)| 40100000| 401062CE| 25294
irom0_text| Uncached Code (SPI)| 40240000| 402633EC| 144364
Total Used RAM : 35364
Free RAM : 46556
Free IRam : 7492
Но зачем целое приложение, для того, что и так умеет команда size?Переписал тулзу, чтобы она была консольной.
...
В итоге при компиляции будет видно что-то вроде этого:
$ xtensa-lx106-elf-size -Ax httpd.out
httpd.out :
section size addr
.data 0xb1c 0x3ffe8000
.rodata 0x15d0 0x3ffe8b20
.bss 0x9e10 0x3ffea0f0
.text 0x69b6 0x40100000
.irom0.text 0x24078 0x40240000
.comment 0x14b6 0x0
.xtensa.info 0x38 0x0
.xt.lit 0xfd8 0x0
.xt.prop 0x1de38 0x0
.debug_frame 0x978 0x0
.debug_info 0x9e7c 0x0
.debug_abbrev 0x21c5 0x0
.debug_loc 0x3b4b 0x0
.debug_aranges 0x5f8 0x0
.debug_line 0x6148 0x0
.debug_str 0x19fb 0x0
.debug_ranges 0x318 0x0
Total 0x6f57f
xtensa-lx106-elf-objdump тоже в принципе это же умеет, но вывод немного неудобен, думаю что memanalyzer.exe использует тот же xtensa-lx106-elf-objdump для получения информации + выводит её в более красивом табличном виде.Но зачем целое приложение, для того, что и так умеет команда size?
И ошибается:xtensa-lx106-elf-objdump тоже в принципе это же умеет, но вывод немного неудобен, думаю что memanalyzer.exe использует тот же xtensa-lx106-elf-objdump для получения информации + выводит её в более красивом табличном виде.
Section| Description| Start (hex)| End (hex)|Used space
------------------------------------------------------------------------------
data| Initialized Data (RAM)| 3FFE8000| 3FFE8AB0| 2736
rodata| ReadOnly Data (RAM)| 3FFE8AB0| 3FFE9D80| 4816
bss| Uninitialized Data (RAM)| 3FFE9D80| 3FFF1C10| 32400
text| Cached Code (IRAM)| 40100000| 4010683E| 26686
irom0_text| Uncached Code (SPI)| 40240000| 4026D218| 184856
Total Used RAM : 39952
Free RAM : 41968
Free IRam : 6100
Поддерживаю. Но сомневаюсь, что такое возможно.создать среду (попроще) в вашем UDK, чтобы она транслировала оверлеи, загружаемые в кусочек "Free IRam" c предварительной линковкой процедур в остальную часть
Я правильно понимаю, Вы хотите в iram иметь только ссылки на нужные процедуры, а сами процедуры хранить в др.области?Как создать среду (попроще) в вашем UDK, чтобы она транслировала оверлеи, загружаемые в кусочек "Free IRam" c предварительной линковкой процедур в остальную часть?
Скажите как учесть - учту.Found free IRAM: base:0x40106840, size: 6080 bytes (но тут с вычетом под мои нужды , но явно прогой заголовок flash, помещенный в IRAM не учтен )
А в 41968 - 41696 = 272 байта поверите?Current 'heap' size: 41696 bytes (это в user_init(), т.е. всего 2 байта куда-то дело SDK при начальной инициализации? - не поверю.)
Ну тут уж извините, это к Павлу Глобе, пусть он характер динамического выделения предсказывает.Current 'heap' size: 39072 bytes (это уже в system_init_done_cb(xxx) - и понятно - нажрался LwIP и прочие иниты WiFi в SDK и чуток моих...)
https://github.com/Sermus/ESP8266_memory_analyzerИсходники бы этой тузлы, и ссылку на официального автора.
Там пусто, только README.mdhttps://github.com/Sermus/ESP8266_memory_analyzer
Ссылки на оригинального автора у меня нет, случайно набрел на ссылку на архив, ее у указал.
Упс, мой косячок. Теперь густо ))).Там пусто, только README.md
Ага, вижу, скомпилил. А MemUsage.exe исходники, я его тоже в UDK засунул, хотя может и не нужно?Упс, мой косячок. Теперь густо ))).
Ссылку на https://github.com/Sermus/ESP8266_memory_analyzer я итак в ченджлог написал, просто я предпочитаю проверять исходники *.exe утилит, что я ложу в UDK, параноя чтоли, да и UDK вроде как опенсорсная. Ладно MemUsage.exe грохну, все равно GUI версия не сильно полезна.Да смысла дублировать нет, потом синхронизацией заморачиваться. Может просто дать ссылку на git repo?
Ну с .net все просто, декомпильнул, посмотрел. Червей там нет, проверено ))).я предпочитаю проверять исходники *.exe утилит
Замылился глаз, когда глядел - в 272 поверюА в 41968 - 41696 = 272 байта поверите?
Нет. В iram загружать произвольный код с внешнего носителя, исполняющийся всегда по фиксированном адресу в конкретной области IRAM. Но требуется, чтобы он мог обращаться к любым процедурам в Flash без линковки. Для этого, при его трансляции, необходимо иметь все описания всех процедур/переменных и их адресов в flash от основного проекта. Данный UDK и его система транслятора это удобно и практически не может или будете собирать такие описания сто лет для каждого оверлея, а надо чтобы всё транслировалось на ходу, с перетрансляцией всех подгружаемых оверлеев в автомате...Я правильно понимаю, Вы хотите в iram иметь только ссылки на нужные процедуры, а сами процедуры хранить в др.области?
1. Нет такой документации.А почему надо грузить в iram, а не исполнять во flash?
Если возможно, то дайте ссылку на документацию по данному вопросу
Спасибо
Подгружаемые отладочные функции и драйвера скачиваемые с удаленного сервера для каждого случая.А еще если не сложно поясните, что именно туда у Вас не влезает.
ну во-первых как работает файловая система за пределами 512kВ чем смысл данного эксперимента?
Т е что мы им хотим выяснить?
20K1.txt : 20480 bytes
20K2.txt : 20480 bytes
20K3.txt : 13952 bytes
20K4.txt : 0 bytes
20K5.txt : 256 bytes
-- хотя место еще есть
Total : 68021 bytes
Used : 56977 bytes
Remain: 11044 bytes
Изумительно:ну во-первых как работает файловая система за пределами 512k