pure sdk for main
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
/************************************************
|
||||
* 提供一个通用队列接口
|
||||
************************************************/
|
||||
#include "t_queue.h"
|
||||
#include "osal/string.h"
|
||||
|
||||
|
||||
|
||||
|
||||
void *tqueue_init()
|
||||
{
|
||||
struct tqueue_base_s *tqueue_head = (struct tqueue_base_s *)os_malloc(sizeof(struct tqueue_base_s));
|
||||
if(tqueue_head)
|
||||
{
|
||||
tqueue_head->count = 0;
|
||||
INIT_LIST_HEAD((struct list_head*)tqueue_head);
|
||||
}
|
||||
|
||||
return (void*)tqueue_head;
|
||||
}
|
||||
|
||||
//正常需要先将列表清空才可以释放
|
||||
void tqueue_deinit(void *tqueue_head_ptr)
|
||||
{
|
||||
if(tqueue_head_ptr)
|
||||
{
|
||||
os_free(tqueue_head_ptr);
|
||||
}
|
||||
}
|
||||
|
||||
//如果必要,暂时需要外部进行临界保护
|
||||
//这里将data放到队列
|
||||
uint8_t tqueue_push(void *tqueue_head_ptr,struct tqueue_s *data)
|
||||
{
|
||||
struct tqueue_base_s *tqueue_head = (struct tqueue_base_s *)tqueue_head_ptr;
|
||||
struct tqueue_s *tqueue_data = data;
|
||||
if(tqueue_data)
|
||||
{
|
||||
list_add_tail((struct list_head*)tqueue_data,(struct list_head*)tqueue_head);
|
||||
tqueue_head->count++;
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
//从队列取出一个data
|
||||
struct tqueue_s *tqueue_pop(void *tqueue_head_ptr)
|
||||
{
|
||||
struct tqueue_base_s *tqueue_head = (struct tqueue_base_s *)tqueue_head_ptr;
|
||||
struct tqueue_s *tqueue_data = NULL;
|
||||
if(tqueue_head->count > 0)
|
||||
{
|
||||
tqueue_data = (struct tqueue_s *)tqueue_head->next;
|
||||
list_del((struct list_head *)tqueue_data);
|
||||
INIT_LIST_HEAD((struct list_head *)tqueue_data);
|
||||
tqueue_head->count--;
|
||||
return tqueue_data;
|
||||
}
|
||||
else
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
struct tqueue_s *tqueue_gen_data(void *data,tqueue_malloc m)
|
||||
{
|
||||
struct tqueue_s *tqueue_data = (struct tqueue_s *)m(sizeof(struct tqueue_s));
|
||||
if(tqueue_data)
|
||||
{
|
||||
tqueue_data->data = data;
|
||||
INIT_LIST_HEAD((struct list_head *)tqueue_data);
|
||||
}
|
||||
return tqueue_data;
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
#ifndef __T_QUEUE_H
|
||||
#define __T_QUEUE_H
|
||||
#include "sys_config.h"
|
||||
#include "typesdef.h"
|
||||
#include "list.h"
|
||||
struct tqueue_s
|
||||
{
|
||||
struct list_head *next, *prev;
|
||||
void *data;
|
||||
};
|
||||
|
||||
struct tqueue_base_s
|
||||
{
|
||||
struct list_head *next, *prev;
|
||||
uint32_t count;
|
||||
};
|
||||
|
||||
typedef void *(*tqueue_malloc)(uint32_t size);
|
||||
typedef void (*tqueue_free)(void *data);
|
||||
|
||||
|
||||
void *tqueue_init();
|
||||
void tqueue_deinit(void *tqueue_head_ptr);
|
||||
uint8_t tqueue_push(void *tqueue_head_ptr,struct tqueue_s *data);
|
||||
struct tqueue_s *tqueue_pop(void *tqueue_head_ptr);
|
||||
struct tqueue_s *tqueue_gen_data(void *data,tqueue_malloc m);
|
||||
#endif
|
||||
Reference in New Issue
Block a user