# 編譯LVGL + WIFI 時遇到的問題

**URL:** <https://forum.amebaiot.com/t/lvgl-wifi/2277>\
**Category:** WiFi\
**Tags:** 中文, rtl872xd\
**Created:** [September 29, 2023, 1:29am UTC](https://forum.amebaiot.com/t/lvgl-wifi/2277 "2023-09-29T01:29:47Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Allen54a0](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.amebaiot.com/allen54a0/32/1677_2.png) [@Allen54a0](https://forum.amebaiot.com/u/Allen54a0)\
**Post date:** [September 29, 2023, 1:29am UTC](https://forum.amebaiot.com/t/lvgl-wifi/2277/1 "2023-09-29T01:29:47Z")

</div>

各位大大好，

最近在使用LVGL v8 + WIFI 的聯網運用

LVGL v8 起來的時候Code Size 約 25%  
單獨 WIFI AP 編譯起來約 Code Size 約 34 %

但是兩個加在一起編譯的時候，卻出現下列狀況

```auto
c:/users/allen/appdata/local/arduino15/packages/realtek/tools/ameba_d_asdk_toolchain/1.0.1/bin/../lib/gcc/arm-none-eabi/6.5.0/../../../../arm-none-eabi/bin/ld.exe: C:\Users\allen\AppData\Local\Temp\arduino_build_407547/application.axf section `.ram_heap.data' will not fit in region `BD_RAM_NS'
c:/users/allen/appdata/local/arduino15/packages/realtek/tools/ameba_d_asdk_toolchain/1.0.1/bin/../lib/gcc/arm-none-eabi/6.5.0/../../../../arm-none-eabi/bin/ld.exe: region `BD_RAM_NS' overflowed by 45536 bytes
collect2.exe: error: ld returned 1 exit status

```

是RAM 不夠用嗎?

去看了amebad\_img2\_is\_arduino.ld 之後發現也還是看不懂，所以要上來請教一下各位前輩，感謝。

---

<div class="post-metadata">

**Author:** ![Allen54a0](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.amebaiot.com/allen54a0/32/1677_2.png) [@Allen54a0](https://forum.amebaiot.com/u/Allen54a0)\
**Post date:** [September 29, 2023, 4:18pm UTC](https://forum.amebaiot.com/t/lvgl-wifi/2277/2 "2023-09-29T16:18:58Z")

</div>

![image](https://us1.discourse-cdn.com/flex016/uploads/ameba/original/2X/0/0b5c5249a766179bba874f1c18fa438c2ba57dbb.png)

我爬了一下之前的文，我也不太相信SRAM 會被上數量個 驅動吃光光。

---

<div class="post-metadata">

**Author:** ![yijenlu1971](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.amebaiot.com/yijenlu1971/32/710_2.png) [@yijenlu1971](https://forum.amebaiot.com/u/yijenlu1971)\
**Post date:** [October 2, 2023, 10:49pm UTC](https://forum.amebaiot.com/t/lvgl-wifi/2277/3 "2023-10-02T22:49:28Z")

</div>

以前開發其他板子的經驗，這種 link 錯誤是記憶空間不足導致，可以分析 map 檔案，裡面會有所有函數和變數占用記憶空間的情況。編譯錯誤訊息顯示 .ram\_heap.data 放不進去，看看 heap size 宣告了多少? 處理這類問題，以我個人經驗，提供幾個方向

1. 調整 compile 參數: 最佳化的等級，或者 optimize by Size / Time …
2. 優化自己的程式碼: 移除無用的變數，修改邏輯設計
3. 如果記憶空間僅僅不足一小部分，用上述方式或能度過，另外就是硬體再外掛RAM

---

<div class="post-metadata">

**Author:** ![Allen54a0](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.amebaiot.com/allen54a0/32/1677_2.png) [@Allen54a0](https://forum.amebaiot.com/u/Allen54a0)\
**Post date:** [October 3, 2023, 1:19am UTC](https://forum.amebaiot.com/t/lvgl-wifi/2277/4 "2023-10-03T01:19:48Z")

</div>

感謝您的回覆，看了兩個個別的 MAP 檔發現一些事情

1. 原裝 WIFI lib 很肥大
2. 確實是RAM (SRAM) 不夠

另外這是AMB23在 Arduino環境下的LD File，這樣的宣告是否可以讓使用者直接指到PSRAM 去? 看來還是得做點功課。

```auto
INCLUDE "rom_symbol_ns.txt"

MEMORY
{
	IROM (rx) : ORIGIN = 0x10100000, LENGTH = 0x1010A000 - 0x10100000	/* ROM: 40k */
	IROM_NS (rx) : ORIGIN = 0x1010A000, LENGTH = 0x10140000 - 0x1010A000	/* ROM: 216k */
	DROM_NS (rx) : ORIGIN = 0x101C0000, LENGTH = 0x101D4000 - 0x101C0000	/* ROM: 80k */
	DROM (rx) : ORIGIN = 0x101D4000, LENGTH = 0x101D8000 - 0x101D4000	/* ROM: 16k */
	ROMBSS_RAM_COM (rw) : ORIGIN = 0x10000000, LENGTH = 0x10001000 - 0x10000000	/* ROM BSS COMMON(S & NS both used) RAM: 4K */
	ROMBSS_RAM_NS (rw) : ORIGIN = 0x10001000, LENGTH = 0x10002000 - 0x10001000	/* ROM BSS NS RAM: 4K */
	RSVD_RAM_NS (rw) : ORIGIN = 0x10002000, LENGTH = 0x10004000 - 0x10002000	/* RSVD RAM: 8K */
	MSP_RAM_NS (rw) : ORIGIN = 0x10004000, LENGTH = 0x10005000 - 0x10004000	/* MSP_NS RAM: 4K */

	BD_RAM_NS (rwx) : ORIGIN = 0x10005000, LENGTH = 0x1007C000 - 0x10005000	/* MAIN RAM NS: 456K */
	ROMBSS_RAM_S (rwx) : ORIGIN = 0x1007C000, LENGTH = 0x1007D000 - 0x1007C000	/* ROM BSS RAM S: 4K */
	BOOTLOADER_RAM_S (rwx) : ORIGIN = 0x1007D000, LENGTH = 0x1007F000 - 0x1007D000	/* BOOT Loader RAM: 8K */
	MSP_RAM_S (rwx) : ORIGIN = 0x1007F000, LENGTH = 0x10080000 - 0x1007F000	/* MSP_S RAM: 4k */
	EXTENTION_SRAM (rwx) : ORIGIN = 0x100E0000, LENGTH = 0x10100000 - 0x100E0000	/* EXTENTION SRAM: 128k */

	PSRAM_NS (rwx) : ORIGIN = 0x02000000 + 0x20, LENGTH = 0x02400000 - 0x02000000 - 0x20	/* PSRAM_NS: 4M */

	/* Flash */
	KM0_BOOT (rx) : ORIGIN = 0x08000000+0x20, LENGTH = 0x02000-0x20	/* XIPBOOT: 8k, 32 Bytes resvd for header*/
	BACKUP (r) : ORIGIN = 0x08002000, LENGTH = 0x1000	/* BACKUP: 4K system data in flash */
	XIPSYS (r) : ORIGIN = 0x08003000, LENGTH = 0x1000	/* XIPSYS: 4K system data in flash */
	KM4_BOOT (rx) : ORIGIN = 0x08004000+0x20, LENGTH = 0x02000-0x20	/* XIPBOOT: 8k, 32 Bytes resvd for header*/
	KM0_IMG2 (rx) : ORIGIN = 0x0C000000+0x20, LENGTH = 0x02000000-0x20	/* KM0_IMG2: 32MB, 32 Bytes resvd for header, virtual address */
	KM4_IMG2 (rx) : ORIGIN = 0x0E000000+0x20, LENGTH = 0x02000000-0x20	/* KM4_IMG2 OTA1: 32MB, 32 Bytes resvd for header, virtual address */
	BTRACE (rx) : ORIGIN = 0x00800000, LENGTH = 0x00C00000 -0x00800000	/* Bluetooth Trace */

	/* KM0 RAM*/
	KM0_SRAM (rwx) : ORIGIN = 0x00080000, LENGTH = 0x00090000 - 0x00080000	/* KM0 SRAM: 64k */
	RETENTION_RAM (rwx) : ORIGIN = 0x000C0000, LENGTH = 0x000C0400 - 0x000C0000	/* KM0 Retention SRAM: 1k */
}

```

目前想法是看看有沒有辦法把LVGL 的RAM 定址到PSRAM 那邊去，應該還有很多地方要努力。

---

<div class="post-metadata">

**Author:** ![Allen54a0](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.amebaiot.com/allen54a0/32/1677_2.png) [@Allen54a0](https://forum.amebaiot.com/u/Allen54a0)\
**Post date:** [November 3, 2023, 3:58am UTC](https://forum.amebaiot.com/t/lvgl-wifi/2277/5 "2023-11-03T03:58:13Z")

</div>

因為要在LVGL V8 環境下使用Wifi ，如果沒有特別的設定編譯的時候RAM 就會報掉，所以目前的作法是把AMB23 的 PSRAM 打開來用
