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