1 /*
2  * Copyright (c) 2006-2021, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  * 2012-12-05     Bernard      the first version
9  */
10 
11 #include <rthw.h>
12 #include <rtthread.h>
13 #include "ft_cpu.h"
14 #include "ft_generic_timer.h"
15 
16 #include <board.h>
17 
18 #ifdef RT_USING_SMP
19 
20 struct rt_thread test_core[RT_CPUS_NR];
21 static char *core_thread_name[RT_CPUS_NR] = {
22     "core0_test",
23     "core1_test",
24     "core2_test",
25     "core3_test"};
26 static rt_uint8_t core_stack[RT_CPUS_NR][1024];
27 
demo_core_thread(void * parameter)28 static void demo_core_thread(void *parameter)
29 {
30     rt_base_t level;
31     while (1)
32     {
33         /* code */
34         level = rt_cpus_lock();
35         rt_kprintf("Hi, core%d \r\n", FCpu_IdGet());
36         rt_cpus_unlock(level);
37         rt_thread_mdelay(20000);
38     }
39 }
40 
demo_core(void)41 void demo_core(void)
42 {
43     rt_ubase_t i;
44     rt_uint8_t cpu_id = 0;
45     for (i = 0; i < RT_CPUS_NR; i++)
46     {
47         cpu_id = i;
48         rt_thread_init(&test_core[i],
49                        core_thread_name[i],
50                        demo_core_thread,
51                        RT_NULL,
52                        &core_stack[i],
53                        1024,
54                        20,
55                        32);
56 
57         rt_thread_control(&test_core[i], RT_THREAD_CTRL_BIND_CPU, (void *)cpu_id);
58         rt_thread_startup(&test_core[i]);
59     }
60 }
61 #endif
62 
main(void)63 int main(void)
64 {
65 #ifdef RT_USING_SMP
66     demo_core();
67 #endif
68     return RT_EOK;
69 }
70