📄 kal.h
字号:
/*----------------------------------------------------------------
[BASIC]
{
[FILENAME] KAL.h
[CONTENT] Kenel adapt layder definition
[AUTHOR] Wangyf
[VERSION] 070704.01
[COMPANY] CEC Huada Electronic Design CO.,LTD
}
[MOD]
{
2007.07.04 Create this file
}
----------------------------------------------------------------*/
#ifndef __KAL_H__
#define __KAL_H__
#ifdef __cplusplus
extern "C" {
#endif
#include "basetype.h"
#if (__RTOS_TYPE__ == OS_UNKNOWN)
typedef u32_t KL_thread_t;
typedef u32_t KL_timer_t;
typedef u32_t KL_mempool_t;
typedef u32_t KL_mailbox_t;
typedef u32_t KL_mutex_t;
typedef u32_t KL_sem_t;
typedef u32_t KL_queue_t;
typedef u32_t KL_eventgrp_t;
typedef u32_t KL_flags;
#elif (__RTOS_TYPE__ == OS_UCOS_II)
#include "ucos_ii.h"
typedef u32_t KL_thread_t;
typedef u32_t KL_timer_t;
typedef u32_t KL_mailbox_t;
typedef u32_t KL_mutex_t;
typedef u32_t KL_sem_t;
typedef u32_t KL_queue_t;
typedef u32_t KL_eventgrp_t;
typedef u32_t KL_flags;
typedef DM_PCB KL_mempool_t;
/*-------------------------------
error code
--------------------------------*/
#define KL_SUCCESS 0
#define KL_UNKNOWN_ERROR -10001
#define KL_INVALID_TASK -10002
#define KL_INVALID_ENTRY -10003
#define KL_INVALID_MEMORY -10004
#define KL_INVALID_SIZE -10005
#define KL_INVALID_PRIORITY -10006
#define KL_INVALID_TIMER -10007
#define KL_INVALID_MAILBOX -10008
#define KL_INVALID_QUEUE -10009
#define KL_INVALID_SEMA -10010
#define KL_INVALID_MUTEX -10011
#define KL_INVALID_EVENTGROUP -10012
#define KL_INVALID_MEMPOOL -10013
#define KL_NO_MEMORY -10014
#define KL_MBOX_EMPTY -10015
#define KL_QUEUE_EMPTY -OS_Q_EMPTY
#define KL_SEMA_OVF -OS_SEM_OVF
#define KL_SEMA_NOT_RDY -10016
#define KL_MUTEX_NOT_RDY -10017
#define KL_EVENT_NOT_RDY -OS_FLAG_ERR_NOT_RDY
#define KL_TIMEOUT -OS_TIMEOUT
#define KL_SUSPEND_FOREVER 0xFFFFFFFF
#define KL_SUSPEND_NEVER 0
#define KL_WAIT_FOREVER
#define KL_WAIT_TIMEOUT
#define KL_FLAG_SET OS_FLAG_SET
#define KL_FLAG_CLR OS_FLAG_CLR
#define KL_FLAG_WAIT_ALL OS_FLAG_WAIT_SET_ALL
#define KL_FLAG_WAIT_ALL_CONSUME (OS_FLAG_WAIT_SET_ALL+OS_FLAG_CONSUME)
#define KL_FLAG_WAIT_ANY OS_FLAG_WAIT_SET_ANY
#define KL_FLAG_WAIT_ANY_CONSUME (OS_FLAG_WAIT_SET_ANY+OS_FLAG_CONSUME)
#define KL_TIMER_ONESHOT OS_TMR_OPT_ONE_SHOT
#define KL_TIMER_PERIODLY OS_TMR_OPT_PERIODIC
#endif
#define KL_CHK_ARG_EN 1
/* KAL parameter defination */
/*--------------------------------------------------------------
Thread Management
----------------------------------------------------------------*/
Status KL_CreateThread(KL_thread_t *pthread,
u8_t *name,
void (*func)(void*, u32_t),
void *argv,
u32_t argc,
void *stack_address,
u32_t stack_size,
u32_t priority
);
Status KL_DelThread(KL_thread_t *pthread);
Status KL_SuspendThread(KL_thread_t *pthread);
Status KL_ResumeThread(KL_thread_t *pthread);
Status KL_ChangeThreadPriority(KL_thread_t *pthread, u32_t new_priority, u32_t *old_priority);
u32_t KL_CheckThreadStack(void);
Status KL_QueryThreadInfo(KL_thread_t *pthread);
void KL_Sleep(u32_t ticks);
Status KL_Sleep_us(u32_t us);
/*--------------------------------------------------------------
Interrupt Management
----------------------------------------------------------------*/
Status KL_RegisterISR(u32_t vector, void(*isr)(u32_t));
/* enable interrupt */
void KL_EnableInt(void);
/* disable interrupt */
void KL_DisableInt(void);
/* begin critical section */
reg_t KL_BeginCriticalSec(void);
/* stop critical section */
void KL_EndCriticalSec(reg_t reg);
/* check if interrupt on or off */
s32_t KL_CheckIntStatus(void);
/*--------------------------------------------------------------
Timer Management
----------------------------------------------------------------*/
/* can not be block */
Status KL_CreateTimer(KL_timer_t *ptimer,
u8_t *name,
void (*func)(u32_t),
u32_t arg,
u32_t initial,
u32_t period,
u32_t type
);
Status KL_DelTimer(KL_timer_t *ptimer);
Status KL_StartTimer(KL_timer_t *ptimer);
Status KL_StopTimer(KL_timer_t *ptimer);
Status KL_GetTimerRemain(KL_timer_t *ptimer, u32_t *left);
Status KL_QueryTimerInfo(KL_timer_t *ptimer);
u32_t KL_GetSysClock(void);
void KL_SetSysClock(u32_t newclock);
/*--------------------------------------------------------------
Dynamic Memory Management
----------------------------------------------------------------*/
/* can be block */
Status KL_CreateMemPool(KL_mempool_t *pool,
u8_t *name,
void *startadderss,
u32_t poolsize,
u32_t min_allocation
);
Status KL_DelMemPool(KL_mempool_t *pool);
void *KL_GetMem(KL_mempool_t *pool, u32_t size);
void *KL_GetMemZ(KL_mempool_t *pool, u32_t size);
void *KL_ReGetMem(KL_mempool_t *pool, void *ptr, u32_t newsize);
Status KL_FreeMem(void *ptr);
Status KL_QueryMemPoolInfo(KL_mempool_t *pool);
/* can not be block */
void *KL_calloc(u32_t num, u32_t size);
void *KL_malloc(u32_t size);
void *KL_realloc(void *ptr, u32_t newsize);
void KL_free(void *ptr);
/*--------------------------------------------------------------
Mailbox , only can hold one mail of fixed size (4 bytes)
----------------------------------------------------------------*/
/* can not be block */
Status KL_CreateMailbox(KL_mailbox_t *mailbox, u8_t *name);
Status KL_DelMailbox(KL_mailbox_t *mailbox);
Status KL_SendMail(KL_mailbox_t *mailbox, void *msg, u32_t timeout);
Status KL_BroadcastMail(KL_mailbox_t *mailbox, void *msg, u32_t timeout);
Status KL_ReceiveMail(KL_mailbox_t *mailbox, void **msg, u32_t timeout);
Status KL_TryRecvMail(KL_mailbox_t *mailbox, void **msg);
Status KL_QueryMailboxInfo(KL_mailbox_t *mailbox);
/*--------------------------------------------------------------
Queue , sizes of queue and message both can be config
----------------------------------------------------------------*/
/* can not be block */
Status KL_CreateQueue(KL_queue_t *queue,
u8_t *name,
void *start_address,
u32_t queue_size,
u32_t message_size);
Status KL_DelQueue(KL_queue_t *queue);
Status KL_FlushQueue(KL_queue_t *queue);
Status KL_SendMessage(KL_queue_t *queue, void *msg, u32_t timeout);
Status KL_SendMessagetoFront(KL_queue_t *queue, void *msg, u32_t timeout);
Status KL_BroadcastMessage(KL_queue_t *queue, void *msg, u32_t timeout);
Status KL_ReceiveMessage(KL_queue_t *queue, void *msg, u32_t timeout);
Status KL_TryRecvMessage(KL_queue_t *queue, void *msg);
Status KL_QueryQueueInfo(KL_queue_t *queue);
/*--------------------------------------------------------------
Semaphore
----------------------------------------------------------------*/
Status KL_CreateSemaphore(KL_sem_t *sem, u8_t *name, u32_t initial);
Status KL_DelSemaphore(KL_sem_t *sem);
Status KL_PostSemaphore(KL_sem_t *sem);
Status KL_PendSemaphore(KL_sem_t *sem, u32_t timeout);
Status KL_TryPendSemaphore(KL_sem_t *sem);
Status KL_QureySemaphoreInfo(KL_sem_t *sem);
/*--------------------------------------------------------------
Mutex
----------------------------------------------------------------*/
Status KL_CreateMutex(KL_mutex_t *mutex, u8_t *name);
Status KL_DelMutex(KL_mutex_t *mutex);
Status KL_PostMutex(KL_mutex_t *mutex);
Status KL_PendMutex(KL_mutex_t *mutex, u32_t timeout);
Status KL_TryPendMutex(KL_mutex_t *mutex);
Status KL_QureyMutexInfo(KL_mutex_t *mutex);
/*--------------------------------------------------------------
Event Group
----------------------------------------------------------------*/
Status KL_CreatEventGroup(KL_eventgrp_t *event, u8_t *name);
Status KL_DelEventGroup(KL_eventgrp_t *event);
Status KL_PostEventGroup(KL_eventgrp_t *event, KL_flags flags, u32_t opt);
Status KL_PendEventGroup(KL_eventgrp_t *event, KL_flags flags, \
u32_t opt, KL_flags *gotflags, u32_t timeout);
Status KL_TryPendEventGroup(KL_eventgrp_t *event, KL_flags flags, u32_t opt, KL_flags *gotflags);
Status KL_QureyEventGroupInfo(KL_eventgrp_t *event);
/*--------------------------------------------------------------
Kenel infomation
----------------------------------------------------------------*/
u8_t *KL_Info(void);
#ifdef __cplusplus
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -