VSF Documented
Data Structures | Macros | Typedefs | Functions
vsf_os.c File Reference
#include "./vsf_kernel_cfg.h"
#include "./vsf_kernel_common.h"
#include "./vsf_eda.h"
#include "./vsf_evtq.h"
#include "./vsf_os.h"
#include "./task/vsf_task.h"
#include "service/vsf_service.h"
#include "hal/arch/vsf_arch.h"
#include "hal/vsf_hal.h"
#include "component/debugger/vsf_debugger.h"
#include "service/pool/impl_vsf_pool.inc"

Data Structures

struct  vsf_os_t
 

Macros

#define __VSF_EDA_CLASS_INHERIT__
 
#define __name   vsf_eda_frame_pool
 
#define __type   __vsf_eda_frame_buffer_t
 
#define __name   vsf_evt_node_pool
 
#define __type   vsf_evt_node_t
 

Typedefs

typedef struct vsf_os_t vsf_os_t
 

Functions

void vsf_kernel_err_report (vsf_kernel_error_t err)
 
void vsf_plug_in_on_kernel_idle (void)
 
void vsf_plug_in_for_kernel_diagnosis (void)
 
void __post_vsf_kernel_init (void)
 
vsf_err_t vsf_kernel_start (void)
 
vsf_evtq_t__vsf_set_cur_evtq (vsf_evtq_t *new_ptr)
 
vsf_err_t vsf_evtq_poll (vsf_evtq_t *this_ptr)
 
const vsf_kernel_resource_tvsf_kernel_get_resource_on_init (void)
 
__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)
 
vsf_evtq_t__vsf_os_evtq_get (vsf_prio_t priority)
 
vsf_prio_t __vsf_os_evtq_get_priority (vsf_evtq_t *this_ptr)
 
vsf_err_t __vsf_os_evtq_set_priority (vsf_evtq_t *this_ptr, vsf_prio_t priority)
 
vsf_err_t __vsf_os_evtq_init (vsf_evtq_t *this_ptr)
 
vsf_err_t __vsf_os_evtq_activate (vsf_evtq_t *this_ptr)
 
vsf_evt_node_t__vsf_os_alloc_evt_node (void)
 
void __vsf_os_free_evt_node (vsf_evt_node_t *pnode)
 
void __vsf_sleep (int level)
 
void vsf_cpu_usage_start (vsf_cpu_usage_ctx_t *ctx)
 
void vsf_cpu_usage_stop (void)
 
void __vsf_kernel_os_run_priority (vsf_prio_t priority)
 
void __vsf_kernel_os_start (void)
 __vsf_kernel_os_start and __vsf_kernel_os_run_priority are ONLY used when __vsf_main_entry is not used
 
void __vsf_main_entry (void)
 

Macro Definition Documentation

◆ __VSF_EDA_CLASS_INHERIT__

#define __VSF_EDA_CLASS_INHERIT__

◆ __name [1/2]

#define __name   vsf_eda_frame_pool

◆ __type [1/2]

#define __type   __vsf_eda_frame_buffer_t

◆ __name [2/2]

#define __name   vsf_evt_node_pool

◆ __type [2/2]

#define __type   vsf_evt_node_t

Typedef Documentation

◆ vsf_os_t

typedef struct vsf_os_t vsf_os_t

Function Documentation

◆ vsf_kernel_err_report()

void vsf_kernel_err_report ( vsf_kernel_error_t  err)
extern
Note
This should not happen. Two possible reasons could be:
  1. Forgeting to set VSF_OS_CFG_MAIN_MODE to VSF_OS_CFG_MAIN_MODE_THREAD and using vsf kernel APIs, e.g. vsf_delay_ms, vsf_sem_pend and etc.
  2. When VSF_OS_CFG_MAIN_MODE is not VSF_OS_CFG_MAIN_MODE_THREAD, using any vsf_eda_xxxx APIs.
  3. call APIs depends on eda context in non-eda context
This should not happen. One possible reason is:

‍You start task, e.g. eda, vsf_task, vsf_pt or vsf_thread in the idle task. Please use vsf_prio_0 when you do this in idle task.

◆ vsf_plug_in_on_kernel_idle()

void vsf_plug_in_on_kernel_idle ( void  )
extern

◆ vsf_plug_in_for_kernel_diagnosis()

void vsf_plug_in_for_kernel_diagnosis ( void  )
extern

doing nothing here

◆ __post_vsf_kernel_init()

void __post_vsf_kernel_init ( void  )
extern

◆ vsf_kernel_start()

vsf_err_t vsf_kernel_start ( void  )
extern
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.

◆ __vsf_set_cur_evtq()

vsf_evtq_t * __vsf_set_cur_evtq ( vsf_evtq_t new_ptr)
extern

◆ vsf_evtq_poll()

vsf_err_t vsf_evtq_poll ( vsf_evtq_t this_ptr)
extern

◆ vsf_kernel_get_resource_on_init()

const vsf_kernel_resource_t * vsf_kernel_get_resource_on_init ( void  )
extern

◆ vsf_eda_new_frame()

__vsf_eda_frame_t * vsf_eda_new_frame ( size_t  local_size)

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)

◆ __vsf_os_evtq_get()

vsf_evtq_t * __vsf_os_evtq_get ( vsf_prio_t  priority)

◆ __vsf_os_evtq_get_priority()

vsf_prio_t __vsf_os_evtq_get_priority ( vsf_evtq_t this_ptr)

◆ __vsf_os_evtq_set_priority()

vsf_err_t __vsf_os_evtq_set_priority ( vsf_evtq_t this_ptr,
vsf_prio_t  priority 
)

◆ __vsf_os_evtq_init()

vsf_err_t __vsf_os_evtq_init ( vsf_evtq_t this_ptr)

◆ __vsf_os_evtq_activate()

vsf_err_t __vsf_os_evtq_activate ( vsf_evtq_t this_ptr)

◆ __vsf_os_alloc_evt_node()

vsf_evt_node_t * __vsf_os_alloc_evt_node ( void  )

◆ __vsf_os_free_evt_node()

void __vsf_os_free_evt_node ( vsf_evt_node_t pnode)

◆ __vsf_sleep()

void __vsf_sleep ( int  level)

◆ vsf_cpu_usage_start()

void vsf_cpu_usage_start ( vsf_cpu_usage_ctx_t ctx)

◆ vsf_cpu_usage_stop()

void vsf_cpu_usage_stop ( void  )

◆ __vsf_kernel_os_run_priority()

void __vsf_kernel_os_run_priority ( vsf_prio_t  priority)

◆ __vsf_kernel_os_start()

void __vsf_kernel_os_start ( void  )

__vsf_kernel_os_start and __vsf_kernel_os_run_priority are ONLY used when __vsf_main_entry is not used

◆ __vsf_main_entry()

void __vsf_main_entry ( void  )

< customised kernel diagnosis

< user defined idle task