Browse Source

update:luavm独立ram空间,luavmram消耗减少,ram分配向sys倾斜,中断向量移动到ram,加快中断响应

alienwalker 4 years ago
parent
commit
22ba22f478

+ 0 - 2
application/include/luat_conf_bsp.h

@@ -162,9 +162,7 @@ extern unsigned int gLVFlashTime;
 #define LV_USE_PERF_MONITOR     1
 #define __LVGL_SLEEP_ENABLE__
 
-#ifdef __LUATOS_SMALL_RAM__
 #define LUAT_USE_MEMORY_OPTIMIZATION_CODE_MMAP
-#endif
 
 #ifndef __DEBUG__
 #undef LV_USE_PERF_MONITOR

+ 2 - 1
application/src/luat_base_air105.c

@@ -201,6 +201,7 @@ static const luaL_Reg loadedlibs[] = {
   {NULL, NULL}
 };
 
+
 void luat_lvgl_tick_sleep(uint8_t OnOff);
 // 按不同的rtconfig加载不同的库函数
 void luat_openlibs(lua_State *L) {
@@ -277,7 +278,7 @@ void luat_base_init(void)
 {
 	luat_gpio_init();
 
-
+	luat_vm_pool_init();
 
 #ifdef LUAT_USE_SHELL
   luat_shell_poweron(0);

+ 17 - 8
application/src/luat_malloc_air105.c

@@ -27,7 +27,7 @@
 #include <string.h>//add for memset
 #include "bget.h"
 #include "luat_malloc.h"
-
+#include "luat_bget.h"
 #define LUAT_LOG_TAG "heap"
 #include "luat_log.h"
 
@@ -35,6 +35,8 @@
 #include "task.h"
 #include "app_interface.h"
 
+static luat_bget_t luavm_pool;
+static uint64_t luavm_pool_data[25 * 1024];
 //------------------------------------------------
 //  管理系统内存
 
@@ -62,7 +64,11 @@ void* luat_heap_calloc(size_t count, size_t _size) {
     return ptr;
 }
 //------------------------------------------------
-
+void luat_vm_pool_init(void)
+{
+	luat_bget_init(&luavm_pool);
+	luat_bpool(&luavm_pool, luavm_pool_data, sizeof(luavm_pool_data));
+}
 //------------------------------------------------
 // ---------- 管理 LuaVM所使用的内存----------------
 void* luat_heap_alloc(void *ud, void *ptr, size_t osize, size_t nsize) {
@@ -88,7 +94,7 @@ void* luat_heap_alloc(void *ud, void *ptr, size_t osize, size_t nsize) {
 //    }
     if (nsize)
     {
-    	void* ptmp = pvPortMalloc(nsize);
+    	void* ptmp = luat_bget(&luavm_pool, nsize);
     	if (ptmp)
     	{
     		if (osize > nsize)
@@ -101,7 +107,7 @@ void* luat_heap_alloc(void *ud, void *ptr, size_t osize, size_t nsize) {
     		}
     		if (((uint32_t)ptr & __SRAM_BASE_ADDR__) == __SRAM_BASE_ADDR__)
     		{
-    			vPortFree(ptr);
+    			luat_brel(&luavm_pool, ptr);
     		}
     		return ptmp;
     	}
@@ -112,15 +118,18 @@ void* luat_heap_alloc(void *ud, void *ptr, size_t osize, size_t nsize) {
     }
 	if (((uint32_t)ptr & __SRAM_BASE_ADDR__) == __SRAM_BASE_ADDR__)
 	{
-		vPortFree(ptr);
+		luat_brel(&luavm_pool, ptr);
 	}
     return NULL;
 }
 
 void luat_meminfo_luavm(size_t *total, size_t *used, size_t *max_used) {
-	*used = configTOTAL_HEAP_SIZE - xPortGetFreeHeapSize();
-	*max_used = configTOTAL_HEAP_SIZE - xPortGetMinimumEverFreeHeapSize();
-    *total = configTOTAL_HEAP_SIZE;
+	long curalloc, totfree, maxfree;
+	unsigned long nget, nrel;
+	luat_bstats(&luavm_pool, &curalloc, &totfree, &maxfree, &nget, &nrel);
+	*used = curalloc;
+	*max_used = luat_bstatsmaxget(&luavm_pool);
+    *total = curalloc + totfree;
 }
 
 void luat_meminfo_sys(size_t *total, size_t *used, size_t *max_used) {

+ 9 - 1
bsp/air105/hal/core_debug.c

@@ -35,7 +35,7 @@
 #define DBG_BUF_SIZE (4090)
 #define DBG_TXBUF_SIZE DBG_BUF_SIZE
 #define DBG_RXBUF_SIZE DBG_BUF_SIZE
-#define DBG_RXBUF_BAND (4)
+#define DBG_RXBUF_BAND (10)
 #endif
 
 typedef struct
@@ -46,7 +46,11 @@ typedef struct
 	CBDataFun_t TxFun;
 	//Loop_Buffer IrqBuffer;
 	uint8_t Data[DBG_BUF_SIZE];
+#ifdef __RUN_IN_RAM__
+	uint8_t CacheData[__FLASH_BLOCK_SIZE__];
+#else
 	uint8_t CacheData[DBG_BUF_SIZE * 2];
+#endif
 	uint8_t RxData[DBG_BUF_SIZE * 2];
 	uint8_t TxBuf[DBG_TXBUF_SIZE];
 	uint8_t RxDMABuf[DBG_RXBUF_BAND][DBG_RXBUF_SIZE + 16];
@@ -661,7 +665,11 @@ static int32_t DBG_DummyRx(void *pData, void *pParam)
 			if (FindEnd)
 			{
 				FindHead = 0;
+#ifdef __RUN_IN_RAM__
+				if (DelLen >= sizeof(prvDBGCtrl.CacheData))
+#else
 				if (DelLen > DBG_BUF_SIZE)
+#endif
 				{
 					DBG("msg too long, %u", DelLen);
 					OS_BufferRemove(RxBuf, DelLen);

+ 6 - 0
bsp/air105/hal/core_flash.c

@@ -20,6 +20,12 @@
  */
 
 #include "bl_inc.h"
+#ifdef __RUN_IN_RAM__
+#define __disable_irq()
+#define __disable_fault_irq()
+#define __enable_fault_irq()
+#define __enable_irq()
+#endif
 
 void __FUNC_IN_RAM__ CACHE_CleanAll(CACHE_TypeDef *Cache)
 {

+ 5 - 0
bsp/air105/hal/core_task.c

@@ -109,6 +109,11 @@ HANDLE Task_Create(TaskFun_t EntryFunction, void *Param, uint32_t StackSize, uin
 	return Handle;
 }
 
+void Task_Exit(void)
+{
+	vTaskDelete(NULL);
+}
+
 void Task_SendEvent(HANDLE TaskHandle, uint32_t ID, uint32_t P1, uint32_t P2, uint32_t P3)
 {
 	if (!TaskHandle) return;

+ 1 - 5
bsp/air105/include/FreeRTOSConfig.h

@@ -83,11 +83,7 @@
 #define configCPU_CLOCK_HZ                (SystemCoreClock)
 #define configTICK_RATE_HZ                ((TickType_t)100)
 #define configMINIMAL_STACK_SIZE          ((uint16_t)512)
-#ifdef __LUATOS__
-#define configTOTAL_HEAP_SIZE             ((size_t)(264 * 1024))
-#else
-#define configTOTAL_HEAP_SIZE             ((size_t)(64 * 1024))
-#endif
+#define configTOTAL_HEAP_SIZE             ((size_t)(32 * 1024))
 #define configMAX_TASK_NAME_LEN           (16)
 #define configUSE_TRACE_FACILITY          0
 #define configUSE_16_BIT_TICKS            0

+ 1 - 0
bsp/air105/include/core_task.h

@@ -37,4 +37,5 @@ HANDLE Task_GetCurrent(void);
 void Task_DelayTick(uint64_t Tick);
 void Task_DelayUS(uint32_t US);
 void Task_DelayMS(uint32_t MS);
+void Task_Exit(void);
 #endif

+ 1 - 1
bsp/air105/include/global_config.h

@@ -40,7 +40,7 @@
 #define __SRAM_BASE_ADDR__ (0x20000000)
 #define __APP_START_MAGIC__ (0x5ae1f0b5)
 #ifndef __BUILD_OS__
-#define __FUNC_IN_RAM__ __attribute__((section (".RamFunc")))
+#define __FUNC_IN_RAM__
 #else
 #define __FUNC_IN_RAM__	__attribute__((section (".RamFunc")))
 #endif

+ 3 - 1
bsp/air105/platform/app_main.c

@@ -56,12 +56,14 @@ static void prvSystemReserCtrl(void)
 }
 void SystemInit(void)
 {
+	memcpy(__SRAM_BASE_ADDR__, (uint32_t)(&__isr_start_address), 1024);
+	SCB->VTOR = __SRAM_BASE_ADDR__;
 #ifdef __USE_XTL__
 	SYSCTRL->FREQ_SEL = 0x20000000 | SYSCTRL_FREQ_SEL_HCLK_DIV_1_2 | (1 << 13) | SYSCTRL_FREQ_SEL_CLOCK_SOURCE_EXT | SYSCTRL_FREQ_SEL_XTAL_192Mhz | SYSCTRL_FREQ_SEL_POWERMODE_CLOSE_CPU_MEM;
 #else
 	SYSCTRL->FREQ_SEL = 0x20000000 | SYSCTRL_FREQ_SEL_HCLK_DIV_1_2 | (1 << 13) | SYSCTRL_FREQ_SEL_CLOCK_SOURCE_INC | SYSCTRL_FREQ_SEL_XTAL_192Mhz | SYSCTRL_FREQ_SEL_POWERMODE_CLOSE_CPU_MEM;;
 #endif
-	SCB->VTOR = (uint32_t)(&__isr_start_address);
+//	SCB->VTOR = (uint32_t)(&__isr_start_address);
 	SYSCTRL->CG_CTRL1 = SYSCTRL_APBPeriph_ALL;
 	SYSCTRL->SOFT_RST1 = SYSCTRL_APBPeriph_ALL;
 	SYSCTRL->PHER_CTRL &= ~BIT(20);

+ 27 - 1
bsp/air105/test/full_ota_test.c

@@ -57,7 +57,8 @@ void OutFlash_Test(void)
 	Head.DataCRC32 = 0xffffffff;
 	for(copyaddr = __FLASH_APP_START_ADDR__; copyaddr < (__FLASH_APP_START_ADDR__ + 1024 * 1024); copyaddr += 65536)
 	{
-		memcpy(DataBuf, copyaddr, 65536);
+		DBG("%x", copyaddr);
+		memcpy(DataBuf, copyaddr, SPI_FLASH_BLOCK_SIZE);
 		if (!flag)
 		{
 			flag = 1;
@@ -140,3 +141,28 @@ void InFlash_Test(void)
 //	crc32[1] = CRC32_Cal(CRC32_Table, __FLASH_APP_START_ADDR__ + 1024 * 1024, 1024 * 1024, 0xffffffff);
 //	DBG("%x,%x,%u",crc32[0], crc32[1], crc32[1] - crc32[0]);
 }
+void prvFOTA_Test(void *p)
+{
+	if (!p)
+	{
+		InFlash_Test();
+	}
+	else
+	{
+		OutFlash_Test();
+	}
+	Task_Exit();
+}
+
+void FOTA_InFlashInit(void)
+{
+	Task_Create(prvFOTA_Test, NULL, 1024, SERVICE_TASK_PRO, "fota task");
+}
+
+void FOTA_OutFlashInit(void)
+{
+	Task_Create(prvFOTA_Test, 1, 1024, SERVICE_TASK_PRO, "fota task");
+}
+
+//INIT_TASK_EXPORT(FOTA_InFlashInit, "3");
+//INIT_TASK_EXPORT(FOTA_OutFlashInit, "3");

+ 3 - 3
bsp/common/src/core_service.c

@@ -575,18 +575,18 @@ void Core_DebugMem(uint8_t HeapID, const char *FuncName, uint32_t Line)
 
 void Core_HWTaskInit(void)
 {
-	prvService.HardwareHandle = Task_Create(prvHW_Task, NULL, 4 * 1024, HW_TASK_PRO, "HW task");
+	prvService.HardwareHandle = Task_Create(prvHW_Task, NULL, 2 * 1024, HW_TASK_PRO, "HW task");
 }
 
 void Core_ServiceInit(void)
 {
-	prvService.ServiceHandle = Task_Create(prvService_Task, NULL, 8 * 1024, SERVICE_TASK_PRO, "Serv task");
+	prvService.ServiceHandle = Task_Create(prvService_Task, NULL, 4 * 1024, SERVICE_TASK_PRO, "Serv task");
 }
 
 void Core_UserTaskInit(void)
 {
 #ifdef __LUATOS__
-	prvService.UserHandle = Task_Create(prvLuatOS_Task, NULL, 16*1024, LUATOS_TASK_PRO, "luatos task");
+	prvService.UserHandle = Task_Create(prvLuatOS_Task, NULL, 8*1024, LUATOS_TASK_PRO, "luatos task");
 	luat_base_init();
 #endif
 }

+ 0 - 10
bsp/common/src/core_usb_app.c

@@ -1086,13 +1086,3 @@ void Core_VHIDUploadStop(uint8_t USB_ID)
 	USB_StackStopDeviceTx(pVHID->USB_ID, pVHID->ToHostEpIndex, 0);
 	USB_StackEpIntOnOff(pVHID->USB_ID, pVHID->ToHostEpIndex, 0, 1);
 }
-
-static void prvUSB_AppTask(void *pParam)
-{
-
-}
-
-void USB_AppTaskInit(void)
-{
-
-}

+ 2 - 2
project/air105/app.ld

@@ -5,14 +5,14 @@ ENTRY(Reset_Handler)
 
 _stext = ORIGIN(FLASH);
 _Min_Heap_Size = 0 ;	/* required amount of heap  */
-_Min_Stack_Size = 0x4000 ;	/* required amount of stack */
+_Min_Stack_Size = 0x2000 ;	/* required amount of stack */
 _estack = ORIGIN(RAM) + _Min_Stack_Size + _Min_Heap_Size;	/* start of "RAM" Ram type memory */
 _sstack = ORIGIN(RAM); /* start of "RAM" Ram type memory */
 __ram_end = ORIGIN(RAM) + LENGTH(RAM);
 /* Memories definition */
 MEMORY
 {
-    RAM    (xrw)    : ORIGIN = 0x20000000,   LENGTH = 640K
+    RAM    (xrw)    : ORIGIN = 0x20000400,   LENGTH = 639K
     FLASH    (rx)    : ORIGIN = 0x1010000,   LENGTH = 2944K
 }