# 如何配置PMU？

**URL:** <https://forum.amebaiot.com/t/pmu/594>\
**Category:** SDK\
**Tags:** rtl872xd\
**Created:** [June 8, 2021, 9:01am UTC](https://forum.amebaiot.com/t/pmu/594 "2021-06-08T09:01:03Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![zlbb112](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.amebaiot.com/zlbb112/32/354_2.png) [@zlbb112](https://forum.amebaiot.com/u/zlbb112)\
**Post date:** [June 8, 2021, 9:01am UTC](https://forum.amebaiot.com/t/pmu/594/1 "2021-06-08T09:01:03Z")

</div>

前段时间通过大家的帮助，完成了上AWS云的测试，现在想尝试使用蓝牙控制模块发送数据到云  
但是发现一启用蓝牙功能，mbedtls就无法申请到足够的空间，导致无法继续运行，查看资料，RTL8720DN的大核片上SRAM足足高达512k，不应该会出现这样的情况才对

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

开始尝试确认当前剩余堆栈大小，将应用程序全部注释，开启一个线程来周期查询当前剩余堆栈大小，通过API **rtw\_getFreeHeapSize()** 获取得到的值为 **236768** ，计算了一下剩余大约 **231kb** 的内存可支配，跟手册上的完全看上去并不符合  
 ![image](https://us1.discourse-cdn.com/flex016/uploads/ameba/original/1X/afe05892d960e419f212085ead1e5ebb1f99e74c.png)

 ![image](https://us1.discourse-cdn.com/flex016/uploads/ameba/original/1X/2e7add8125a3dd2cc9482b2888f828680c3d35c4.jpeg)

手册上说可以通过PMU，电源控制管理单元来配置SRAM，但是不知该如何配置，希望能得到帮助，谢谢

下面是我上电后运行的代码

```auto
void debug_init(void)

{

	if (!(xTaskCreate(km4_debug_task, "km4_debug_task", 1024, NULL, TaskCreate_Level_Debug, NULL)))

	{

		CTR_IOT_ERROR("%s xTaskCreate fail", __func__ );

	}

}

VOID app_pmu_init(VOID)

{

	if (BKUP_Read(BKUP_REG0) & BIT_SW_SIM_RSVD)

	{

		return;

	}

	// pmu_set_sleep_type(SLEEP_PG);

	pmu_set_sleep_type(SLEEP_CG);

	/* if wake from deepsleep, that means we have released wakelock last time */

	//if (SOCPS_DsleepWakeStatusGet() == TRUE) {

	//	pmu_set_sysactive_time(2);

	//	pmu_release_wakelock(PMU_OS);

	//	pmu_tickless_debug(ENABLE);

	//}

}

//default main

int main(void)

{

	SystemSetCpuClk(CLK_KM4_200M);

	if (wifi_config.wifi_ultra_low_power &&

		wifi_config.wifi_app_ctrl_tdma == FALSE)

	{

		SystemSetCpuClk(CLK_KM4_100M);

		CTR_IOT_WARN("SystemSetCpuClk CLK_KM4_100M");

	}

	InterruptRegister(IPC_INTHandler, IPC_IRQ, (u32)IPCM0_DEV, 5);

	InterruptEn(IPC_IRQ, 5);

#ifdef CONFIG_MBED_TLS_ENABLED

	app_mbedtls_rom_init();

#endif

	//app_init_debug();

	/* init console */

	shell_recv_all_data_onetime = 1;

	shell_init_rom(0, 0);

	shell_init_ram();

	ipc_table_init();

	/* Register Log Uart Callback function */

	InterruptRegister((IRQ_FUN)shell_uart_irq_rom, UART_LOG_IRQ, (u32)NULL, 5);

	InterruptEn(UART_LOG_IRQ, 5);

	if (TRUE == SOCPS_DsleepWakeStatusGet())

	{

		app_dslp_wake();

	}
#ifdef CONFIG_FTL_ENABLED

	app_ftl_init();

#endif

#if defined(CONFIG_WIFI_NORMAL) && defined(CONFIG_NETWORK)

	rtw_efuse_boot_write();

	/* pre-processor of application example */

	// pre_example_entry();

	// wlan_network();

	/* Execute application example */

	// example_entry();

#endif

#if defined(CONFIG_EQC) && CONFIG_EQC

	//EQC_test_entry();

#endif

	app_start_autoicg();

	// app_shared_btmem(ENABLE);

	app_pmu_init();

	if ((BKUP_Read(0) & BIT_KEY_ENABLE))

		app_keyscan_init(FALSE); /* 5uA */

	if ((BKUP_Read(0) & BIT_CAPTOUCH_ENABLE))

		app_captouch_init(); /* 1uA */

	// if ((BKUP_Read(0) & BIT_GPIO_ENABLE))

	// app_hp_jack_init();

	class_variable_event_group = xEventGroupCreate();

	app_init_debug();

	// ctr_timer_init();

	// ctr_gpio_init();

	// app_wifi_init();

	// // app_ble_init();

	// main_user_loop();

	debug_init();

	//DBG_8195A("M4U:%d \n", RTIM_GetCount(TIMM05));

	/* Enable Schedule, Start Kernel */

	vTaskStartScheduler();

}

```

---

<div class="post-metadata">

**Author:** ![xidameng](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.amebaiot.com/xidameng/32/18_2.png) [@xidameng](https://forum.amebaiot.com/u/xidameng)\
**Post date:** [June 8, 2021, 9:20am UTC](https://forum.amebaiot.com/t/pmu/594/2 "2021-06-08T09:20:21Z")

</div>

> [@zlbb112](#):
>
> 查看资料

问题非常详尽，赞一个先👍

如你所说，你分享的资料截图区域第一部分就提到了，512SRAM被切为两块，因此每块最大256KB，这是为了方便CPU和DMA同时存取SRAM

---

<div class="post-metadata">

**Author:** ![zlbb112](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.amebaiot.com/zlbb112/32/354_2.png) [@zlbb112](https://forum.amebaiot.com/u/zlbb112)\
**Post date:** [June 8, 2021, 12:07pm UTC](https://forum.amebaiot.com/t/pmu/594/3 "2021-06-08T12:07:22Z")

</div>

有办法可以在不增加额外的SRAM外，节省片上RAM的空间嘛 😂

---

<div class="post-metadata">

**Author:** ![zlbb112](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.amebaiot.com/zlbb112/32/354_2.png) [@zlbb112](https://forum.amebaiot.com/u/zlbb112)\
**Post date:** [June 8, 2021, 12:08pm UTC](https://forum.amebaiot.com/t/pmu/594/4 "2021-06-08T12:08:41Z")

</div>

剩余堆栈太小已不能够正常申请足够的内存来使用了

 ![image](https://us1.discourse-cdn.com/flex016/uploads/ameba/original/1X/78a5df2bc461626059695ecdf378a92562e1abef.png)

---

<div class="post-metadata">

**Author:** ![xidameng](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.amebaiot.com/xidameng/32/18_2.png) [@xidameng](https://forum.amebaiot.com/u/xidameng)\
**Post date:** [June 9, 2021, 10:18am UTC](https://forum.amebaiot.com/t/pmu/594/5 "2021-06-09T10:18:24Z")

</div>

查了一下application note，发现MK4是能用456KB 连续的SRAM的，不知道你的程序做了什么，吃掉这么多RAM。。。  
但是也可以用编译之后产生的map文件来分析一下你的程序的RAM使用情况，或者看一下linker文件，看看是不是SRAM的分区被刻意改小了

---

<div class="post-metadata">

**Author:** ![zlbb112](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.amebaiot.com/zlbb112/32/354_2.png) [@zlbb112](https://forum.amebaiot.com/u/zlbb112)\
**Post date:** [June 10, 2021, 5:37am UTC](https://forum.amebaiot.com/t/pmu/594/6 "2021-06-10T05:37:56Z")

</div>

谢谢您的帮助与建议，我前段时间已经尝试注释一些没有必要的功能宏，并关掉并减少其它线程的stack，来成功同时使用wifi+蓝牙+mbedtls同时工作，但是仅剩下23K的RAM可供使用  
今天晚些时候我会开始找一下，就算什么应用都不增加导致剩余RAM仅剩下 **231KB** 的原因，这样我就可以在这的基础上做更多的功能啦，再次感谢您

---

<div class="post-metadata">

**Author:** ![xidameng](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.amebaiot.com/xidameng/32/18_2.png) [@xidameng](https://forum.amebaiot.com/u/xidameng)\
**Post date:** [June 10, 2021, 10:41am UTC](https://forum.amebaiot.com/t/pmu/594/7 "2021-06-10T10:41:32Z")

</div>

沒問題，加油💪 期待你的好消息！

---

<div class="post-metadata">

**Author:** ![zlbb112](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.amebaiot.com/zlbb112/32/354_2.png) [@zlbb112](https://forum.amebaiot.com/u/zlbb112)\
**Post date:** [June 14, 2021, 2:00am UTC](https://forum.amebaiot.com/t/pmu/594/8 "2021-06-14T02:00:26Z")

</div>

祝大家端午安康！！！  
放假在家花了时间研究了一下RAM的占用，通过查看编译生成的".map"文件，如果我没理解错的话，SDK编译后使用的RAM地址为0x10005000—\>0x10032ce0,大约占用了183K的RAM，实际可用的RAM为0x10005000—\>0x10079ce0，大约为467K的RAM,即当前剩余可用RAM为284KB那就跟之前测试时仅剩可用231K的RAM不太相符。

 ![image](https://us1.discourse-cdn.com/flex016/uploads/ameba/original/1X/36b864c0fad405bb2d1cc77c83809688434b1464.png)  
 ![image](https://us1.discourse-cdn.com/flex016/uploads/ameba/original/1X/67e5d3584363785f0ac72e26cdba1860b83bf446.png)  
 ![image](https://us1.discourse-cdn.com/flex016/uploads/ameba/original/1X/77ba050af627d1f01013beae31b9c5bfb7738801.png)  
 ![image](https://us1.discourse-cdn.com/flex016/uploads/ameba/original/1X/11157eeb2ee30718e6c461fbb33442ac28757489.png)

开始查找丢失RAM的原因，在“inc\_hp/FreeRTOSConfig.h”发现了 **configTOTAL\_HEAP\_SIZE** 的定义

 ![image](https://us1.discourse-cdn.com/flex016/uploads/ameba/original/1X/c825ce66aed72691988628f00877d054f58c16cb.png)  
，修改默认配置为250KB为280KB，测试剩余可用的RAM变多了 😬 😃

---

<div class="post-metadata">

**Author:** ![zlbb112](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.amebaiot.com/zlbb112/32/354_2.png) [@zlbb112](https://forum.amebaiot.com/u/zlbb112)\
**Post date:** [June 14, 2021, 2:03am UTC](https://forum.amebaiot.com/t/pmu/594/9 "2021-06-14T02:03:43Z")

</div>

虽然确认了RAM的分布，但实际上可用RAM的大小并没有大幅实际提升，还是担心应用程序不够用 😅

---

<div class="post-metadata">

**Author:** ![xidameng](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.amebaiot.com/xidameng/32/18_2.png) [@xidameng](https://forum.amebaiot.com/u/xidameng)\
**Post date:** [June 16, 2021, 2:59am UTC](https://forum.amebaiot.com/t/pmu/594/10 "2021-06-16T02:59:28Z")

</div>

哈哈，謝謝反饋！

如果還是擔心RAM不夠的話，可以考慮RTL8721DM/RTL8722DM, 會有2MB的PSRAM，絕對夠用了~

---

<div class="post-metadata">

**Author:** ![zlbb112](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.amebaiot.com/zlbb112/32/354_2.png) [@zlbb112](https://forum.amebaiot.com/u/zlbb112)\
**Post date:** [June 17, 2021, 12:46am UTC](https://forum.amebaiot.com/t/pmu/594/11 "2021-06-17T00:46:09Z")

</div>

暂时不考虑换模块啦，我再想想办法 看能不能从程序上优化优化

---

<div class="post-metadata">

**Author:** ![xidameng](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.amebaiot.com/xidameng/32/18_2.png) [@xidameng](https://forum.amebaiot.com/u/xidameng)\
**Post date:** [June 17, 2021, 9:00am UTC](https://forum.amebaiot.com/t/pmu/594/12 "2021-06-17T09:00:13Z")

</div>

一定可以的，加油:muscle: 💪 💪
