📄 rd_adt_queue.lis
字号:
.module RD_ADT_QUEUE.c
.area text(rom, con, rel)
0000 .dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块应用版\Relative_Locate_Module\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 ; cflags0 -> R10
0000 ; pBuffer -> R14,R15
0000 ; nCount0 -> R20,R21
0000 ; nHead0 -> y+0
0000 ; nTail0 -> R22,R23
0000 ; nSize0 -> R12,R13
0000 ; cData -> R18
0000 ; pQueue -> R16,R17
.even
0000 _ADT_Queue_Add_To_Buffer::
0000 00D0 rcall push_xgsetF0FC
0002 2297 sbiw R28,2
0004 .dbline -1
0004 .dbline 79
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 ; # include "PF_Config.h"
0004 ;
0004 ; /***********************************************************
0004 ; * 函数说明:抽象数据类型队列,系统默认队列缓冲添加函数 *
0004 ; * 输入: 要添加到缓冲区的数据 *
0004 ; * 输出: 添加是否成功 *
0004 ; * 调用函数:无 *
0004 ; ***********************************************************/
0004 ; BOOL ADT_Queue_Add_To_Buffer(ADT_QUEUE *pQueue,uint8 cData)
0004 ; {
0004 .dbline 87
0004 ; uint8 *pBuffer;
0004 ; uint nSize;
0004 ; uint nTail;
0004 ; uint nHead;
0004 ; uint nCount;
0004 ;
0004 ; //PORTG ^= BIT(PG3);
0004 ; SAFE_CODE_PERFORMANCE //原子操作
0004 .dbline 87
0004 AFB6 in R10,0x3f
0006 .dbline 87
0006 F894 cli
0008 .dbline 87
0008 F801 movw R30,R16
000A E080 ldd R14,z+0
000C F180 ldd R15,z+1
000E .dbline 87
000E C280 ldd R12,z+2
0010 D380 ldd R13,z+3
0012 .dbline 87
0012 EE20 tst R14
0014 11F4 brne X0
0016 FF20 tst R15
0018 21F0 breq L4
001A X0:
001A CC20 tst R12
001C 29F4 brne L2
001E DD20 tst R13
0020 19F4 brne L2
0022 X1:
0022 L4:
0022 .dbline 87
0022 .dbline 87
0022 7894 sei
0024 .dbline 87
0024 0027 clr R16
0026 27C0 rjmp L1
0028 L2:
0028 .dbline 87
0028 F801 movw R30,R16
002A 6681 ldd R22,z+6
002C 7781 ldd R23,z+7
002E .dbline 87
002E 2480 ldd R2,z+4
0030 3580 ldd R3,z+5
0032 3982 std y+1,R3
0034 2882 std y+0,R2
0036 .dbline 87
0036 4085 ldd R20,z+8
0038 5185 ldd R21,z+9
003A .dbline 87
003A 0101 movw R0,R2
003C 6215 cp R22,R2
003E 7305 cpc R23,R3
0040 31F4 brne L5
0042 X2:
0042 4C15 cp R20,R12
0044 5D05 cpc R21,R13
0046 19F4 brne L5
0048 X3:
0048 .dbline 87
0048 .dbline 87
0048 7894 sei
004A .dbline 87
004A 0027 clr R16
004C 14C0 rjmp L1
004E L5:
004E .dbline 87
004E FB01 movw R30,R22
0050 EE0D add R30,R14
0052 FF1D adc R31,R15
0054 2083 std z+0,R18
0056 .dbline 87
0056 6F5F subi R22,255 ; offset = 1
0058 7F4F sbci R23,255
005A .dbline 87
005A 4F5F subi R20,255 ; offset = 1
005C 5F4F sbci R21,255
005E .dbline 87
005E 6C15 cp R22,R12
0060 7D05 cpc R23,R13
0062 11F4 brne L7
0064 X4:
0064 .dbline 87
0064 .dbline 87
0064 6627 clr R22
0066 7727 clr R23
0068 .dbline 87
0068 L7:
0068 .dbline 87
0068 F801 movw R30,R16
006A 7783 std z+7,R23
006C 6683 std z+6,R22
006E .dbline 87
006E 5187 std z+9,R21
0070 4087 std z+8,R20
0072 .dbline 87
0072 .dbline 87
0072 AFBE out 0x3f,R10
0074 .dbline 87
0074 .dbline 120
0074 ; (
0074 ; pBuffer = pQueue->pBuffer;
0074 ; nSize = pQueue->nSize;
0074 ;
0074 ; if ((pBuffer == NULL) || (!nSize))
0074 ; {
0074 ; SEI();
0074 ; return FALSE; //缓冲区未分配空间
0074 ; }
0074 ; nTail = pQueue->nTail;
0074 ; nHead = pQueue->nHead;
0074 ; nCount = pQueue->nCount;
0074 ;
0074 ;
0074 ; if ((nTail == nHead) && (nCount == nSize)) //缓冲区已满
0074 ; {
0074 ; SEI();
0074 ; return FALSE;
0074 ; }
0074 ;
0074 ; pBuffer[nTail] = cData;
0074 ; nTail++;
0074 ; nCount++;
0074 ; if (nTail == nSize)
0074 ; {
0074 ; nTail = 0;
0074 ; }
0074 ;
0074 ; pQueue->nTail = nTail;
0074 ; pQueue->nCount = nCount;
0074 ; )
0074 ;
0074 ; return TRUE;
0074 01E0 ldi R16,1
0076 .dbline -2
0076 L1:
0076 .dbline 0 ; func end
0076 2296 adiw R28,2
0078 00C0 rjmp pop_xgsetF0FC
007A .dbsym r cflags0 10 c
007A .dbsym r pBuffer 14 pc
007A .dbsym r nCount0 20 i
007A .dbsym l nHead0 0 i
007A .dbsym r nTail0 22 i
007A .dbsym r nSize0 12 i
007A .dbsym r cData 18 c
007A .dbsym r pQueue 16 pS[AbstructDataTypeQueue]
007A .dbend
007A .dbfunc e ADT_Queue_Get_From_Buffer _ADT_Queue_Get_From_Buffer fc
007A ; cflags0 -> R10
007A ; pBuffer -> R14,R15
007A ; nHead1 -> R22,R23
007A ; nCount0 -> R20,R21
007A ; nHead0 -> R22,R23
007A ; nTail0 -> y+0
007A ; nSize0 -> R12,R13
007A ; pData -> R18,R19
007A ; pQueue -> R16,R17
.even
007A _ADT_Queue_Get_From_Buffer::
007A 00D0 rcall push_xgsetF0FC
007C 2297 sbiw R28,2
007E .dbline -1
007E .dbline 130
007E ; }
007E ;
007E ; /***********************************************************
007E ; * 函数说明:抽象数据类型队列,系统默认队列缓冲区读取函数 *
007E ; * 输入: 存放读取变量的空间指针 *
007E ; * 输出: 队列是否为空 *
007E ; * 调用函数:无 *
007E ; ***********************************************************/
007E ; BOOL ADT_Queue_Get_From_Buffer(ADT_QUEUE *pQueue,uint8 *pData)
007E ; {
007E .dbline 137
007E ; uint8 *pBuffer;
007E ; uint nSize;
007E ; uint nTail;
007E ; uint nHead;
007E ; uint nCount;
007E ; //PORTG ^= BIT(PG3);
007E ; SAFE_CODE_PERFORMANCE //原子操作
007E .dbline 137
007E AFB6 in R10,0x3f
0080 .dbline 137
0080 F894 cli
0082 .dbline 137
0082 F801 movw R30,R16
0084 E080 ldd R14,z+0
0086 F180 ldd R15,z+1
0088 .dbline 137
0088 C280 ldd R12,z+2
008A D380 ldd R13,z+3
008C .dbline 137
008C EE20 tst R14
008E 11F4 brne X5
0090 FF20 tst R15
0092 21F0 breq L12
0094 X5:
0094 CC20 tst R12
0096 29F4 brne L10
0098 DD20 tst R13
009A 19F4 brne L10
009C X6:
009C L12:
009C .dbline 137
009C .dbline 137
009C 7894 sei
009E .dbline 137
009E 0027 clr R16
00A0 2AC0 rjmp L9
00A2 L10:
00A2 .dbline 137
00A2 F801 movw R30,R16
00A4 2680 ldd R2,z+6
00A6 3780 ldd R3,z+7
00A8 3982 std y+1,R3
00AA 2882 std y+0,R2
00AC .dbline 137
00AC 6481 ldd R22,z+4
00AE 7581 ldd R23,z+5
00B0 .dbline 137
00B0 4085 ldd R20,z+8
00B2 5185 ldd R21,z+9
00B4 .dbline 137
00B4 0101 movw R0,R2
00B6 2616 cp R2,R22
00B8 3706 cpc R3,R23
00BA 31F4 brne L13
00BC X7:
00BC 4030 cpi R20,0
00BE 4507 cpc R20,R21
00C0 19F4 brne L13
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -