KLite 基本API介绍

来源:互联网 发布:淘宝直播怎么开通不了 编辑:程序博客网 时间:2024/06/18 15:32

KLite的API风格非常简洁,先来看看头文件。

/******************************************************************************* 多任务内核头文件* 作者:蒋晓岗*******************************************************************************/#ifndef __OS_H#define __OS_H#include <stddef.h>#include <stdint.h>/******************************************************************************* 数据定义******************************************************************************/typedef void*os_thread_t;typedef void*os_mutex_t;typedef void*os_sem_t;typedef void*os_event_t;/******************************************************************************* OS初始化* 初始化时需要提供内存管理的起始地址和可用内存大小******************************************************************************/void os_init(void* heap, uint32_t heap_size);void os_exec(void);void   os_sleep(uint32_t ms);uint32_t os_time(void);/******************************************************************************* 内存******************************************************************************/void*  os_malloc(uint32_t size);void   os_free(void* p);void   os_meminfo(uint32_t* total, uint32_t* free);/******************************************************************************* 线程******************************************************************************/os_thread_t os_thread_create(void(*thread_main)(void*),void* param, uint32_t stk_size);void   os_thread_destroy(os_thread_t thread);void   os_thread_exit(void);os_thread_t os_thread_self(void);/******************************************************************************* 互斥锁******************************************************************************/os_mutex_t  os_mutex_create(void);void   os_mutex_destroy(os_mutex_t mutex);void   os_mutex_lock(os_mutex_t mutex);void   os_mutex_unlock(os_mutex_t mutex);/******************************************************************************* 事件******************************************************************************/os_event_t os_event_create(uint8_t state);void   os_event_destroy(os_event_t event);void   os_event_post(os_event_t event);void   os_event_wait(os_event_t event);//等待超时返回0uint32_t   os_event_timedwait(os_event_t event, uint32_t timeout);/******************************************************************************* 信号量******************************************************************************/os_sem_t os_sem_create(uint32_t value);void   os_sem_destroy(os_sem_t sem);void os_sem_post(os_sem_t sem);void   os_sem_wait(os_sem_t sem);//等待超时返回0uint32_t   os_sem_timedwait(os_sem_t sem, uint32_t timeout);uint32_t    os_sem_getvalue(os_sem_t sem);/******************************************************************************* 版本号* 32bit/8+8+16/M.S.B******************************************************************************/uint32_t os_version(void);#endif


头文件包含了KLite的所有API函数,函数数量不多,分为几个部分,都是一些非常常用的API接口,可以满足大多数的嵌入式多线程软件开发。

第一组:kernel相关

//kernel 初始化

void os_init(void* heap, uint32_t heap_size);  


//kernel启动并运行

void os_exec(void);


//线程内延时函数单位毫秒
void   os_sleep(uint32_t ms);


//获取内核启动至今的时间,单位毫秒
uint32_t         os_time(void);



第二组:内存管理

//从内核堆空间里申请一片连续的内存

void*   os_malloc(uint32_t size);

//释放刚才申请的内存

void   os_free(void* p);

//查询内核堆空间使用信息

void   os_meminfo(uint32_t* total, uint32_t* free);



第三组:线程管理

//创建一个新的线程,返回线程句柄

os_thread_t os_thread_create(void(*thread_main)(void*),void* param, uint32_t stk_size);

//结束一个线程
void   os_thread_destroy(os_thread_t thread);

//线程自尽函数,自尽=自杀,你懂的
void   os_thread_exit(void);

//返回当前线程的够句柄
os_thread_t os_thread_self(void);


第四组:线程锁

//创建一个新的线程锁,返回线程锁句柄

os_mutex_t  os_mutex_create(void);

//销毁一个线程锁
void   os_mutex_destroy(os_mutex_t mutex);

//线程锁等待解锁并锁定
void   os_mutex_lock(os_mutex_t mutex);

//线程锁解锁
void   os_mutex_unlock(os_mutex_t mutex);


第五组:单一事件

//创建一个新的事件实例

os_event_t os_event_create(uint8_t state);

//销毁一个事件
void   os_event_destroy(os_event_t event);

//通知事件有效
void   os_event_post(os_event_t event);

//等待事件
void   os_event_wait(os_event_t event);
//定时等待事件,超时返回0,否则返回1
uint32_t   os_event_timedwait(os_event_t event, uint32_t timeout);



第六组:信号量

//创建一个初始值为value的信号量

os_sem_t os_sem_create(uint32_t value);

//销毁一个信号量
void   os_sem_destroy(os_sem_t sem);

//通知信号量有效数量加1
void os_sem_post(os_sem_t sem);

//等待信号量有效,并减1
void   os_sem_wait(os_sem_t sem);
//定时等待信号量,超时返回0,否则返回1
uint32_t   os_sem_timedwait(os_sem_t sem, uint32_t timeout);

2 0
原创粉丝点击