24#if VSF_KERNEL_CFG_EDA_SUPPORT_PT == ENABLED && VSF_USE_KERNEL == ENABLED
36#if VSF_KERNEL_CFG_EDA_SUPPORT_SUB_CALL == ENABLED
37# define __implement_vsf_pt(__name) \
38 __implement_vsf_pt_common(__name, uintptr_t local) \
40 __vsf_pt_common(__name) *vsf_pthis = \
41 *(__vsf_pt_common(__name) **) \
42 ((uintptr_t)local - sizeof(uintptr_t));
44# define __implement_vsf_pt_ex(__name, __func_name) \
45 __implement_vsf_pt_common( __func_name, uintptr_t local) \
47 __vsf_pt_common(__name) *vsf_pthis = \
48 *(__vsf_pt_common(__name) **) \
49 ((uintptr_t)local - sizeof(uintptr_t));
53# define __implement_vsf_pt(__name) \
54 __implement_vsf_pt_common(__name, __name *obj_ptr) { \
55 __vsf_pt_common(__name) *vsf_pthis = &(obj_ptr->param);
57# define __implement_vsf_pt_ex(__name, __func_name) \
58 __implement_vsf_pt_common(__func_name, __name *obj_ptr) { \
59 __vsf_pt_common(__name) *vsf_pthis = &(obj_ptr->param);
62#define __vsf_pt_state() (vsf_this.fsm_state)
63#define __vsf_pt_end() __vsf_pt_end_common()
66#define __vsf_pt_entry(__state, ...) \
67 __vsf_pt_entry_common(__state, __VA_ARGS__)
85#define vsf_pt_entry(...) \
86 __vsf_pt_entry(__vsf_pt_state(), __VA_ARGS__)
88#define __vsf_pt_begin(__state) __vsf_pt_begin_common(__state)
103#define vsf_pt_begin() VSF_UNUSED_PARAM(evt); \
104 __vsf_pt_begin(__vsf_pt_state())
114#define vsf_pt_end() __vsf_pt_end() }
130#define vsf_pt_wait_for_evt(__evt) __vsf_pt_wfe_common(__vsf_pt_state(), __evt)
140#define vsf_pt_wfe(__evt) vsf_pt_wait_for_evt(__evt)
151#define vsf_pt_yield() vsf_pt_entry(__vsf_eda_yield();)
153#if VSF_KERNEL_CFG_EDA_FAST_SUB_CALL == ENABLED
167# define vsf_pt_raw_next() __vsf_pt_raw_next_common(__vsf_pt_state())
183# define vsf_pt_raw_entry(...) __vsf_pt_raw_entry_common(__vsf_pt_state(), __VA_ARGS__)
212#define vsf_pt_wait_until(...) \
214 __VA_ARGS__ {} else { \
218#if VSF_KERNEL_CFG_EDA_SUPPORT_SUB_CALL == ENABLED
219# define __vsf_pt_call_sub(__name, __target, ...) \
220 __vsf_eda_call_eda( (uintptr_t)(__name), \
221 (uintptr_t)(__target), \
224# if VSF_KERNEL_CFG_EDA_FAST_SUB_CALL == ENABLED
245# define vsf_pt_call_sub(__name, __target) \
247 vsf_err_t VSF_MACRO_SAFE_NAME(ret) = \
248 __vsf_pt_call_sub(__name, (__target)); \
249 VSF_KERNEL_ASSERT(VSF_ERR_NONE == VSF_MACRO_SAFE_NAME(ret)); \
259# define vsf_pt_call_sub(__name, __target) \
261 if (VSF_ERR_NONE != __vsf_pt_call_sub(__name, (__target))) { \
264 vsf_pt_entry(return;);
284# define vsf_pt_call_pt(__name, __target) \
285 (__target)->fsm_state = 0; \
286 vsf_pt_call_sub(vsf_pt_func(__name), (__target))
311#define vsf_eda_call_pt(__name, __target) \
312 __vsf_pt_call_sub(vsf_pt_func(__name), (__target))
314#if VSF_KERNEL_CFG_EDA_SUBCALL_HAS_RETURN_VALUE == ENABLED
315# define __vsf_pt_call_task(__name, __target, ...) \
316 __vsf_eda_call_task((vsf_task_entry_t)(__name), \
317 (uintptr_t)(__target), \
345# define vsf_pt_call_task(__name, __target, __ret_addr, ...) \
347 fsm_rt_t VSF_MCONNECT3(__vsf_pt_call_task,__LINE__,tReturn); \
349 VSF_MCONNECT3(__vsf_pt_call_task,__LINE__,tReturn) = \
350 __vsf_pt_call_task(vsf_task_func(__name), (__target), (0, ##__VA_ARGS__));\
351 if (fsm_rt_on_going == \
352 VSF_MCONNECT3(__vsf_pt_call_task,__LINE__,tReturn)) { \
355 if (NULL != (__ret_addr)) { \
357 VSF_MCONNECT3(__vsf_pt_call_task,__LINE__,tReturn); \
362#if VSF_KERNEL_CFG_EDA_SUPPORT_TIMER == ENABLED
384# define vsf_pt_start vsf_teda_start
392# define vsf_pt_start vsf_eda_start
414#define implement_vsf_pt(__name) __implement_vsf_pt(__name)
427#define implement_vsf_pt_ex(__name, __FUNC_NAME) \
428 __implement_vsf_pt_ex(__name, __FUNC_NAME)
438#define imp_vsf_pt(__name) implement_vsf_pt(__name)
450#define imp_vsf_pt_ex(__name, __FUNC_NAME) \
451 implement_vsf_pt_ex(__name, __FUNC_NAME)
461#define __vsf_pt_func(__name) __vsf_pt_func_common(__name)
462#define vsf_pt_func(__name) __vsf_pt_func(__name)
472#define __vsf_pt(__name) __vsf_pt_common(__name)
473#define vsf_pt(__name) __vsf_pt(__name)
475#define __def_vsf_pt(__name,...) \
476 __def_vsf_pt_common(__name, \
498#define def_vsf_pt(__name,...) __def_vsf_pt(__name,__VA_ARGS__)
508#define end_def_vsf_pt(...)
520#define define_vsf_pt(__name,...) def_vsf_pt(__name,__VA_ARGS__)
528#define end_define_vsf_pt(...)
532#if VSF_KERNEL_CFG_EDA_SUPPORT_SUB_CALL == ENABLED
533# define __declare_vsf_pt(__name) \
534 __declare_vsf_pt_common(__name) \
535 __extern_vsf_pt_common(__name, uintptr_t local)
537# define __declare_vsf_pt(__name) \
538 __declare_vsf_pt_common(__name) \
539 __extern_vsf_pt_common(__name, __name *vsf_pthis)
553#define declare_vsf_pt(__name) __declare_vsf_pt(__name)
563#define dcl_vsf_pt(__name) declare_vsf_pt(__name)
565#define __init_vsf_pt(__name, __pt, __pri, ...) \
567 vsf_eda_cfg_t VSF_MACRO_SAFE_NAME(cfg) = { \
568 .fn.evthandler = (vsf_pt_entry_t)__vsf_pt_func(__name), \
569 .priority = (__pri), \
570 .target = (uintptr_t)&((__pt)->param), \
573 (__pt)->param.fsm_state = 0; \
574 vsf_pt_start(&((__pt)->use_as__vsf_pt_t), \
575 &VSF_MACRO_SAFE_NAME(cfg)); \
580#if VSF_KERNEL_CFG_SUPPORT_THREAD == ENABLED \
581 && VSF_KERNEL_CFG_EDA_SUPPORT_SUB_CALL == ENABLED
583# if VSF_KERNEL_CFG_EDA_FAST_SUB_CALL == ENABLED
603# define vsf_pt_call_thread(__name, __target) \
604 vsf_eda_call_thread_prepare(__name, __target); \
606 vsf_err_t VSF_MACRO_SAFE_NAME(ret) = \
607 vsf_eda_call_thread(__target); \
608 VSF_KERNEL_ASSERT(VSF_ERR_NONE == VSF_MACRO_SAFE_NAME(ret)); \
618# define vsf_pt_call_thread(__name, __target) \
619 vsf_eda_call_thread_prepare(__name, __target); \
621 if (VSF_ERR_NONE != vsf_eda_call_thread(__target)) { \
624 vsf_pt_entry(return;);
649#define init_vsf_pt(__name, __pt, __pri, ...) \
650 __init_vsf_pt(__name, __pt, __pri, __VA_ARGS__)
654#if VSF_KERNEL_CFG_EDA_SUPPORT_TIMER == ENABLED
The event-driven task (TCB); every VSF task is an eda at the bottom. Tasks share stacks and only occu...
Definition vsf_eda.h:1838
eda with timer support (can use vsf_teda_set_timer() etc.); derived classes (task/pt/thread) inherit ...
Definition vsf_eda.h:1916
void(* vsf_eda_evthandler_t)(vsf_eda_t *eda, vsf_evt_t evt)
eda event handler; invoked with the task (eda) and the event (evt)
Definition vsf_eda.h:1666
vsf_teda_t vsf_pt_t
Protothread type, alias of vsf_teda_t when VSF_KERNEL_CFG_EDA_SUPPORT_TIMER is ENABLED.
Definition vsf_pt.h:663
vsf_eda_evthandler_t vsf_pt_entry_t
Protothread entry function, with the eda event handler signature (alias of vsf_eda_evthandler_t)
Definition vsf_pt.h:684