* @brief This function will return self thread object. * * @return The self thread object. If returns `RT_NULL`, it means that the * scheduler has not started yet. */
| 374 | * scheduler has not started yet. |
| 375 | */ |
| 376 | rt_thread_t rt_thread_self(void) |
| 377 | { |
| 378 | #ifndef RT_USING_SMP |
| 379 | return rt_cpu_self()->current_thread; |
| 380 | |
| 381 | #elif defined (ARCH_USING_HW_THREAD_SELF) |
| 382 | return rt_hw_thread_self(); |
| 383 | |
| 384 | #else /* !ARCH_USING_HW_THREAD_SELF */ |
| 385 | rt_thread_t self; |
| 386 | rt_base_t lock; |
| 387 | |
| 388 | lock = rt_hw_local_irq_disable(); |
| 389 | self = rt_cpu_self()->current_thread; |
| 390 | rt_hw_local_irq_enable(lock); |
| 391 | |
| 392 | return self; |
| 393 | #endif /* ARCH_USING_HW_THREAD_SELF */ |
| 394 | } |
| 395 | RTM_EXPORT(rt_thread_self); |
| 396 | |
| 397 | /** |