From 71560bafb5735220696ca24a42ba4a668b55949b Mon Sep 17 00:00:00 2001 From: Shell Date: Fri, 23 Feb 2024 17:49:15 +0800 Subject: 🎯 Sync smart & scheduler codes (#8537) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Shell Co-authored-by: xqyjlj --- include/rtthread.h | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) (limited to 'include/rtthread.h') diff --git a/include/rtthread.h b/include/rtthread.h index 07fcb64e08..08ad243960 100644 --- a/include/rtthread.h +++ b/include/rtthread.h @@ -21,6 +21,7 @@ * 2023-06-30 ChuShicheng move debug check from the rtdebug.h * 2023-10-16 Shell Support a new backtrace framework * 2023-12-10 xqyjlj fix spinlock in up + * 2024-01-25 Shell Add rt_susp_list for IPC primitives */ #ifndef __RT_THREAD_H__ @@ -43,7 +44,7 @@ extern "C" { #endif #ifdef __GNUC__ -int entry(void); +int entry(void); #endif /** @@ -173,7 +174,6 @@ rt_err_t rt_thread_resume(rt_thread_t thread); rt_err_t rt_thread_wakeup(rt_thread_t thread); void rt_thread_wakeup_set(struct rt_thread *thread, rt_wakeup_func_t func, void* user_data); #endif /* RT_USING_SMART */ -void rt_thread_timeout(void *parameter); rt_err_t rt_thread_get_name(rt_thread_t thread, char *name, rt_uint8_t name_size); #ifdef RT_USING_SIGNALS void rt_thread_alloc_sig(rt_thread_t tid); @@ -212,11 +212,10 @@ void rt_system_scheduler_start(void); void rt_schedule(void); void rt_scheduler_do_irq_switch(void *context); -void rt_schedule_insert_thread(struct rt_thread *thread); -void rt_schedule_remove_thread(struct rt_thread *thread); -void rt_enter_critical(void); +rt_base_t rt_enter_critical(void); void rt_exit_critical(void); +void rt_exit_critical_safe(rt_base_t critical_level); rt_uint16_t rt_critical_level(void); #ifdef RT_USING_HOOK @@ -368,6 +367,26 @@ void rt_slab_free(rt_slab_t m, void *ptr); * @{ */ +/** + * Suspend list - A basic building block for IPC primitives which interacts with + * scheduler directly. Its API is similar to a FIFO list. + * + * Note: don't use in application codes directly + */ +void rt_susp_list_print(rt_list_t *list); +/* reserve thread error while resuming it */ +#define RT_THREAD_RESUME_RES_THR_ERR (-1) +struct rt_thread *rt_susp_list_dequeue(rt_list_t *susp_list, rt_err_t thread_error); +rt_err_t rt_susp_list_resume_all(rt_list_t *susp_list, rt_err_t thread_error); +rt_err_t rt_susp_list_resume_all_irq(rt_list_t *susp_list, + rt_err_t thread_error, + struct rt_spinlock *lock); + +/* suspend and enqueue */ +rt_err_t rt_thread_suspend_to_list(rt_thread_t thread, rt_list_t *susp_list, int ipc_flags, int suspend_flag); +/* only for a suspended thread, and caller must hold the scheduler lock */ +rt_err_t rt_susp_list_enqueue(rt_list_t *susp_list, rt_thread_t thread, int ipc_flags); + #ifdef RT_USING_SEMAPHORE /* * semaphore interface @@ -725,11 +744,11 @@ int rt_snprintf(char *buf, rt_size_t size, const char *format, ...); #if defined(RT_USING_DEVICE) && defined(RT_USING_CONSOLE) rt_device_t rt_console_set_device(const char *name); rt_device_t rt_console_get_device(void); -#ifdef RT_USING_THREDSAFE_PRINTF +#ifdef RT_USING_THREADSAFE_PRINTF rt_thread_t rt_console_current_user(void); #else rt_inline void *rt_console_current_user(void) { return RT_NULL; } -#endif /* RT_USING_THREDSAFE_PRINTF */ +#endif /* RT_USING_THREADSAFE_PRINTF */ #endif /* defined(RT_USING_DEVICE) && defined(RT_USING_CONSOLE) */ rt_err_t rt_get_errno(void); -- cgit v1.3.1