GCC Code Coverage Report


Directory: kernel/
File: kernel/src/init.c
Date: 2024-01-01 16:15:14
Exec Total Coverage
Lines: 33 36 91.7%
Functions: 5 6 83.3%
Branches: 6 6 100.0%

Line Branch Exec Source
1 /*
2 * Copyright (c) 2022-2023, The Puppy RTOS Authors
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7 #include <puppy.h>
8 #include <puppy/kobj.h>
9
10 #define KLOG_TAG "init"
11 #define KLOG_LVL KLOG_WARNING
12 #include <puppy/klog.h>
13
14 static struct _thread_obj _idle[P_CPU_NR];
15 p_align(P_ALIGN_SIZE)
16 static uint8_t _idle_thread_stack[P_CPU_NR][P_IDLE_THREAD_STACK_SIZE];
17
18
19 4 static void idle_thread_entry(void *parm)
20 {
21 4 uint8_t cpu_id = p_cpu_self_id();
22 while(1)
23 {
24
2/2
✓ Branch 2 taken 11 times.
✓ Branch 3 taken 2341 times.
2353 if (!p_list_is_empty(&p_cpu_index(cpu_id)->dead_queue))
25 {
26 11 p_thread_dead_clean();
27 }
28 else
29 {
30 2341 __asm("wfi");
31 }
32 }
33 }
34
35 const P_SECTION_START_DEFINE(P_INIT_SECTION, _init_start);
36 const P_SECTION_END_DEFINE(P_INIT_SECTION, _init_end);
37 1 static void _init_fn_run(void)
38 {
39 struct p_ex_fn *ptr_begin, *ptr_end;
40 volatile struct p_ex_fn *init_fn;
41 1 ptr_begin = (struct p_ex_fn *)P_SECTION_START_ADDR(_init_start);
42 1 ptr_end = (struct p_ex_fn *)P_SECTION_END_ADDR(_init_end);
43
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 1 times.
3 for (init_fn = ptr_begin; init_fn < ptr_end;)
44 {
45 KLOG_D("init [%s] init...", init_fn->name);
46 2 (init_fn ++)->func();
47 }
48 1 }
49
50 1 void p_show_version(void)
51 {
52 1 printk("\n\nBuild Time: %s %s\n", __DATE__, __TIME__);
53 1 printk(" _ \n");
54 1 printk(" ____ ____ _____ (_) _ __\n");
55 1 printk(" / __ \\ / __ \\ / ___/ / / | |/_/\n");
56 1 printk(" / /_/ // /_/ / (__ ) / / > < \n");
57 1 printk(" / .___/ \\____/ /____/ /_/ /_/|_| \n");
58 1 printk("/_/ Powered dy puppy-rtos\n");
59 1 }
60
61 p_weak void p_subcpu_start(void)
62 {
63 ;
64 }
65
66 1 void puppy_init(void)
67 {
68 1 puppy_board_init();
69 1 p_cpu_init();
70 1 p_show_version();
71 1 _init_fn_run();
72
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 1 times.
5 for (uint8_t i = 0; i < P_CPU_NR; i++)
73 {
74 4 p_thread_init(&_idle[i], "idle", idle_thread_entry, NULL,
75 4 _idle_thread_stack[i], P_IDLE_THREAD_STACK_SIZE,
76 P_THREAD_PRIO_MAX, i);
77 4 p_thread_start(&_idle[i]);
78 }
79 1 p_subcpu_start();
80 1 }
81
82 4 void puppy_start(void)
83 {
84 4 p_sched_unlock();
85 }
86