⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kal.h

📁 uCosII是一个小型的多任务调度内核
💻 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 + -