Line data Source code
1 1 : /**
2 : * @file debug/stack.h
3 : * Stack usage analysis helpers
4 : */
5 :
6 : /*
7 : * Copyright (c) 2015 Intel Corporation
8 : *
9 : * SPDX-License-Identifier: Apache-2.0
10 : */
11 :
12 : #ifndef ZEPHYR_INCLUDE_DEBUG_STACK_H_
13 : #define ZEPHYR_INCLUDE_DEBUG_STACK_H_
14 :
15 : #include <zephyr/logging/log.h>
16 : #include <zephyr/toolchain.h>
17 : #include <stdbool.h>
18 :
19 0 : static inline void log_stack_usage(const struct k_thread *thread)
20 : {
21 : #if defined(CONFIG_INIT_STACKS) && defined(CONFIG_THREAD_STACK_INFO)
22 : size_t unused, size = thread->stack_info.size;
23 :
24 : TOOLCHAIN_DISABLE_WARNING(TOOLCHAIN_WARNING_SHADOW);
25 : LOG_MODULE_DECLARE(os, CONFIG_KERNEL_LOG_LEVEL);
26 : TOOLCHAIN_ENABLE_WARNING(TOOLCHAIN_WARNING_SHADOW);
27 :
28 : if (k_thread_stack_space_get(thread, &unused) == 0) {
29 : unsigned int pcnt = ((size - unused) * 100U) / size;
30 : const char *tname;
31 :
32 : tname = k_thread_name_get((k_tid_t)thread);
33 : if (tname == NULL) {
34 : tname = "unknown";
35 : }
36 :
37 : LOG_INF("%p (%s):\tunused %zu\tusage %zu / %zu (%u %%)",
38 : thread, tname, unused, size - unused, size,
39 : pcnt);
40 : }
41 : #else
42 : ARG_UNUSED(thread);
43 : #endif
44 : }
45 : #endif /* ZEPHYR_INCLUDE_DEBUG_STACK_H_ */
|