📄 rd_adt_queue.lis
字号:
.module RD_ADT_QUEUE.c
.area text(rom, con, rel)
0000 .dbfile O:\2007全国电子设计大赛\键盘显示模块\RD_ADT_QUEUE.c
0000 .dbfunc e ADT_Queue_Add_To_Buffer _ADT_Queue_Add_To_Buffer fc
0000 .dbstruct 0 18 AbstructDataTypeQueue
0000 .dbfield 0 pBuffer pc
0000 .dbfield 2 nSize i
0000 .dbfield 4 nHead i
0000 .dbfield 6 nTail i
0000 .dbfield 8 nCount i
0000 .dbfield 10 fnAddToBuffer pfc
0000 .dbfield 12 fnGetFromBuffer pfc
0000 .dbfield 14 fnCheckEmpty pfc
0000 .dbfield 16 fnPeekFromBuffer pfc
0000 .dbend
0000 ; pBuffer -> R12,R13
0000 ; nCount0 -> R20,R21
0000 ; nHead0 -> R14,R15
0000 ; nTail0 -> R22,R23
0000 ; nSize0 -> R10,R11
0000 ; cData -> R18
0000 ; pQueue -> R16,R17
.even
0000 _ADT_Queue_Add_To_Buffer::
0000 0E940000 xcall push_xgsetF0FC
0004 .dbline -1
0004 .dbline 78
0004 ; /***********************************************************
0004 ; * 函数库说明:抽象数据类型(ADT)队列函数库 *
0004 ; * 版本: v1.01 *
0004 ; * 作者: 王卓然 *
0004 ; * 创建日期: 2007年3月23日 *
0004 ; * -------------------------------------------------------- *
0004 ; * [支 持 库] *
0004 ; * 支持库名称:RD_MacroAndConst.h *
0004 ; * 需要版本: v0.01 &abv *
0004 ; * 支持库说明:系统常用宏定义库 *
0004 ; * *
0004 ; * 支持库名称:RD_ADT_QUEUE.h *
0004 ; * 需要版本: ----- *
0004 ; * 支持库说明:抽象数据类型(ADT)队列声明库 *
0004 ; * -------------------------------------------------------- *
0004 ; * [版本更新] *
0004 ; * 修改: 王卓然 *
0004 ; * 修改日期: 2007年4月17日 *
0004 ; * 版本: v1.01 *
0004 ; * -------------------------------------------------------- *
0004 ; * [版本历史] *
0004 ; * v1.00 该版本提供了基本的抽象数据类型队列的结构定 *
0004 ; * 义,以及默认的环形队列处理函数。 *
0004 ; * v1.01 增加了队列空判断函数,和队列首数据预览函数 *
0004 ; * -------------------------------------------------------- *
0004 ; * [使用说明] *
0004 ; ***********************************************************/
0004 ;
0004 ; /********************
0004 ; * 头 文 件 配 置 区 *
0004 ; ********************/
0004 ; # include "RD_MacroAndConst.h"
0004 ; # include "RD_ADT_QUEUE.h"
0004 ;
0004 ; /********************
0004 ; * 系 统 宏 定 义 *
0004 ; ********************/
0004 ;
0004 ; /*------------------*
0004 ; * 常 数 宏 定 义 *
0004 ; *------------------*/
0004 ;
0004 ; /*------------------*
0004 ; * 动 作 宏 定 义 *
0004 ; *------------------*/
0004 ;
0004 ; /********************
0004 ; * 结构体定义区 *
0004 ; ********************/
0004 ;
0004 ; /********************
0004 ; * 模块函数声明区 *
0004 ; ********************/
0004 ;
0004 ; /********************
0004 ; * 全局函数声明区 *
0004 ; ********************/
0004 ; BOOL ADT_Queue_Add_To_Buffer(ADT_QUEUE *pQueue,uint8 cData);
0004 ; BOOL ADT_Queue_Get_From_Buffer(ADT_QUEUE *pQueue,uint8 *pData);
0004 ; BOOL ADT_Queue_Check_Empty(ADT_QUEUE *pQueue);
0004 ; BOOL ADT_Queue_Peek_From_Buffer(ADT_QUEUE *pQueue,uint8 *pData);
0004 ;
0004 ; /********************
0004 ; * 模块变量声明区 *
0004 ; ********************/
0004 ;
0004 ; /********************
0004 ; * 全局变量声明区 *
0004 ; ********************/
0004 ;
0004 ; /***********************************************************
0004 ; * 函数说明:抽象数据类型队列,系统默认队列缓冲添加函数 *
0004 ; * 输入: 要添加到缓冲区的数据 *
0004 ; * 输出: 添加是否成功 *
0004 ; * 调用函数:无 *
0004 ; ***********************************************************/
0004 ; BOOL ADT_Queue_Add_To_Buffer(ADT_QUEUE *pQueue,uint8 cData)
0004 ; {
0004 .dbline 85
0004 ; uint8 *pBuffer;
0004 ; uint nSize;
0004 ; uint nTail;
0004 ; uint nHead;
0004 ; uint nCount;
0004 ;
0004 ; SAFE_CODE_PERFORMANCE //原子操作
0004 F894 cli
0006 .dbline 85
0006 F801 movw R30,R16
0008 C080 ldd R12,z+0
000A D180 ldd R13,z+1
000C .dbline 85
000C A280 ldd R10,z+2
000E B380 ldd R11,z+3
0010 .dbline 85
0010 CC20 tst R12
0012 11F4 brne X0
0014 DD20 tst R13
0016 21F0 breq L4
0018 X0:
0018 AA20 tst R10
001A 29F4 brne L2
001C BB20 tst R11
001E 19F4 brne L2
0020 X1:
0020 L4:
0020 .dbline 85
0020 .dbline 85
0020 7894 sei
0022 .dbline 85
0022 0027 clr R16
0024 24C0 xjmp L1
0026 L2:
0026 .dbline 85
0026 F801 movw R30,R16
0028 6681 ldd R22,z+6
002A 7781 ldd R23,z+7
002C .dbline 85
002C E480 ldd R14,z+4
002E F580 ldd R15,z+5
0030 .dbline 85
0030 4085 ldd R20,z+8
0032 5185 ldd R21,z+9
0034 .dbline 85
0034 6E15 cp R22,R14
0036 7F05 cpc R23,R15
0038 31F4 brne L5
003A X2:
003A 4A15 cp R20,R10
003C 5B05 cpc R21,R11
003E 19F4 brne L5
0040 X3:
0040 .dbline 85
0040 .dbline 85
0040 7894 sei
0042 .dbline 85
0042 0027 clr R16
0044 14C0 xjmp L1
0046 L5:
0046 .dbline 85
0046 FB01 movw R30,R22
0048 EC0D add R30,R12
004A FD1D adc R31,R13
004C 2083 std z+0,R18
004E .dbline 85
004E 6F5F subi R22,255 ; offset = 1
0050 7F4F sbci R23,255
0052 .dbline 85
0052 4F5F subi R20,255 ; offset = 1
0054 5F4F sbci R21,255
0056 .dbline 85
0056 6A15 cp R22,R10
0058 7B05 cpc R23,R11
005A 11F4 brne L7
005C X4:
005C .dbline 85
005C .dbline 85
005C 6627 clr R22
005E 7727 clr R23
0060 .dbline 85
0060 L7:
0060 .dbline 85
0060 F801 movw R30,R16
0062 7783 std z+7,R23
0064 6683 std z+6,R22
0066 .dbline 85
0066 5187 std z+9,R21
0068 4087 std z+8,R20
006A .dbline 85
006A .dbline 85
006A 7894 sei
006C .dbline 118
006C ; (
006C ; pBuffer = pQueue->pBuffer;
006C ; nSize = pQueue->nSize;
006C ;
006C ; if ((pBuffer == NULL) || (!nSize))
006C ; {
006C ; SEI();
006C ; return FALSE; //缓冲区未分配空间
006C ; }
006C ; nTail = pQueue->nTail;
006C ; nHead = pQueue->nHead;
006C ; nCount = pQueue->nCount;
006C ;
006C ;
006C ; if ((nTail == nHead) && (nCount == nSize)) //缓冲区已满
006C ; {
006C ; SEI();
006C ; return FALSE;
006C ; }
006C ;
006C ; pBuffer[nTail] = cData;
006C ; nTail++;
006C ; nCount++;
006C ; if (nTail == nSize)
006C ; {
006C ; nTail = 0;
006C ; }
006C ;
006C ; pQueue->nTail = nTail;
006C ; pQueue->nCount = nCount;
006C ; )
006C ;
006C ; return TRUE;
006C 01E0 ldi R16,1
006E .dbline -2
006E L1:
006E .dbline 0 ; func end
006E 0C940000 xjmp pop_xgsetF0FC
0072 .dbsym r pBuffer 12 pc
0072 .dbsym r nCount0 20 i
0072 .dbsym r nHead0 14 i
0072 .dbsym r nTail0 22 i
0072 .dbsym r nSize0 10 i
0072 .dbsym r cData 18 c
0072 .dbsym r pQueue 16 pS[AbstructDataTypeQueue]
0072 .dbend
0072 .dbfunc e ADT_Queue_Get_From_Buffer _ADT_Queue_Get_From_Buffer fc
0072 ; pBuffer -> R12,R13
0072 ; nHead1 -> R22,R23
0072 ; nCount0 -> R20,R21
0072 ; nHead0 -> R14,R15
0072 ; nTail0 -> R22,R23
0072 ; nSize0 -> R10,R11
0072 ; pData -> R18,R19
0072 ; pQueue -> R16,R17
.even
0072 _ADT_Queue_Get_From_Buffer::
0072 0E940000 xcall push_xgsetF0FC
0076 .dbline -1
0076 .dbline 128
0076 ; }
0076 ;
0076 ; /***********************************************************
0076 ; * 函数说明:抽象数据类型队列,系统默认队列缓冲区读取函数 *
0076 ; * 输入: 存放读取变量的空间指针 *
0076 ; * 输出: 队列是否为空 *
0076 ; * 调用函数:无 *
0076 ; ***********************************************************/
0076 ; BOOL ADT_Queue_Get_From_Buffer(ADT_QUEUE *pQueue,uint8 *pData)
0076 ; {
0076 .dbline 135
0076 ; uint8 *pBuffer;
0076 ; uint nSize;
0076 ; uint nTail;
0076 ; uint nHead;
0076 ; uint nCount;
0076 ;
0076 ; SAFE_CODE_PERFORMANCE //原子操作
0076 F894 cli
0078 .dbline 135
0078 F801 movw R30,R16
007A C080 ldd R12,z+0
007C D180 ldd R13,z+1
007E .dbline 135
007E A280 ldd R10,z+2
0080 B380 ldd R11,z+3
0082 .dbline 135
0082 CC20 tst R12
0084 11F4 brne X5
0086 DD20 tst R13
0088 21F0 breq L12
008A X5:
008A AA20 tst R10
008C 29F4 brne L10
008E BB20 tst R11
0090 19F4 brne L10
0092 X6:
0092 L12:
0092 .dbline 135
0092 .dbline 135
0092 7894 sei
0094 .dbline 135
0094 0027 clr R16
0096 27C0 xjmp L9
0098 L10:
0098 .dbline 135
0098 F801 movw R30,R16
009A 6681 ldd R22,z+6
009C 7781 ldd R23,z+7
009E .dbline 135
009E E480 ldd R14,z+4
00A0 F580 ldd R15,z+5
00A2 .dbline 135
00A2 4085 ldd R20,z+8
00A4 5185 ldd R21,z+9
00A6 .dbline 135
00A6 6E15 cp R22,R14
00A8 7F05 cpc R23,R15
00AA 31F4 brne L13
00AC X7:
00AC 4030 cpi R20,0
00AE 4507 cpc R20,R21
00B0 19F4 brne L13
00B2 X8:
00B2 .dbline 135
00B2 .dbline 135
00B2 7894 sei
00B4 .dbline 135
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -