www.pudn.com > r&s1.10°æ±¾£«Îĵµ.rar > kapi.h


/* 
=============================================================================== 
| Copyright (C) 2004 RuanHaiShen, All rights reserved. 
| SUMMARY:  
|   kernel api for user 
| 
| DESCRIPTION: 
|   See http://www.01s.org for documentation, latest information, license  
|   and contact details. 
|   email:ruanhaishen@01s.org 
=============================================================================*/ 
#ifndef __KAPI_H__ 
#define __KAPI_H__  
/*===========================================================================*/ 
#include "arch/arch.h" 
#include "inc/types.h" 
#include "inc/const.h" 
 
#include "inc/queue.h" 
#include "inc/kernel.h" 
#include "inc/memory.h" 
#include "inc/ipc.h" 
 
/*====== system api =============================*/ 
 
void system_init(void); 
void system_start(void); 
#define system_version() RS_VERSION 
 
#if CFG_TICK_COUNT_EN > 0 
u32 tick_get(void); 
#endif 
 
/*====== task api ===============================*/ 
 
void  task_lock(void); 
void  task_unlock(void); 
err_t __task_create( 
    u8          prio,                   /* task priority                */ 
    entry_t     entry,                  /* entry point function         */ 
    arg_t       entry_arg,              /* entry data                   */ 
    sp_t        stack_base              /* stack base                   */ 
); 
#define task_create( \ 
    prio,               /* task priority                */ \ 
    entry,              /* entry point function         */ \ 
    entry_arg,          /* entry data                   */ \ 
    name,               /* optional task name           */ \ 
    stack_base,         /* stack base                   */ \ 
    stack_size,         /* stack size, 0 = default      */ \ 
    option              /* task start option            */ \ 
) \ 
__task_create(prio, entry, entry_arg, stack_base) 
 
#if CFG_TASK_DEL_EN > 0 
err_t task_delete(u8 prio); 
#endif 
#if CFG_PRIO_MODE > 0 
err_t task_change_prio(u8 old_prio, u8 new_prio); 
#endif 
#if CFG_PRIO_MODE > 1 
err_t task_change_cprio(u8 prio, u8 new_cprio); 
#endif 
void  task_sleep(tick_t ticks); 
err_t task_wake(u8 prio); 
#if CFG_TASK_SUS_EN > 0 
err_t task_suspend(u8 prio); 
err_t task_resume(u8 prio); 
#endif 
#if CFG_TASK_INFO_EN > 0 
err_t task_getinfo(info_t* info); 
#endif 
 
/*====== binary semaphores api ==================*/ 
 
#if CFG_SEMB_EN > 0 
err_t semb_init(semb_t* semb, bool value); 
err_t semb_wait(semb_t* semb); 
#if CFG_IPC_TIMEOUT_EN > 0 
err_t semb_timewait(semb_t* semb, tick_t ticks); 
#endif 
err_t semb_trywait(semb_t* semb); 
void  semb_post(semb_t* semb); 
bool  semb_getvalue(semb_t* semb); 
err_t semb_destroy(semb_t* semb); 
#endif 
 
/*====== counting semaphores api ================*/ 
 
#if CFG_SEM_EN > 0 
err_t sem_init(sem_t* sem, cnt_t value); 
err_t sem_wait(sem_t* sem); 
#if CFG_IPC_TIMEOUT_EN > 0 
err_t sem_timewait(sem_t* sem, tick_t ticks); 
#endif 
err_t sem_trywait(sem_t* sem); 
void  sem_post(sem_t* sem); 
cnt_t sem_getvalue(sem_t* sem); 
err_t sem_destroy(sem_t* sem); 
#endif 
 
/*====== mutex api ==============================*/ 
 
#if CFG_MUTEX_EN > 0 
err_t mutex_init(mutex_t* mut, u8 prio); 
err_t mutex_wait(mutex_t* mut); 
#if CFG_IPC_TIMEOUT_EN > 0 
err_t mutex_timewait(mutex_t* mut, tick_t ticks); 
#endif 
err_t mutex_trywait(mutex_t* mut); 
err_t mutex_release(mutex_t* mut); 
u8 mutex_gethand(mutex_t* mut); 
u8 mutex_getprio(mutex_t* mut); 
err_t mutex_destroy(mutex_t* mut); 
#endif 
 
/*====== mail box api ===========================*/ 
 
#if CFG_MBOX_EN > 0  
err_t mbox_init(mbox_t* mbox); 
err_t mbox_send(mbox_t* mbox, u32 value); 
err_t mbox_receive(mbox_t* mbox, u32* pvalue); 
#if CFG_IPC_TIMEOUT_EN > 0 
err_t mbox_timereceive(mbox_t* mbox, u32* pvalue, tick_t ticks); 
#endif 
err_t mbox_flush(mbox_t* mbox); 
err_t mbox_destroy(mbox_t* mbox); 
#endif 
 
/*====== message queue api ======================*/ 
 
#if CFG_MSGQ_EN > 0 
err_t msgq_init(msgq_t* msgq, u16 size, u16 entries, u8 opt); 
err_t msgq_send(msgq_t* msgq, const void* buf); 
err_t msgq_receive(msgq_t* msgq, void* buf); 
#if CFG_IPC_TIMEOUT_EN > 0 
err_t msgq_timereceive(msgq_t* msgq, void* buf, tick_t ticks); 
#endif 
err_t msgq_flush(msgq_t* msgq); 
err_t msgq_destroy(msgq_t* msgq); 
#endif 
 
/*====== memory management api ==================*/ 
 
#if CFG_MM_EN > 0  
void* kmalloc(mmsz_t size); 
void  kfree(void* ptr); 
err_t mm_status(void); 
#endif 
 
 
/*===========================================================================*/ 
#endif