ESP32 Wi-Fi、BLE 等示例的固件大小及优化 & 相关组件大小对比

一. 测试目的

经常会有开发者提出基于 ESP32 Wi-Fi、BLE 等示例的固件大小及优化 & 相关组件大小对比,本文将测试针对相关示例进行修改测试。


二. 测试环境

为了保证测试结果的一致性,采用以下测试环境:

  • esp-idf
    编写本文时,使用的 esp-idf release 版本对应的 commit 为 7d0f1536e。可通过以下命令确认:

    git log --oneline -1
    

    结果为:

    7d0f1536e (HEAD -> release/v4.2, origin/release/v4.2) Merge branch 'bugfix/fix_adc_init_code_setting_for_esp32s2' into 'master'
    
  • toolchain 版本
    gcc version 8.2.0 (crosstool-NG esp-2020r1) ,可通过以下命令确认:

    xtensa-esp32-elf-gcc -v
    

    结果为(log 过长,只需要关注最后的这部分。如下):

    Thread model: posix
    gcc version 8.2.0 (crosstool-NG esp-2020r1) 
    
  • 测试主机
    Linux 环境,Ubuntu 18.04 LTS,可选用其他平台。

  • 开发板
    ESP32-WROOM-32D 开发板,可选用其他基于 ESP32 的开发板。

  • 测试示例
    esp-idf/examples/get-started/hello_world 示例
    esp-idf/examples/wifi/getting_started/station 示例
    esp-idf/examples/protocols/https_mbedtls 示例
    esp-idf/examples/bluetooth/bluedroid/ble/blufi 示例
    esp-idf/examples/bluetooth/nimble/bleprph 示例


三. 测试过程

在正常编译烧录示例的基础上可使用 idf.py menuconfig 来配置优化固件大小,具体如下:

  1. 开启尺寸优化

    idf.py menuconfig 中选择 Compiler option -> Optimize level -> Optimize for size(默认为 Debug)

  2. 降低 log 打印等级

    idf.py menuconfig 中选择 Component config -> Log output -> Default log verbosity -> Error(默认为 Info)

如何使用 esp-idf 创建与编译示例请查看 ESP-IDF 编程指南

注:在工程下的终端输入 idf.py size-components 查看 component size


四. 测试结果

4.1. hello_world 示例

此部分为编译烧录 hello_world 示例后的 component size 以及 APP Bin 的大小。以下分为优化固件大小前后两部分。

  1. 优化固件大小前
    APP Bin 大小为:

    144K  hello-world.bin
    

    component size 大小为:

    Total sizes:
    DRAM .data size:    8552 bytes
    DRAM .bss  size:    2048 bytes
    Used static DRAM:   10600 bytes ( 170136 available, 5.9% used)
    Used static IRAM:   39747 bytes (  91325 available, 30.3% used)
          Flash code:   76803 bytes
       Flash rodata:   22056 bytes
    Total image size:~ 147158 bytes (.bin may be padded larger)
    Per-archive contributions to ELF file:
                Archive File DRAM .data & .bss   IRAM Flash code & rodata   Total
                      libc.a        364      0      0      54820     3833   59017
             libfreertos.a       4140    776  12787          0     1762   19465
                libesp32.a       2126    106   6543       5118     3385   17278
                   libsoc.a        184      4   6732       1501     1940   10361
             libspi_flash.a        783    294   4878       1143     1380    8478
             libesp_common.a         16    204    559       1077     5345    7201
                   libvfs.a        308     48      0       5579      923    6858
                   libheap.a        305      4   3135        877      729    5050
                libdriver.a         80     20      0       3053      768    3921
                libnewlib.a        152    272    820        868       88    2200
                libefuse.a         16      4      0       1162      720    1902
    libbootloader_support.a          0      0   1020        503        0    1523
                   liblog.a          8    272    580         94      151    1105
          libesp_ringbuf.a          0      0    858          0      154    1012
             libapp_update.a          0      4    109        159      474     746
                   libhal.a          0      0    447          0       32     479
                   libmain.a          0      0      0        214      248     462
                libpthread.a          8     12      0        264        0     284
                libxtensa.a          0      0    213          0        0     213
                   libgcc.a          0      0      0          0      160     160
                      (exe)          0      0      3          3       12      18
                   libcxx.a          0      0      0         11        0      11
                   libjson.a          0      0      0          0        0       0
             libmbedcrypto.a          0      0      0          0        0       0
       libwpa_supplicant.a          0      0      0          0        0       0
    
  2. 优化固件大小后
    APP Bin 大小为:

    136K  hello-world.bin
    

    component size 大小为:

    Total sizes:
    DRAM .data size:    8264 bytes
    DRAM .bss  size:    2040 bytes
    Used static DRAM:   10304 bytes ( 170432 available, 5.7% used)
    Used static IRAM:   35035 bytes (  96037 available, 26.7% used)
          Flash code:   73287 bytes
       Flash rodata:   19436 bytes
    Total image size:~ 136022 bytes (.bin may be padded larger)
    Per-archive contributions to ELF file:
                Archive File DRAM .data & .bss   IRAM Flash code & rodata   Total
                      libc.a        364      0      0      54820     3823   59007
             libfreertos.a       4140    776  11631          0     1618   18165
                libesp32.a       1945    106   5570       4540     2687   14848
                   libsoc.a        132      4   5881       1329     1677    9023
             libspi_flash.a        777    294   4539        964     1083    7657
             libesp_common.a         16    204    404        980     5081    6685
                   libvfs.a        308     48      0       4368      558    5282
                   libheap.a        298      4   2483        640      568    3993
                libdriver.a         80     20      0       2479      677    3256
                libnewlib.a        152    272    800        778       88    2090
                libefuse.a         16      4      0        917      670    1607
    libbootloader_support.a          0      0    854        470       16    1340
                   liblog.a          8    272    493         84      147    1004
          libesp_ringbuf.a          0      0    671          0      152     823
             libapp_update.a          0      4     88        131      471     694
                   libhal.a          0      0    447          0       32     479
                   libmain.a          0      0      0        202      223     425
                libpthread.a          8     12      0        246        0     266
                libxtensa.a          0      0    173          0        0     173
                   libgcc.a          0      0      0          0      160     160
                      (exe)          0      0      3          3       12      18
                   libcxx.a          0      0      0         11        0      11
                   libjson.a          0      0      0          0        0       0
             libmbedcrypto.a          0      0      0          0        0       0
       libwpa_supplicant.a          0      0      0          0        0       0
    

4.2. station 示例

此部分为编译烧录 station 示例后的 component size 以及 APP Bin 的大小。以下分为优化固件大小前后两部分。

  1. 优化固件大小前
    APP Bin 大小为:

    663K  wifi_station.bin
    

    component size 大小为:

    Total sizes:
    DRAM .data size:   14488 bytes
    DRAM .bss  size:   22752 bytes
    Used static DRAM:   37240 bytes ( 143496 available, 20.6% used)
    Used static IRAM:   88304 bytes (  42768 available, 67.4% used)
          Flash code:  478527 bytes
       Flash rodata:   96696 bytes
    Total image size:~ 678015 bytes (.bin may be padded larger)
    Per-archive contributions to ELF file:
                Archive File DRAM .data & .bss   IRAM Flash code & rodata   Total
             libnet80211.a        975   9186  12368     118278    23493  164300
                   liblwip.a         21   3990      0      84682    19072  107765
                   libpp.a       1317   5379  23949      38431     5100   74176
                      libc.a        364      0      0      55303     3833   59500
       libwpa_supplicant.a          8    796      0      42349     7696   50849
             libmbedcrypto.a         64     29     30      43986     4207   48316
                   libphy.a       1604    929   6491      30366        0   39390
             libfreertos.a       4140    776  14440          0     2005   21361
                libesp32.a       2126    114   7017       5237     3662   18156
             libnvs_flash.a          0     24      0      13321     3033   16378
                   libsoc.a        184      4   6736       1509     1943   10376
             libspi_flash.a        783    294   6179       1272     1424    9952
             libesp_common.a         16    210   1088       1968     6165    9447
             libesp_wifi.a        400     80    618       4590     2776    8464
                   libvfs.a        308     48      0       5849     1044    7249
             libesp_netif.a         12     25      0       4788     2200    7025
                   libgcc.a          4     12    104       5387      872    6379
                   libheap.a        305      4   3234        877      729    5149
             libesp_event.a          0      4      0       2949     1171    4124
                libdriver.a         80     20      0       3157      768    4025
                libstdc++.a          8     20      0       2590     1082    3700
                libcoexist.a       1278     28      0       2227        0    3533
                   libmain.a          0      8      0       1058     1168    2234
                libnewlib.a        152    272    828        868       88    2208
                libefuse.a         36      4      0       1068      740    1848
                libpthread.a         16     12    243        771      509    1551
    libbootloader_support.a          0      0   1016        503        0    1519
                   liblog.a          8    272    628        438      169    1515
                   libcore.a          0     29      0        805      302    1136
          libesp_ringbuf.a          0      0    858          0      152    1010
             libapp_update.a          0      4    109        159      474     746
                   librtc.a          0      0    480          0        0     480
                   libhal.a          0      0    447          0       32     479
                libxtensa.a          0      0    213          0        0     213
          libtcpip_adapter.a          0     17      0        188        0     205
                      (exe)          0      0      3          3       12      18
                   libcxx.a          0      0      0         11        0      11
                libesp_eth.a          0      0      0          0        0       0
                   libjson.a          0      0      0          0        0       0
                   libmesh.a          0      0      0          0        0       0
    
  2. 优化固件大小后
    APP Bin 大小为:

    618K  wifi_station.bin
    

    component size 大小为:

    Total sizes:
    DRAM .data size:   14200 bytes
    DRAM .bss  size:   22736 bytes
    Used static DRAM:   36936 bytes ( 143800 available, 20.4% used)
    Used static IRAM:   82895 bytes (  48177 available, 63.2% used)
          Flash code:  445143 bytes
       Flash rodata:   89740 bytes
    Total image size:~ 631978 bytes (.bin may be padded larger)
    Per-archive contributions to ELF file:
                Archive File DRAM .data & .bss   IRAM Flash code & rodata   Total
             libnet80211.a        975   9186  12368     118246    23521  164296
                   liblwip.a         21   3990      0      69148    17784   90943
                   libpp.a       1317   5379  23949      38447     5100   74192
                      libc.a        364      0      0      55299     3827   59490
       libwpa_supplicant.a          8    796      0      37524     7152   45480
             libmbedcrypto.a         64     29     30      39762     4196   44081
                   libphy.a       1604    929   6491      30370        0   39394
             libfreertos.a       4140    776  13111          0     1861   19888
                libesp32.a       1945    114   5993       4651     2947   15650
             libnvs_flash.a          0     24      0      10925     3131   14080
                   libsoc.a        132      4   5881       1329     1677    9023
             libspi_flash.a        777    294   5584       1070     1124    8849
             libesp_common.a         16    210    863       1729     5706    8524
             libesp_wifi.a        400     80    527       3822     2117    6946
                   libgcc.a          4     12    104       5387      872    6379
             libesp_netif.a         12     25      0       3911     2014    5962
                   libvfs.a        308     48      0       4564      673    5593
                   libheap.a        298      4   2531        640      568    4041
                libstdc++.a          8     20      0       2590     1082    3700
             libesp_event.a          0      4      0       2631     1028    3663
                libcoexist.a       1278     28      0       2227        0    3533
                libdriver.a         80     20      0       2571      677    3348
                libnewlib.a        152    272    808        778       88    2098
                   libmain.a          0      8      0        808      787    1603
                libefuse.a         36      4      0        830      683    1553
                libpthread.a         16     12    228        663      504    1423
                   liblog.a          8    272    537        374      165    1356
    libbootloader_support.a          0      0    850        470       16    1336
                   libcore.a          0     29      0        805      302    1136
          libesp_ringbuf.a          0      0    671          0      152     823
             libapp_update.a          0      4     88        131      471     694
                   librtc.a          0      0    480          0        0     480
                   libhal.a          0      0    447          0       32     479
          libtcpip_adapter.a          0     17      0        200        0     217
                libxtensa.a          0      0    173          0        0     173
                      (exe)          0      0      3          3       12      18
                   libcxx.a          0      0      0         11        0      11
                libesp_eth.a          0      0      0          0        0       0
                   libjson.a          0      0      0          0        0       0
                   libmesh.a          0      0      0          0        0       0
    

4.3. https_mbedtls 示例

此部分为编译烧录 https_mbedtls 示例后的 component size 以及 APP Bin 的大小。以下分为优化固件大小前后两部分。

  1. 优化固件大小前
    APP Bin 大小为:

    789K  https-mbedtls.bin
    

    component size 大小为:

    Total sizes:
    DRAM .data size:   15364 bytes
    DRAM .bss  size:   23152 bytes
    Used static DRAM:   38516 bytes (  86064 available, 30.9% used)
    Used static IRAM:   93422 bytes (  37650 available, 71.3% used)
          Flash code:  570271 bytes
       Flash rodata:  128604 bytes
    Total image size:~ 807661 bytes (.bin may be padded larger)
    Per-archive contributions to ELF file:
                Archive File DRAM .data & .bss   IRAM Flash code & rodata   Total
             libnet80211.a        975   9186  12368     118318    23476  164323
                   liblwip.a         21   3992      0      94867    20360  119240
             libmbedcrypto.a         64     81     30      77217    21661   99053
                   libpp.a       1317   5379  23949      38399     5100   74144
                      libc.a        364      0      0      55739     3833   59936
       libwpa_supplicant.a          8    796      0      42074     7696   50574
                libmbedtls.a         60    320      0      35343     7453   43176
                   libphy.a       1604    929   6483      30354        0   39370
             libfreertos.a       4140    776  14480          0     2002   21398
                libesp32.a       2126    114   7041       5257     3662   18200
             libnvs_flash.a          0     24      0      13326     3033   16383
                   libsoc.a        184      4   6736       1509     1940   10373
                libcoexist.a       1981     28   3728       3971      303   10011
             libspi_flash.a        783    294   6179       1179     1380    9815
             libesp_common.a         16    210   1088       1991     6165    9470
             libesp_wifi.a        484     80    671       4852     2682    8769
             libmbedx509.a          0      0      0       7117     1406    8523
             libesp_netif.a         12     25      0       5215     2268    7520
                   libvfs.a        308     48      0       5915     1041    7312
                   libgcc.a          4     12    104       5407      872    6399
                   libmain.a          0      4      0       1650     3591    5245
                   libheap.a        305      4   3234        897      729    5169
             libesp_event.a          0      4      0       2960     1163    4127
                libdriver.a         80     20      0       3213      768    4081
                libstdc++.a          8     20      0       2618     1082    3728
    libprotocol_examples_com          0     36      0       1555     1629    3220
                libnewlib.a        152    272    828        868       88    2208
                libefuse.a         36      4      0       1108      740    1888
                   librtc.a          0      4   1697          0        0    1701
                libpthread.a         16     12    243        783      509    1563
                   liblog.a          8    272    628        438      169    1515
    libbootloader_support.a          0      0   1016        495        0    1511
                   libcore.a          0     29      0        801      302    1132
          libesp_ringbuf.a          0      0    877          0      152    1029
             libapp_update.a          0      4    109        164      474     751
                   libhal.a          0      0    447          0       32     479
          libtcpip_adapter.a          0     17      0        196        0     213
                libxtensa.a          0      0    213          0        0     213
                      (exe)          0      0      3          3       12      18
                   libcxx.a          0      0      0         11        0      11
                libesp_eth.a          0      0      0          0        0       0
                   libjson.a          0      0      0          0        0       0
                   libmesh.a          0      0      0          0        0       0
    
  2. 优化固件大小后
    APP Bin 大小为:

    730K  https-mbedtls.bin
    

    component size 大小为:

    Total sizes:
    DRAM .data size:   15060 bytes
    DRAM .bss  size:   23128 bytes
    Used static DRAM:   38188 bytes (  86392 available, 30.7% used)
    Used static IRAM:   88046 bytes (  43026 available, 67.2% used)
          Flash code:  524307 bytes
       Flash rodata:  118996 bytes
    Total image size:~ 746409 bytes (.bin may be padded larger)
    Per-archive contributions to ELF file:
                Archive File DRAM .data & .bss   IRAM Flash code & rodata   Total
             libnet80211.a        975   9186  12368     118310    23512  164351
             libmbedcrypto.a         64     81     30      70202    31164  101541
                   liblwip.a         21   3992      0      77269    18759  100041
                   libpp.a       1317   5379  23949      38395     5100   74140
                      libc.a        364      0      0      55907     3823   60094
       libwpa_supplicant.a          8    796      0      37372     7152   45328
                   libphy.a       1604    929   6483      30358        0   39374
                libmbedtls.a         60    320      0      29950     7123   37453
             libfreertos.a       4140    776  13162          0     1861   19939
                libesp32.a       1945    114   6021       4659     2959   15698
             libnvs_flash.a          0     24      0      10896     3131   14051
                libcoexist.a       1981     28   3728       3971      303   10011
                   libsoc.a        132      4   5881       1329     1677    9023
             libspi_flash.a        777    294   5584        996     1080    8731
             libesp_common.a         16    210    863       1736     5706    8531
             libmbedx509.a          0      0      0       5990     1310    7300
             libesp_wifi.a        484     80    580       4026     2015    7185
                   libgcc.a          4     12    104       5403      872    6395
             libesp_netif.a         12     25      0       4099     2082    6218
                   libvfs.a        308     48      0       4560      673    5589
                   libheap.a        298      4   2531        640      568    4041
                libstdc++.a          8     20      0       2594     1082    3704
                   libmain.a          0      0      0       1072     2616    3688
             libesp_event.a          0      4      0       2631     1022    3657
                libdriver.a         80     20      0       2639      677    3416
    libprotocol_examples_com          0     32      0       1100     1195    2327
                libnewlib.a        152    272    808        778       88    2098
                   librtc.a          0      4   1701          0        0    1705
                libefuse.a         36      4      0        842      683    1565
                libpthread.a         16     12    228        663      504    1423
                   liblog.a          8    272    537        382      163    1362
    libbootloader_support.a          0      0    850        470       16    1336
                   libcore.a          0     29      0        801      302    1132
          libesp_ringbuf.a          0      0    707          0      152     859
             libapp_update.a          0      4     88        138      471     701
                   libhal.a          0      0    447          0       32     479
          libtcpip_adapter.a          0     17      0        200        0     217
                libxtensa.a          0      0    173          0        0     173
                      (exe)          0      0      3          3       12      18
                   libcxx.a          0      0      0         11        0      11
                libesp_eth.a          0      0      0          0        0       0
                   libjson.a          0      0      0          0        0       0
                   libmesh.a          0      0      0          0        0       0
    

4.4. blufi + https_mbedtls 示例

此部分先合并 blufihttps_mbedtls 示例,然后编译烧录后查看 component size 以及 APP Bin 的大小。以下分为优化固件大小前后两部分。

  1. 优化固件大小前
    APP Bin 大小为:

    1.1M  blufi_demo.bin
    

    component size 大小为:

    Total sizes:
    DRAM .data size:   16316 bytes
    DRAM .bss  size:   43944 bytes
    Used static DRAM:   60260 bytes (  64320 available, 48.4% used)
    Used static IRAM:  115382 bytes (  15690 available, 88.0% used)
          Flash code:  798883 bytes
       Flash rodata:  183852 bytes
    Total image size:~1114433 bytes (.bin may be padded larger)
    Per-archive contributions to ELF file:
                Archive File DRAM .data & .bss   IRAM Flash code & rodata   Total
                   libbt.a        150  18062    438     158115    47797  224562
             libnet80211.a        975   9187  12368     119909    23607  166046
                   liblwip.a         21   3996      0      96432    20360  120809
             libmbedcrypto.a         64     81     30      77194    21661   99030
             libbtdm_app.a        337   2381  20811      59042     4136   86707
                   libpp.a       1317   5379  23941      38411     5100   74148
                      libc.a        364      0      0      55939     3831   60134
       libwpa_supplicant.a          8    796      0      42484     7696   50984
                libmbedtls.a         60    320      0      35371     7453   43204
                   libphy.a       1604    930   6483      30507        0   39524
             libfreertos.a       4140    776  14440          0     2002   21358
                libesp32.a       2126    114   7041       5261     3662   18204
             libnvs_flash.a          0     24      0      13551     3033   16608
                   libmain.a        128    315      0       5223     6194   11860
                libcoexist.a       2280     28   3842       4642      325   11117
                   libsoc.a        184      4   6736       1501     1946   10371
             libspi_flash.a        783    294   6179       1279     1424    9959
             libesp_common.a         16    210   1088       1991     6165    9470
             libesp_wifi.a        484     80    719       5134     2766    9183
             libmbedx509.a          0      0      0       7133     1406    8539
             libesp_netif.a         12     25      0       5219     2268    7524
                   libvfs.a        308     48      0       5915     1047    7318
                   libgcc.a          4     12    104       5403      872    6395
                   libheap.a        313      4   3234       1227      729    5507
             libesp_event.a          0      4      0       2960     1163    4127
                libdriver.a         80     20      0       3213      768    4081
                libstdc++.a          8     20      0       2622     1082    3732
    libprotocol_examples_com          0     36      0       1559     1553    3148
                   librtc.a          0      4   2235          0        0    2239
                libnewlib.a        152    272    828        868       88    2208
                   liblog.a          8    272    628        764      263    1935
                libefuse.a         36      4      0       1120      740    1900
                libpthread.a         16     12    243        783      509    1563
    libbootloader_support.a          0      0   1016        495        0    1511
                   libcore.a          0     29      0        801      302    1132
          libesp_ringbuf.a          0      0    858          0      152    1010
             libapp_update.a          0      4    109        164      474     751
                   libhal.a          0      0    447          0       32     479
          libtcpip_adapter.a          0     17      0        196        0     213
                libxtensa.a          0      0    213          0        0     213
                   libmesh.a          1      1      0         43        0      45
                      (exe)          0      0      3          3       12      18
                   libcxx.a          0      0      0         11        0      11
                libesp_eth.a          0      0      0          0        0       0
                   libjson.a          0      0      0          0        0       0
    
  2. 优化固件大小后
    APP Bin 大小为:

    996K  blufi_demo.bin
    

    component size 大小为:

    Total sizes:
    DRAM .data size:   16028 bytes
    DRAM .bss  size:   43928 bytes
    Used static DRAM:   59956 bytes (  64624 available, 48.1% used)
    Used static IRAM:  109910 bytes (  21162 available, 83.9% used)
          Flash code:  726731 bytes
       Flash rodata:  166308 bytes
    Total image size:~1018977 bytes (.bin may be padded larger)
    Per-archive contributions to ELF file:
                Archive File DRAM .data & .bss   IRAM Flash code & rodata   Total
                   libbt.a        150  18062    364     133665    42179  194420
             libnet80211.a        975   9187  12368     119957    23643  166130
             libmbedcrypto.a         64     81     30      70448    31164  101787
                   liblwip.a         21   3996      0      78496    18759  101272
             libbtdm_app.a        337   2381  20811      59062     4136   86727
                   libpp.a       1317   5379  23941      38443     5100   74180
                      libc.a        364      0      0      55715     3806   59885
       libwpa_supplicant.a          8    796      0      37990     7147   45941
                   libphy.a       1604    930   6483      30519        0   39536
                libmbedtls.a         60    320      0      30010     7123   37513
             libfreertos.a       4140    776  13111          0     1861   19888
                libesp32.a       1945    114   6021       4679     2959   15718
             libnvs_flash.a          0     24      0      11152     3131   14307
                libcoexist.a       2280     28   3842       4642      325   11117
                   libsoc.a        132      4   5881       1325     1677    9019
             libspi_flash.a        777    294   5584       1077     1124    8856
             libesp_common.a         16    210    863       1748     5706    8543
                   libmain.a        128    311      0       3622     4044    8105
             libesp_wifi.a        484     80    628       4230     2117    7539
             libmbedx509.a          0      0      0       5930     1310    7240
                   libgcc.a          4     12    104       5387      872    6379
             libesp_netif.a         12     25      0       4155     2082    6274
                   libvfs.a        308     48      0       4612      673    5641
                   libheap.a        306      4   2531        920      568    4329
                libstdc++.a          8     20      0       2614     1082    3724
             libesp_event.a          0      4      0       2643     1022    3669
                libdriver.a         80     20      0       2639      677    3416
                   librtc.a          0      4   2239          0        0    2243
    libprotocol_examples_com          0     32      0       1068     1125    2225
                libnewlib.a        152    272    808        778       88    2098
                libefuse.a         36      4      0        845      683    1568
                libpthread.a         16     12    228        671      504    1431
                   liblog.a          8    272    537        374      163    1354
    libbootloader_support.a          0      0    850        470       16    1336
                   libcore.a          0     29      0        801      302    1132
          libesp_ringbuf.a          0      0    671          0      152     823
             libapp_update.a          0      4     88        138      471     701
                   libhal.a          0      0    447          0       32     479
          libtcpip_adapter.a          0     17      0        208        0     225
                libxtensa.a          0      0    173          0        0     173
                   libmesh.a          1      1      0         43        0      45
                      (exe)          0      0      3          3       12      18
                   libcxx.a          0      0      0         11        0      11
                libesp_eth.a          0      0      0          0        0       0
                   libjson.a          0      0      0          0        0       0
    

4.5. bleprph + https_mbedtls 示例

此部分先合并 bleprphhttps_mbedtls 示例,然后编译烧录后查看 component size 以及 APP Bin 的大小。以下分为优化固件大小前后两部分。

  1. 优化固件大小前
    APP Bin 大小为:

    1007K  bleprph.bin
    

    component size 大小为:

    Total sizes:
    DRAM .data size:   16200 bytes
    DRAM .bss  size:   40864 bytes
    Used static DRAM:   57064 bytes (  67516 available, 45.8% used)
    Used static IRAM:  119022 bytes (  12050 available, 90.8% used)
          Flash code:  747275 bytes
       Flash rodata:  148112 bytes
    Total image size:~1030609 bytes (.bin may be padded larger)
    Per-archive contributions to ELF file:
                Archive File DRAM .data & .bss   IRAM Flash code & rodata   Total
             libnet80211.a        975   9186  12368     118330    23476  164335
                   liblwip.a         21   3996      0      96312    20360  120689
             libmbedcrypto.a         64     85     30      80490    21765  102434
                   libbt.a        369  15230    438      72648    11570  100255
             libbtdm_app.a        337   2381  20811      59118     4136   86783
                      libc.a        364      0      0      82006     4367   86737
                   libpp.a       1317   5379  23941      38447     5100   74184
       libwpa_supplicant.a          8    796      0      42325     7760   50889
                libmbedtls.a         60    320      0      35705     7453   43538
                   libphy.a       1604    930   6483      30519        0   39536
             libfreertos.a       4140    776  14680          0     2067   21663
                libesp32.a       2126    114   7041       5521     3680   18482
             libnvs_flash.a          0     24      0      13551     3033   16608
                   libsoc.a        184      4   6736       1968     2164   11056
                libcoexist.a       2012     28   3842       4350      325   10557
                   libmain.a         92     14      0       4529     5600   10235
                libdriver.a         80     21      0       8476     1403    9980
             libspi_flash.a        783    294   6179       1283     1424    9963
             libesp_common.a         16    210   1088       2012     6165    9491
             libesp_wifi.a        484     80    719       4980     2682    8945
             libmbedx509.a          0      0      0       7452     1406    8858
             libesp_netif.a         12     25      0       5219     2268    7524
                   libvfs.a        308     48      0       5915     1044    7315
                   libgcc.a          4     12    104       5387      872    6379
                   libheap.a        313      4   3234       1227      729    5507
          libesp_ringbuf.a          0      0   4214          0      532    4746
             libesp_event.a          0      4      0       2960     1163    4127
                libstdc++.a          8     20      0       2614     1082    3724
    libprotocol_examples_com          0     36      0       1559     1629    3224
                   librtc.a          0      4   2235          0        0    2239
                libnewlib.a        152    272    828        868       88    2208
                libefuse.a         36      4      0       1120      740    1900
                libconsole.a          0     24      0       1456      269    1749
                libpthread.a         16     12    243        783      509    1563
                   liblog.a          8    272    628        442      169    1519
    libbootloader_support.a          0      0   1016        495        0    1511
                   libcore.a          0     29      0        801      302    1132
             libapp_update.a          0      4    109        164      474     751
                   libhal.a          0      0    447          0       32     479
          libtcpip_adapter.a          0     17      0        196        0     213
                libxtensa.a          0      0    213          0        0     213
                      (exe)          0      0      3          3       12      18
                   libcxx.a          0      0      0         11        0      11
                libesp_eth.a          0      0      0          0        0       0
                   libjson.a          0      0      0          0        0       0
                   libmesh.a          0      0      0          0        0       0
    
  2. 优化固件大小后
    APP Bin 大小为:

    932K  bleprph.bin
    

    component size 大小为:

    Total sizes:
    DRAM .data size:   15912 bytes
    DRAM .bss  size:   40832 bytes
    Used static DRAM:   56744 bytes (  67836 available, 45.5% used)
    Used static IRAM:  112718 bytes (  18354 available, 86.0% used)
          Flash code:  689015 bytes
       Flash rodata:  136356 bytes
    Total image size:~ 954001 bytes (.bin may be padded larger)
    Per-archive contributions to ELF file:
                Archive File DRAM .data & .bss   IRAM Flash code & rodata   Total
             libnet80211.a        975   9186  12368     118298    23512  164339
             libmbedcrypto.a         64     85     30      73804    31308  105291
                   liblwip.a         21   3996      0      78227    18759  101003
                   libbt.a        369  15230    364      62707    11091   89761
             libbtdm_app.a        337   2381  20811      59174     4136   86839
                      libc.a        364      0      0      82006     4351   86721
                   libpp.a       1317   5379  23941      38459     5100   74196
       libwpa_supplicant.a          8    796      0      37694     7141   45639
                   libphy.a       1604    930   6483      30527        0   39544
                libmbedtls.a         60    320      0      30235     7123   37738
             libfreertos.a       4140    776  13264          0     1903   20083
                libesp32.a       1945    114   6021       4931     2965   15976
             libnvs_flash.a          0     24      0      11152     3131   14307
                libcoexist.a       2012     28   3842       4350      325   10557
                   libsoc.a        132      4   5881       1692     1713    9422
             libspi_flash.a        777    294   5584       1081     1124    8860
             libesp_common.a         16    210    863       1786     5706    8581
                libdriver.a         80     21      0       6885     1108    8094
             libmbedx509.a          0      0      0       6353     1310    7663
                   libmain.a         92     10      0       3356     4086    7544
             libesp_wifi.a        484     80    628       4154     2015    7361
                   libgcc.a          4     12    104       5391      872    6383
             libesp_netif.a         12     25      0       4155     2082    6274
                   libvfs.a        308     48      0       4612      673    5641
                   libheap.a        306      4   2531        920      568    4329
          libesp_ringbuf.a          0      0   3295          0      532    3827
                libstdc++.a          8     20      0       2614     1082    3724
             libesp_event.a          0      4      0       2639     1022    3665
    libprotocol_examples_com          0     32      0       1100     1195    2327
                   librtc.a          0      4   2239          0        0    2243
                libnewlib.a        152    272    808        778       88    2098
                libconsole.a          0     24      0       1228      334    1586
                libefuse.a         36      4      0        845      683    1568
                libpthread.a         16     12    228        671      504    1431
                   liblog.a          8    272    537        374      163    1354
    libbootloader_support.a          0      0    850        470       16    1336
                   libcore.a          0     29      0        801      302    1132
             libapp_update.a          0      4     88        134      471     697
                   libhal.a          0      0    447          0       32     479
          libtcpip_adapter.a          0     17      0        208        0     225
                libxtensa.a          0      0    173          0        0     173
                      (exe)          0      0      3          3       12      18
                   libcxx.a          0      0      0         11        0      11
                libesp_eth.a          0      0      0          0        0       0
                   libjson.a          0      0      0          0        0       0
                   libmesh.a          0      0      0          0        0       0
    

五. 总结

经过上述测试后,我们可以观察得到:

  • ESP32 只使用基本功能(如 hello_world 示例)时的 APP Bin 大小为 150 k 左右。
  • ESP32 使用基本功能 + Wi-Fi 功能(如 station 示例)时的 APP Bin 大小为 660 k 左右。
  • ESP32 使用基本功能 + Wi-Fi 进阶功能(如 https_mbedtls 示例)时的 APP Bin 大小为 790 k 左右。
  • ESP32 使用基本功能 + Wi-Fi 进阶功能 + BLE 功能(如 blufi + https_mbedtls 示例)时的 APP Bin 大小为 1.1 M 左右。
  • ESP32 使用基本功能 + Wi-Fi 进阶功能 + NIMBLE 功能(如 bleprph + https_mbedtls 示例)时的 APP Bin 大小为 1.0 M 左右。
  • 使用 三. 测试过程 里的固件尺寸优化能优化的尺寸大小与固件自身大小有关,如 hello_world 的 APP 固件在优化后只减少了 10 k 左右,而 blufi + https_mbedtls 的 APP 固件在优化后能减少 100 k 以上。
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值