From 8d6aacced3215bf9e56cac218e481da9aa7ad5a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=91=E6=B0=B8=E7=94=9F?= Date: Thu, 25 Mar 2021 10:26:29 +0800 Subject: [PATCH 1/5] 1,fix:MemoryInit:fix the problem of deal the heap address aligned while the length not changed 2,fix:StackMemoryHeapDefines: The stack heap should follow the m_aucSysMem0 instead of LOSCFG_SYS_HEAP_ADDR(the original heap address) --- kernel/include/los_config.h | 2 +- kernel/src/mm/los_memory.c | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/kernel/include/los_config.h b/kernel/include/los_config.h index 04290cde..d8c643a1 100755 --- a/kernel/include/los_config.h +++ b/kernel/include/los_config.h @@ -395,7 +395,7 @@ extern UINT8 *m_aucSysMem0; * Starting address of the task stack */ #ifndef OS_TASK_STACK_ADDR -#define OS_TASK_STACK_ADDR LOSCFG_SYS_HEAP_ADDR +#define OS_TASK_STACK_ADDR (&m_aucSysMem0[0]) #endif /** diff --git a/kernel/src/mm/los_memory.c b/kernel/src/mm/los_memory.c index 69ae3e2a..c5564ac1 100755 --- a/kernel/src/mm/los_memory.c +++ b/kernel/src/mm/los_memory.c @@ -2007,20 +2007,27 @@ VOID LOS_MemUnlockEnable(VOID *pool) UINT32 OsMemSystemInit(VOID) { UINT32 ret; + UINT8 *heapAddr; + UINT32 heapSize; #if (LOSCFG_SYS_EXTERNAL_HEAP == 0) - m_aucSysMem0 = g_memStart; + heapAddr = g_memStart; #else - m_aucSysMem0 = LOSCFG_SYS_HEAP_ADDR; + heapAddr = LOSCFG_SYS_HEAP_ADDR; #endif + heapSize = LOSCFG_SYS_HEAP_SIZE; - if ((UINTPTR)m_aucSysMem0 & (OS_MEM_ALIGN_SIZE - 1)) { - m_aucSysMem0 = (UINT8 *)(((UINTPTR)m_aucSysMem0 + (OS_MEM_ALIGN_SIZE - 1)) & + if ((UINTPTR)heapAddr & (OS_MEM_ALIGN_SIZE - 1)) { + m_aucSysMem0 = (UINT8 *)(((UINTPTR)heapAddr + (OS_MEM_ALIGN_SIZE - 1)) & ~(OS_MEM_ALIGN_SIZE - 1)); + heapSize -= (UINT32)(m_aucSysMem0 - heapAddr); + } + else{ + m_aucSysMem0 = heapAddr; } - ret = LOS_MemInit(m_aucSysMem0, LOSCFG_SYS_HEAP_SIZE); - PRINT_INFO("LiteOS heap memory address:0x%x,size:0x%x\n", m_aucSysMem0, LOSCFG_SYS_HEAP_SIZE); + ret = LOS_MemInit(m_aucSysMem0, heapSize); + PRINT_INFO("LiteOS heap memory address:0x%x,size:0x%x\n", m_aucSysMem0, heapSize); return ret; } -- Gitee From a207ad0fc41e415944dc5e86236c3fe8e9582551 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=91=E6=B0=B8=E7=94=9F?= Date: Thu, 25 Mar 2021 12:15:24 +0800 Subject: [PATCH 2/5] modify:LosMemInit:clean the static check warning --- kernel/src/mm/los_memory.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/src/mm/los_memory.c b/kernel/src/mm/los_memory.c index c5564ac1..494dc3c3 100755 --- a/kernel/src/mm/los_memory.c +++ b/kernel/src/mm/los_memory.c @@ -2022,7 +2022,7 @@ UINT32 OsMemSystemInit(VOID) ~(OS_MEM_ALIGN_SIZE - 1)); heapSize -= (UINT32)(m_aucSysMem0 - heapAddr); } - else{ + else { m_aucSysMem0 = heapAddr; } -- Gitee From cf8ba0b732ddbd59eb5787a28237e148c22620df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=91=E6=B0=B8=E7=94=9F?= Date: Thu, 25 Mar 2021 12:18:49 +0800 Subject: [PATCH 3/5] modify:LosMemInit:clean the static check warning --- kernel/src/mm/los_memory.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/kernel/src/mm/los_memory.c b/kernel/src/mm/los_memory.c index 494dc3c3..c4d1d3c2 100755 --- a/kernel/src/mm/los_memory.c +++ b/kernel/src/mm/los_memory.c @@ -2021,8 +2021,7 @@ UINT32 OsMemSystemInit(VOID) m_aucSysMem0 = (UINT8 *)(((UINTPTR)heapAddr + (OS_MEM_ALIGN_SIZE - 1)) & ~(OS_MEM_ALIGN_SIZE - 1)); heapSize -= (UINT32)(m_aucSysMem0 - heapAddr); - } - else { + } else { m_aucSysMem0 = heapAddr; } -- Gitee From 60ab6f478d3c428005bbb3826525aa45a78e7513 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=91=E6=B0=B8=E7=94=9F?= Date: Tue, 30 Mar 2021 10:22:52 +0800 Subject: [PATCH 4/5] add:LOS_MemInit:add the address and size aligned check, return err and print error info if not aligned. --- kernel/include/los_config.h | 2 +- kernel/src/mm/los_memory.c | 27 +++++++++++---------------- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/kernel/include/los_config.h b/kernel/include/los_config.h index d8c643a1..04290cde 100755 --- a/kernel/include/los_config.h +++ b/kernel/include/los_config.h @@ -395,7 +395,7 @@ extern UINT8 *m_aucSysMem0; * Starting address of the task stack */ #ifndef OS_TASK_STACK_ADDR -#define OS_TASK_STACK_ADDR (&m_aucSysMem0[0]) +#define OS_TASK_STACK_ADDR LOSCFG_SYS_HEAP_ADDR #endif /** diff --git a/kernel/src/mm/los_memory.c b/kernel/src/mm/los_memory.c index c4d1d3c2..2b7b3051 100755 --- a/kernel/src/mm/los_memory.c +++ b/kernel/src/mm/los_memory.c @@ -894,7 +894,13 @@ UINT32 LOS_MemInit(VOID *pool, UINT32 size) return OS_ERROR; } - size = OS_MEM_ALIGN(size, OS_MEM_ALIGN_SIZE); + if (((UINTPTR)pool & (OS_MEM_ALIGN_SIZE - 1)) || \ + (size & (OS_MEM_ALIGN_SIZE - 1))) { + PRINT_ERR("LiteOS heap memory address or size configured not aligned:address:0x%x,size:0x%x, alignsize:%d\n", \ + (UINTPTR)pool, size, OS_MEM_ALIGN_SIZE); + return OS_ERROR; + } + if (OsMemPoolInit(pool, size)) { return OS_ERROR; } @@ -2007,26 +2013,15 @@ VOID LOS_MemUnlockEnable(VOID *pool) UINT32 OsMemSystemInit(VOID) { UINT32 ret; - UINT8 *heapAddr; - UINT32 heapSize; #if (LOSCFG_SYS_EXTERNAL_HEAP == 0) - heapAddr = g_memStart; + m_aucSysMem0 = g_memStart; #else - heapAddr = LOSCFG_SYS_HEAP_ADDR; + m_aucSysMem0 = LOSCFG_SYS_HEAP_ADDR; #endif - heapSize = LOSCFG_SYS_HEAP_SIZE; - - if ((UINTPTR)heapAddr & (OS_MEM_ALIGN_SIZE - 1)) { - m_aucSysMem0 = (UINT8 *)(((UINTPTR)heapAddr + (OS_MEM_ALIGN_SIZE - 1)) & - ~(OS_MEM_ALIGN_SIZE - 1)); - heapSize -= (UINT32)(m_aucSysMem0 - heapAddr); - } else { - m_aucSysMem0 = heapAddr; - } - ret = LOS_MemInit(m_aucSysMem0, heapSize); - PRINT_INFO("LiteOS heap memory address:0x%x,size:0x%x\n", m_aucSysMem0, heapSize); + ret = LOS_MemInit(m_aucSysMem0, LOSCFG_SYS_HEAP_SIZE); + PRINT_INFO("LiteOS heap memory address:0x%x,size:0x%x\n", m_aucSysMem0, LOSCFG_SYS_HEAP_SIZE); return ret; } -- Gitee From cc9aecce432401f4143a1f20c6e4437f6f037f95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=91=E6=B0=B8=E7=94=9F?= Date: Tue, 30 Mar 2021 14:24:54 +0800 Subject: [PATCH 5/5] modify:clean:clean the static check warning --- kernel/src/mm/los_memory.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/src/mm/los_memory.c b/kernel/src/mm/los_memory.c index 2b7b3051..4cf53eb3 100755 --- a/kernel/src/mm/los_memory.c +++ b/kernel/src/mm/los_memory.c @@ -897,7 +897,7 @@ UINT32 LOS_MemInit(VOID *pool, UINT32 size) if (((UINTPTR)pool & (OS_MEM_ALIGN_SIZE - 1)) || \ (size & (OS_MEM_ALIGN_SIZE - 1))) { PRINT_ERR("LiteOS heap memory address or size configured not aligned:address:0x%x,size:0x%x, alignsize:%d\n", \ - (UINTPTR)pool, size, OS_MEM_ALIGN_SIZE); + (UINTPTR)pool, size, OS_MEM_ALIGN_SIZE); return OS_ERROR; } -- Gitee