VSF Documented
Data Structures | Macros | Typedefs | Functions
vsf_eda.c File Reference
#include "kernel/vsf_kernel_cfg.h"
#include "./vsf_kernel_common.h"
#include "./vsf_eda.h"
#include "./vsf_evtq.h"
#include "./vsf_os.h"
#include "./vsf_timq.h"
#include "./__eda/vsf_eda_sync.c"
#include "./__eda/vsf_eda_bmpevt.c"
#include "./__eda/vsf_eda_queue.c"
#include "./__eda/vsf_eda_timer.c"

Data Structures

struct  vsf_local_t
 

Macros

#define __VSF_EDA_CLASS_IMPLEMENT
 
#define __VSF_KERNEL_TASK
 
#define __EDA_GADGET__
 

Typedefs

typedef struct vsf_local_t vsf_local_t
 

Functions

vsf_evtq_t__vsf_os_evtq_get (vsf_prio_t priority)
 
vsf_err_t __vsf_os_evtq_set_priority (vsf_evtq_t *pthis, vsf_prio_t priority)
 
vsf_err_t __vsf_os_evtq_activate (vsf_evtq_t *pthis)
 
vsf_err_t __vsf_os_evtq_init (vsf_evtq_t *pthis)
 
vsf_prio_t __vsf_os_evtq_get_priority (vsf_evtq_t *pthis)
 
void __vsf_eda_task_evthandler_process_return_value (vsf_eda_t *eda, vsf_evt_t evt)
 
__vsf_eda_frame_tvsf_eda_new_frame (size_t local_size)
 should be provided by user
 
void vsf_eda_free_frame (__vsf_eda_frame_t *frame)
 
void vsf_kernel_err_report (enum vsf_kernel_error_t err)
 
uintptr_t vsf_irq_enter (void)
 
void vsf_irq_leave (uintptr_t ctx)
 
void __vsf_eda_on_terminate (vsf_eda_t *pthis)
 
void vsf_kernel_init (const vsf_kernel_cfg_t *cfg_ptr)
 
void __vsf_dispatch_evt (vsf_eda_t *pthis, vsf_evt_t evt)
 
vsf_evtq_t__vsf_get_cur_evtq (void)
 
vsf_evtq_t__vsf_set_cur_evtq (vsf_evtq_t *evtq)
 
vsf_eda_tvsf_eda_get_cur (void)
 
bool vsf_eda_polling_state_get (vsf_eda_t *pthis)
 
void vsf_eda_polling_state_set (vsf_eda_t *pthis, bool state)
 
bool vsf_eda_is_stack_owner (vsf_eda_t *pthis)
 
vsf_evt_t vsf_eda_get_cur_evt (void)
 
void * vsf_eda_get_cur_msg (void)
 
uintptr_t vsf_eda_get_return_value (void)
 
bool __vsf_eda_return (uintptr_t return_value)
 
void __vsf_eda_yield (void)
 
void vsf_eda_set_user_value (uint8_t value)
 
uint8_t vsf_eda_get_user_value (void)
 
uintptr_t __vsf_eda_get_local (vsf_eda_t *pthis)
 
vsf_err_t vsf_eda_target_set (uintptr_t param)
 
uintptr_t vsf_eda_target_get (void)
 
vsf_err_t __vsf_eda_call_eda_ex_prepare (uintptr_t func, uintptr_t param, __vsf_eda_frame_state_t state, bool is_sub_call)
 
vsf_err_t __vsf_eda_call_eda_prepare (uintptr_t evthandler, uintptr_t param, size_t local_size)
 
vsf_err_t __vsf_eda_call_eda_ex (uintptr_t func, uintptr_t param, __vsf_eda_frame_state_t state, bool is_sub_call)
 
vsf_err_t __vsf_eda_go_to_ex (uintptr_t evthandler, uintptr_t param)
 
vsf_err_t __vsf_eda_call_eda (uintptr_t evthandler, uintptr_t param, size_t local_size)
 
vsf_err_t vsf_eda_set_evthandler (vsf_eda_t *pthis, vsf_eda_evthandler_t evthandler)
 
vsf_err_t vsf_eda_go_to (uintptr_t evthandler)
 
vsf_err_t __vsf_eda_init (vsf_eda_t *pthis, vsf_prio_t priority, vsf_eda_feature_t feature)
 
vsf_err_t vsf_eda_start (vsf_eda_t *pthis, vsf_eda_cfg_t *cfg_ptr)
 
vsf_err_t vsf_eda_fini (vsf_eda_t *pthis)
 
vsf_err_t vsf_eda_post_evt (vsf_eda_t *pthis, vsf_evt_t evt)
 
vsf_err_t __vsf_eda_post_evt_ex (vsf_eda_t *pthis, vsf_evt_t evt, bool force)
 
vsf_err_t vsf_eda_post_msg (vsf_eda_t *pthis, void *msg)
 
vsf_err_t vsf_eda_post_evt_msg (vsf_eda_t *pthis, vsf_evt_t evt, void *msg)
 
void vsf_eda_cpu_usage_start (vsf_eda_t *pthis, vsf_cpu_usage_ctx_t *ctx)
 
void vsf_eda_cpu_usage_stop (vsf_eda_t *pthis)
 
vsf_err_t vsf_kernel_start (void)
 

Macro Definition Documentation

◆ __VSF_EDA_CLASS_IMPLEMENT

#define __VSF_EDA_CLASS_IMPLEMENT

◆ __VSF_KERNEL_TASK

#define __VSF_KERNEL_TASK

◆ __EDA_GADGET__

#define __EDA_GADGET__

Typedef Documentation

◆ vsf_local_t

typedef struct vsf_local_t vsf_local_t

Function Documentation

◆ __vsf_os_evtq_get()

vsf_evtq_t * __vsf_os_evtq_get ( vsf_prio_t  priority)
extern

◆ __vsf_os_evtq_set_priority()

vsf_err_t __vsf_os_evtq_set_priority ( vsf_evtq_t pthis,
vsf_prio_t  priority 
)
extern

◆ __vsf_os_evtq_activate()

vsf_err_t __vsf_os_evtq_activate ( vsf_evtq_t pthis)
extern

◆ __vsf_os_evtq_init()

vsf_err_t __vsf_os_evtq_init ( vsf_evtq_t pthis)
extern

◆ __vsf_os_evtq_get_priority()

vsf_prio_t __vsf_os_evtq_get_priority ( vsf_evtq_t pthis)
extern

◆ __vsf_eda_task_evthandler_process_return_value()

void __vsf_eda_task_evthandler_process_return_value ( vsf_eda_t eda,
vsf_evt_t  evt 
)
extern

< no param

< no local

< it is a pure eda

return fsm_rt_err

call sub fsm later

delay, wait_for, mutex_pend, sem_pend and etc...

◆ vsf_eda_new_frame()

__vsf_eda_frame_t * vsf_eda_new_frame ( size_t  local_size)
extern

should be provided by user

make sure local_size is aligned with sizeof(uintalu_t);

this is important, don't remove it.

add watermark for local buffer overflow detection, please never remove this!!! as local size could be zero

◆ vsf_eda_free_frame()

void vsf_eda_free_frame ( __vsf_eda_frame_t frame)
extern

◆ vsf_kernel_err_report()

void vsf_kernel_err_report ( enum vsf_kernel_error_t  err)
extern

◆ vsf_irq_enter()

uintptr_t vsf_irq_enter ( void  )

◆ vsf_irq_leave()

void vsf_irq_leave ( uintptr_t  ctx)

◆ __vsf_eda_on_terminate()

void __vsf_eda_on_terminate ( vsf_eda_t pthis)

◆ vsf_kernel_init()

void vsf_kernel_init ( const vsf_kernel_cfg_t cfg_ptr)

◆ __vsf_dispatch_evt()

void __vsf_dispatch_evt ( vsf_eda_t pthis,
vsf_evt_t  evt 
)

< no param

< no local

< this is a pure eda

◆ __vsf_get_cur_evtq()

vsf_evtq_t * __vsf_get_cur_evtq ( void  )

◆ __vsf_set_cur_evtq()

vsf_evtq_t * __vsf_set_cur_evtq ( vsf_evtq_t evtq)

◆ vsf_eda_get_cur()

vsf_eda_t * vsf_eda_get_cur ( void  )

◆ vsf_eda_polling_state_get()

bool vsf_eda_polling_state_get ( vsf_eda_t pthis)

◆ vsf_eda_polling_state_set()

void vsf_eda_polling_state_set ( vsf_eda_t pthis,
bool  state 
)

◆ vsf_eda_is_stack_owner()

bool vsf_eda_is_stack_owner ( vsf_eda_t pthis)

◆ vsf_eda_get_cur_evt()

vsf_evt_t vsf_eda_get_cur_evt ( void  )

◆ vsf_eda_get_cur_msg()

void * vsf_eda_get_cur_msg ( void  )

◆ vsf_eda_get_return_value()

uintptr_t vsf_eda_get_return_value ( void  )

◆ __vsf_eda_return()

bool __vsf_eda_return ( uintptr_t  return_value)
Note
automatically free a frame if the top eda doesn't set ! is_use_frame

< top frame

< not force frame

◆ __vsf_eda_yield()

void __vsf_eda_yield ( void  )

◆ vsf_eda_set_user_value()

void vsf_eda_set_user_value ( uint8_t  value)

◆ vsf_eda_get_user_value()

uint8_t vsf_eda_get_user_value ( void  )

◆ __vsf_eda_get_local()

uintptr_t __vsf_eda_get_local ( vsf_eda_t pthis)

◆ vsf_eda_target_set()

vsf_err_t vsf_eda_target_set ( uintptr_t  param)

◆ vsf_eda_target_get()

uintptr_t vsf_eda_target_get ( void  )

◆ __vsf_eda_call_eda_ex_prepare()

vsf_err_t __vsf_eda_call_eda_ex_prepare ( uintptr_t  func,
uintptr_t  param,
__vsf_eda_frame_state_t  state,
bool  is_sub_call 
)
Note
please NEVER do following things. If param is NULL, please let frame->param to be NULL

if (NULL == param) { frame->param = pthis; //!< point to the current eda } else { frame->param = param; }

◆ __vsf_eda_call_eda_prepare()

vsf_err_t __vsf_eda_call_eda_prepare ( uintptr_t  evthandler,
uintptr_t  param,
size_t  local_size 
)

◆ __vsf_eda_call_eda_ex()

vsf_err_t __vsf_eda_call_eda_ex ( uintptr_t  func,
uintptr_t  param,
__vsf_eda_frame_state_t  state,
bool  is_sub_call 
)

◆ __vsf_eda_go_to_ex()

vsf_err_t __vsf_eda_go_to_ex ( uintptr_t  evthandler,
uintptr_t  param 
)

◆ __vsf_eda_call_eda()

vsf_err_t __vsf_eda_call_eda ( uintptr_t  evthandler,
uintptr_t  param,
size_t  local_size 
)

◆ vsf_eda_set_evthandler()

vsf_err_t vsf_eda_set_evthandler ( vsf_eda_t pthis,
vsf_eda_evthandler_t  evthandler 
)

◆ vsf_eda_go_to()

vsf_err_t vsf_eda_go_to ( uintptr_t  evthandler)

◆ __vsf_eda_init()

vsf_err_t __vsf_eda_init ( vsf_eda_t pthis,
vsf_prio_t  priority,
vsf_eda_feature_t  feature 
)

◆ vsf_eda_start()

vsf_err_t vsf_eda_start ( vsf_eda_t pthis,
vsf_eda_cfg_t cfg_ptr 
)

override the is_use_frame flag

◆ vsf_eda_fini()

vsf_err_t vsf_eda_fini ( vsf_eda_t pthis)

◆ vsf_eda_post_evt()

vsf_err_t vsf_eda_post_evt ( vsf_eda_t pthis,
vsf_evt_t  evt 
)

◆ __vsf_eda_post_evt_ex()

vsf_err_t __vsf_eda_post_evt_ex ( vsf_eda_t pthis,
vsf_evt_t  evt,
bool  force 
)

◆ vsf_eda_post_msg()

vsf_err_t vsf_eda_post_msg ( vsf_eda_t pthis,
void *  msg 
)

◆ vsf_eda_post_evt_msg()

vsf_err_t vsf_eda_post_evt_msg ( vsf_eda_t pthis,
vsf_evt_t  evt,
void *  msg 
)

◆ vsf_eda_cpu_usage_start()

void vsf_eda_cpu_usage_start ( vsf_eda_t pthis,
vsf_cpu_usage_ctx_t ctx 
)

◆ vsf_eda_cpu_usage_stop()

void vsf_eda_cpu_usage_stop ( vsf_eda_t pthis)

◆ vsf_kernel_start()

vsf_err_t vsf_kernel_start ( void  )
Note
Priority of kernel task generally should be the highest priority of ! tasks(__vsf_eda.highest_prio, or vsf_prio_highest). ! If a task with vsf_prio_highest priority will not exit, eg: call yield ! and never go to idle state(yield will yield to the same priority, not lower). ! So if priority of kernel task is lower than vsf_prio_highest, the kernel ! task will never have a change to run. ! Basically, we don't recommend to use this design pattern, a task should ! not takes all the CPU resources, which will deprive tasks with lower priority ! of the chance to run. If there is no such tasks, priority of kernel ! task can be lower than vsf_prio_highest. Please use VSF_KERNEL_CFG_KERNEL_TASK_PRIORITY ! to configure the priority of the kernel task.