9d8bbd1c
李外
改升级前备份
|
1
|
#include "gen_linklist.h"
|
32fa5493
李外
移植快速下发完成,快速下发与17信...
|
2
|
#include "platform.h"
|
a0293f87
李外
1、用新写法替换所有开关总中断的语句;
|
3
|
#include <stdio.h>
|
9d8bbd1c
李外
改升级前备份
|
4
5
6
|
// https://blog.csdn.net/swwlqw/article/details/22498833
|
9d8bbd1c
李外
改升级前备份
|
7
8
9
|
/*-------------- insert ------------------------------
* insert data to any postion
*/
|
a0293f87
李外
1、用新写法替换所有开关总中断的语句;
|
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
#undef container_of
#define container_of(ptr, type, member) ((type *)(((size_t)ptr) - offsetof(type, member)))
//#define container_of(ptr, type, member) ({ \
//const typeof( ((type *)0)->member ) *__mptr = (ptr); \
//(type *)( (char *)__mptr - offsetof(type,member) );})
typedef struct gen_linknodebuf_STR{
unsigned char status;
GenLinkNode node;//unsigned char node[6];
}GenLinkNodebuf;
GenLinkNodebuf gen_linknodebuf[100]={0};
GenLinkNode* gen_malloc(void)
{
for(unsigned short i = 0;i < 100;i++)
{
if(gen_linknodebuf[i].status == 0 ){
gen_linknodebuf[i].status = 1;
return &gen_linknodebuf[i].node;//(GenLinkNode*)&gen_linknodebuf[i].node[0];
}
}
return NULL;
}
void gen_free(GenLinkNode * nodetemp)
{
GenLinkNodebuf * temp;
temp = container_of(nodetemp,struct gen_linknodebuf_STR,node);
temp->status = 0;
}
|
9d8bbd1c
李外
改升级前备份
|
47
48
|
unsigned char gen_linklist__insert(GenLinkList* const list,void *pele,unsigned short index)
{
|
eec54649
李外
链表 和 队列的中断保护带嵌套且用...
|
49
50
51
|
uint8_t rtn=1;
PLATFORM_DISABLE_IRQ();
|
6570feac
李外
V100.0.9
|
52
53
|
if(list->length < index)
{
|
a0293f87
李外
1、用新写法替换所有开关总中断的语句;
|
54
|
// platform.enable_interrupt();
|
eec54649
李外
链表 和 队列的中断保护带嵌套且用...
|
55
|
rtn = 0;
|
6570feac
李外
V100.0.9
|
56
|
}
|
eec54649
李外
链表 和 队列的中断保护带嵌套且用...
|
57
58
|
else
{
|
a0293f87
李外
1、用新写法替换所有开关总中断的语句;
|
59
60
|
//GenLinkNode *node = (GenLinkNode *)malloc(sizeof(GenLinkNode));
GenLinkNode *node = gen_malloc();
|
eec54649
李外
链表 和 队列的中断保护带嵌套且用...
|
61
62
63
64
65
66
67
68
|
if(node ==NULL)
{
rtn = 0;
}
else
{
node->next = NULL;
node->pdata = pele;
|
9d8bbd1c
李外
改升级前备份
|
69
|
|
eec54649
李外
链表 和 队列的中断保护带嵌套且用...
|
70
71
|
GenLinkNode *pnode_tmp= list->front;
for(unsigned short i=0;i<index;i++){
|
a0293f87
李外
1、用新写法替换所有开关总中断的语句;
|
72
|
if(pnode_tmp!=NULL)
|
eec54649
李外
链表 和 队列的中断保护带嵌套且用...
|
73
74
75
76
77
78
79
|
pnode_tmp =pnode_tmp->next;
}//for
node->next =pnode_tmp->next;
pnode_tmp->next =node;
(list->length)++;
}
}
|
a0293f87
李外
1、用新写法替换所有开关总中断的语句;
|
80
|
PLATFORM_ENABLE_IRQ();
|
eec54649
李外
链表 和 队列的中断保护带嵌套且用...
|
81
|
return rtn;
|
9d8bbd1c
李外
改升级前备份
|
82
|
|
9d8bbd1c
李外
改升级前备份
|
83
84
85
86
87
88
89
|
}
/* -------------- detele ------------------------------
* detele node at any postion
*/
void* gen_linklist__detele(GenLinkList* const list,unsigned short index)
{
|
eec54649
李外
链表 和 队列的中断保护带嵌套且用...
|
90
91
|
void * rtn = NULL;
PLATFORM_DISABLE_IRQ();
|
6570feac
李外
V100.0.9
|
92
93
|
if(list->length < index)
{
|
eec54649
李外
链表 和 队列的中断保护带嵌套且用...
|
94
|
rtn = NULL;
|
6570feac
李外
V100.0.9
|
95
|
}
|
eec54649
李外
链表 和 队列的中断保护带嵌套且用...
|
96
97
98
99
|
else
{
GenLinkNode *pnode_tmp= list->front;
for(unsigned short i=0;i<index;i++){
|
a0293f87
李外
1、用新写法替换所有开关总中断的语句;
|
100
|
if(pnode_tmp!=NULL)
|
eec54649
李外
链表 和 队列的中断保护带嵌套且用...
|
101
102
|
pnode_tmp =pnode_tmp->next;
}//for
|
9d8bbd1c
李外
改升级前备份
|
103
|
|
eec54649
李外
链表 和 队列的中断保护带嵌套且用...
|
104
105
106
|
GenLinkNode *pnode_record= pnode_tmp->next;
pnode_tmp->next = pnode_tmp->next->next;
rtn =pnode_record->pdata;
|
a0293f87
李外
1、用新写法替换所有开关总中断的语句;
|
107
108
|
//free(pnode_record);
gen_free(pnode_record);
|
eec54649
李外
链表 和 队列的中断保护带嵌套且用...
|
109
110
111
|
if(list->length)
(list->length)--;
}
|
a0293f87
李外
1、用新写法替换所有开关总中断的语句;
|
112
|
PLATFORM_ENABLE_IRQ();
|
eec54649
李外
链表 和 队列的中断保护带嵌套且用...
|
113
|
return rtn;
|
9d8bbd1c
李外
改升级前备份
|
114
115
116
117
118
119
120
121
122
123
124
|
}
/*-------------- get ele ------------------------------
* get element of index;
*/
void* gen_linklist__get_ele(GenLinkList* const list,unsigned short index)
{
if( list->length < index) return NULL;
GenLinkNode *pnode_tmp= list->front->next;//diff with no head
for(unsigned short i=0;i<index;i++){
|
a0293f87
李外
1、用新写法替换所有开关总中断的语句;
|
125
|
if(pnode_tmp->next != NULL)
|
9d8bbd1c
李外
改升级前备份
|
126
127
|
pnode_tmp =pnode_tmp->next;
}//for
|
0f1254c7
李外
V100.0.5
|
128
|
if(pnode_tmp != NULL)
|
9d8bbd1c
李外
改升级前备份
|
129
|
return pnode_tmp->pdata;
|
0f1254c7
李外
V100.0.5
|
130
131
|
else
return NULL;
|
9d8bbd1c
李外
改升级前备份
|
132
133
134
135
136
137
138
139
140
|
}
/*-------------- get len ------------------------------
* get length of linklist
*/
unsigned short gen_linklist__get_len(GenLinkList* const list)
{
return list->length;
}
|