From 655beb3bda6df14368aac83a0614684ce5f7d5c5 Mon Sep 17 00:00:00 2001 From: tangyuxin <462747508@qq.com> Date: Mon, 19 Sep 2022 18:02:25 +0800 Subject: [PATCH] [memheap] Fix the Oz optimization problem of AC6 compiler --- src/memheap.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/memheap.c b/src/memheap.c index 71e43580f4..85f4899116 100644 --- a/src/memheap.c +++ b/src/memheap.c @@ -38,7 +38,7 @@ #define MEMITEM_SIZE(item) ((rt_ubase_t)item->next - (rt_ubase_t)item - RT_MEMHEAP_SIZE) #define MEMITEM(ptr) (struct rt_memheap_item*)((rt_uint8_t*)ptr - RT_MEMHEAP_SIZE) -static void _remove_next_ptr(struct rt_memheap_item *next_ptr) +static void _remove_next_ptr(volatile struct rt_memheap_item *next_ptr) { /* Fix the crash problem after opening Oz optimization on ac6 */ /* Fix IAR compiler warning */ @@ -392,7 +392,7 @@ void *rt_memheap_realloc(struct rt_memheap *heap, void *ptr, rt_size_t newsize) if (newsize > oldsize) { void *new_ptr; - struct rt_memheap_item *next_ptr; + volatile struct rt_memheap_item *next_ptr; if (heap->locked == RT_FALSE) { @@ -980,6 +980,8 @@ int memheaptrace(int argc, char *argv[]) rt_kprintf("%5d", block_size); else if (block_size < 1024 * 1024) rt_kprintf("%4dK", block_size / 1024); + else if (block_size < 1024 * 1024 * 100) + rt_kprintf("%2d.%dM", block_size / (1024 * 1024), (block_size % (1024 * 1024) * 10) / (1024 * 1024)); else rt_kprintf("%4dM", block_size / (1024 * 1024)); /* dump thread name */ -- GitLab