Commit 4bd7e0bc authored by Jordan Yates's avatar Jordan Yates Committed by Benjamin Cabé
Browse files

samples: sys_heap: extend with `k_heap_array_get`



Extend the sample with a demonstration of `k_heap_array_get`.

Signed-off-by: default avatarJordan Yates <jordan@embeint.com>
parent f11bddbf
Loading
Loading
Loading
Loading
+11 −6
Original line number Diff line number Diff line
@@ -39,3 +39,8 @@ Sample Output
   allocated 156, free 36, max allocated 156, heap size 256
   allocated 100, free 92, max allocated 156, heap size 256
   allocated 0, free 196, max allocated 156, heap size 256
   1 static heap(s) allocated:
         0 - address 0x80552a8 allocated 12, free 180, max allocated 12, heap size 256
   2 heap(s) allocated (including static):
         0 - address 0x80552a8 allocated 12, free 180, max allocated 12, heap size 256
         1 - address 0x805530c allocated 0, free 196, max allocated 156, heap size 256
+29 −4
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@ static char heap_mem[HEAP_SIZE];
static struct sys_heap heap;

static void print_sys_memory_stats(struct sys_heap *);
static void print_static_heaps(void);
static void print_all_heaps(void);

int main(void)
@@ -35,7 +36,17 @@ int main(void)
	sys_heap_free(&heap, p);
	print_sys_memory_stats(&heap);

	/* Allocate from our custom k_heap to make the output
	 * more interesting and prevent compiler optimisations from
	 * discarding it.
	 */
	p = k_heap_alloc(&my_kernel_heap, 10, K_FOREVER);

	print_static_heaps();
	print_all_heaps();

	/* Cleanup memory */
	k_heap_free(&my_kernel_heap, p);
	return 0;
}

@@ -50,16 +61,30 @@ static void print_sys_memory_stats(struct sys_heap *hp)
		stats.max_allocated_bytes, HEAP_SIZE);
}

static void print_static_heaps(void)
{
	struct k_heap *ha;
	int n;

	n = k_heap_array_get(&ha);
	printk("%d static heap(s) allocated:\n", n);

	for (int i = 0; i < n; i++) {
		printk("\t%d - address %p ", i, &ha[i]);
		print_sys_memory_stats(&ha[i].heap);
	}
}

static void print_all_heaps(void)
{
	struct sys_heap **ha;
	size_t i, n;
	int n;

	n = sys_heap_array_get(&ha);
	printk("There are %zu heaps allocated:\n", n);
	printk("%d heap(s) allocated (including static):\n", n);

	for (i = 0; i < n; i++) {
		printk("\t%zu - address %p ", i, ha[i]);
	for (int i = 0; i < n; i++) {
		printk("\t%d - address %p ", i, ha[i]);
		print_sys_memory_stats(ha[i]);
	}
}