📄 fifobuffer.lst
字号:
C51 COMPILER V7.06 FIFOBUFFER 10/08/2007 22:11:01 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE FIFOBUFFER
OBJECT MODULE PLACED IN FIFOBuffer.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE FIFOBuffer.c LARGE BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "FIFOBuffer.h"
2
3 Node* FIFOHeader;
4 Node* FIFOTailer;
5 POOL data_type DMAPool;
6 /*
7 * _k_malloc_()
8 * 从片内内存POOL中分配一个u16类型的地址空间
9 * 分配失败: 返回0;成功:返回地址
10 */
11 Node * _k_malloc_()
12 {
13 1 Node *p;
14 1 if( DMAPool.curlen < POOL_BLOCK_NUM ) //(DMAPool.tailer + 1)%POOL_BLOCK_NUM != DMAPool.header )
15 1 {
16 2 p = &DMAPool.pool[DMAPool.tailer];
17 2 DMAPool.tailer = (DMAPool.tailer + 1)%POOL_BLOCK_NUM;
18 2 DMAPool.curlen++;
19 2 }
20 1 else
21 1 p = 0;
22 1 return p;
23 1 }
24 /*
25 * _free_()
26 * 将一个内存的一个Node类型的地址空间换回到POOL中
27 * 释放成功: 返回1;失败:返回0
28 */
29 u8 _free_(Node *p )
30 {
31 1 if( DMAPool.curlen >0 && p==&DMAPool.pool[DMAPool.header] ){
32 2 DMAPool.header = (DMAPool.header + 1)%POOL_BLOCK_NUM;
33 2 DMAPool.curlen--;
34 2 return 1;
35 2 }
36 1 else{
37 2 return 0;
38 2 }
39 1
40 1 }
41 void InitPOOL(void)
42 {
43 1 DMAPool.header = 0;
44 1 DMAPool.tailer = 0;
45 1 DMAPool.curlen = 0;
46 1 }
47
48 /*
49 * u8 InsertBuffer(u16 * p, u16 len )
50 * 向FIFOBuffer中插入一帧数据 数据长度<= DMA_BLOCK_SIZE
51 * 插入成功:返回1;插入失败: 返回0;插入成功后分配空间失败:2;
52 */
53 u8 InsertBuffer( u16 *p ,u8 len)
54 {
55 1 u16 i ;
C51 COMPILER V7.06 FIFOBUFFER 10/08/2007 22:11:01 PAGE 2
56 1 Node* ptmp;
57 1 if( len > DMA_BLOCK_SIZE ) return 0;
58 1 if(FIFOTailer)
59 1 for( i=0; i<len ; i++){
60 2 FIFOTailer->buffer[i] = *(p+i);
61 2 }
62 1
63 1 ptmp = (Node*)_k_malloc_();
64 1 if(!ptmp) return 2;
65 1
66 1 FIFOTailer->next = ptmp;
67 1 FIFOTailer = FIFOTailer->next;
68 1 FIFOTailer->next = (Node*)0;
69 1 return 1;
70 1 }
71 /*
72 * u8 ReadBuffer(u16 * p, u16 len )
73 * 从FIFOBuffer中读取一帧数据 数据长度<= DMA_BLOCK_SIZE
74 * 插入成功:返回1;失败: 返回0
75 */
76 u8 ReadBuffer(u16 * p, u16 len )
77 {
78 1 u16 i ;
79 1 Node * ptmp;
80 1 if(len > DMA_BLOCK_SIZE) return 0;
81 1 if(FIFOHeader == FIFOTailer) return 0;
82 1 for(i=0 ; i<len ; i++)
83 1 {
84 2 *(p+i) = FIFOHeader->buffer[i];
85 2 }
86 1 ptmp = FIFOHeader;
87 1 FIFOHeader = FIFOHeader->next;
88 1 return _free_(ptmp);
89 1 }
90
91
92 void InitFIFOBuffer(void)
93 {
94 1 Node *ptmp;
95 1
96 1 InitPOOL();
97 1 ptmp = (Node*)_k_malloc_();
98 1 if(!ptmp) return;
99 1 FIFOTailer = ptmp;
100 1 FIFOHeader = FIFOTailer;
101 1 FIFOTailer->next = (Node*)0;
102 1
103 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 698 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 669 22
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -