mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2025-12-27 09:38:24 +00:00
Add smp support to RT-Thread 4.0
This commit is contained in:
@@ -26,6 +26,9 @@
|
||||
* 2018-09-14 Bernard apply Apache License v2.0 to RT-Thread Kernel
|
||||
* 2018-10-13 Bernard change version number to v4.0.0
|
||||
* 2018-10-02 Bernard add 64bit arch support
|
||||
* 2018-11-22 Jesven add smp member to struct rt_thread
|
||||
* add struct rt_cpu
|
||||
* add smp relevant macros
|
||||
*/
|
||||
|
||||
#ifndef __RT_DEF_H__
|
||||
@@ -130,11 +133,11 @@ typedef rt_base_t rt_off_t; /**< Type for offset */
|
||||
#include <stdarg.h>
|
||||
#else
|
||||
/* the version of GNU GCC must be greater than 4.x */
|
||||
typedef __builtin_va_list __gnuc_va_list;
|
||||
typedef __gnuc_va_list va_list;
|
||||
#define va_start(v,l) __builtin_va_start(v,l)
|
||||
#define va_end(v) __builtin_va_end(v)
|
||||
#define va_arg(v,l) __builtin_va_arg(v,l)
|
||||
typedef __builtin_va_list __gnuc_va_list;
|
||||
typedef __gnuc_va_list va_list;
|
||||
#define va_start(v,l) __builtin_va_start(v,l)
|
||||
#define va_end(v) __builtin_va_end(v)
|
||||
#define va_arg(v,l) __builtin_va_arg(v,l)
|
||||
#endif
|
||||
|
||||
#define SECTION(x) __attribute__((section(x)))
|
||||
@@ -497,6 +500,41 @@ typedef siginfo_t rt_siginfo_t;
|
||||
#define RT_THREAD_CTRL_CLOSE 0x01 /**< Close thread. */
|
||||
#define RT_THREAD_CTRL_CHANGE_PRIORITY 0x02 /**< Change thread priority. */
|
||||
#define RT_THREAD_CTRL_INFO 0x03 /**< Get thread information. */
|
||||
#define RT_THREAD_CTRL_BIND_CPU 0x03 /**< Set thread bind cpu. */
|
||||
|
||||
#ifdef RT_USING_SMP
|
||||
|
||||
#define RT_CPU_DETACHED RT_CPUS_NR /**< The thread not running on cpu. */
|
||||
#define RT_CPU_MASK ((1 << RT_CPUS_NR) - 1) /**< All CPUs mask bit. */
|
||||
|
||||
#ifndef RT_SCHEDULE_IPI_IRQ
|
||||
#define RT_SCHEDULE_IPI_IRQ 0
|
||||
#endif
|
||||
|
||||
/**
|
||||
* CPUs definitions
|
||||
*
|
||||
*/
|
||||
struct rt_cpu
|
||||
{
|
||||
struct rt_thread *current_thread;
|
||||
|
||||
rt_uint16_t irq_nest;
|
||||
rt_uint8_t irq_switch_flag;
|
||||
|
||||
rt_uint8_t current_priority;
|
||||
rt_list_t priority_table[RT_THREAD_PRIORITY_MAX];
|
||||
#if RT_THREAD_PRIORITY_MAX > 32
|
||||
rt_uint32_t priority_group;
|
||||
rt_uint8_t ready_table[32];
|
||||
#else
|
||||
rt_uint32_t priority_group;
|
||||
#endif
|
||||
|
||||
rt_tick_t tick;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Thread structure
|
||||
@@ -527,6 +565,14 @@ struct rt_thread
|
||||
|
||||
rt_uint8_t stat; /**< thread status */
|
||||
|
||||
#ifdef RT_USING_SMP
|
||||
rt_uint8_t bind_cpu; /**< thread is bind to cpu */
|
||||
rt_uint8_t oncpu; /**< process on cpu` */
|
||||
|
||||
rt_uint16_t scheduler_lock_nest; /**< scheduler lock count */
|
||||
rt_uint16_t cpus_lock_nest; /**< cpus lock count */
|
||||
#endif /*RT_USING_SMP*/
|
||||
|
||||
/* priority */
|
||||
rt_uint8_t current_priority; /**< current priority */
|
||||
rt_uint8_t init_priority; /**< initialized priority */
|
||||
|
||||
Reference in New Issue
Block a user