📄 rd_adt_queue.lis
字号:
00B4 0027 clr R16
00B6 17C0 xjmp L9
00B8 L13:
00B8 .dbline 135
00B8 B701 movw R22,R14
00BA 6F5F subi R22,255 ; offset = 1
00BC 7F4F sbci R23,255
00BE F701 movw R30,R14
00C0 EC0D add R30,R12
00C2 FD1D adc R31,R13
00C4 2080 ldd R2,z+0
00C6 F901 movw R30,R18
00C8 2082 std z+0,R2
00CA .dbline 135
00CA 4150 subi R20,1
00CC 5040 sbci R21,0
00CE .dbline 135
00CE 6A15 cp R22,R10
00D0 7B05 cpc R23,R11
00D2 11F4 brne L15
00D4 X9:
00D4 .dbline 135
00D4 .dbline 135
00D4 6627 clr R22
00D6 7727 clr R23
00D8 .dbline 135
00D8 L15:
00D8 .dbline 135
00D8 F801 movw R30,R16
00DA 7583 std z+5,R23
00DC 6483 std z+4,R22
00DE .dbline 135
00DE 5187 std z+9,R21
00E0 4087 std z+8,R20
00E2 .dbline 135
00E2 .dbline 135
00E2 7894 sei
00E4 .dbline 168
00E4 ; (
00E4 ; pBuffer = pQueue->pBuffer;
00E4 ; nSize = pQueue->nSize;
00E4 ;
00E4 ; if ((pBuffer == NULL) || (!nSize))
00E4 ; {
00E4 ; SEI();
00E4 ; return FALSE; //缓冲区未分配空间
00E4 ; }
00E4 ; nTail = pQueue->nTail;
00E4 ; nHead = pQueue->nHead;
00E4 ; nCount = pQueue->nCount;
00E4 ;
00E4 ;
00E4 ; if ((nTail == nHead) && (nCount == 0)) //缓冲区为空
00E4 ; {
00E4 ; SEI();
00E4 ; return FALSE;
00E4 ; }
00E4 ;
00E4 ; (*pData) = pBuffer[nHead++];
00E4 ;
00E4 ; nCount--;
00E4 ; if (nHead == nSize)
00E4 ; {
00E4 ; nHead = 0;
00E4 ; }
00E4 ;
00E4 ; pQueue->nHead = nHead;
00E4 ; pQueue->nCount = nCount;
00E4 ; )
00E4 ;
00E4 ; return TRUE;
00E4 01E0 ldi R16,1
00E6 .dbline -2
00E6 L9:
00E6 .dbline 0 ; func end
00E6 0C940000 xjmp pop_xgsetF0FC
00EA .dbsym r pBuffer 12 pc
00EA .dbsym r nHead1 22 i
00EA .dbsym r nCount0 20 i
00EA .dbsym r nHead0 14 i
00EA .dbsym r nTail0 22 i
00EA .dbsym r nSize0 10 i
00EA .dbsym r pData 18 pc
00EA .dbsym r pQueue 16 pS[AbstructDataTypeQueue]
00EA .dbend
00EA .dbfunc e ADT_Queue_Check_Empty _ADT_Queue_Check_Empty fc
00EA ; pBuffer -> R10,R11
00EA ; pQueue -> R16,R17
.even
00EA _ADT_Queue_Check_Empty::
00EA AA92 st -y,R10
00EC BA92 st -y,R11
00EE .dbline -1
00EE .dbline 178
00EE ; }
00EE ;
00EE ; /***********************************************************
00EE ; * 函数说明:队列判空函数 *
00EE ; * 输入: 队列指针 *
00EE ; * 输出: 队列是否为空 *
00EE ; * 调用函数:无 *
00EE ; ***********************************************************/
00EE ; BOOL ADT_Queue_Check_Empty(ADT_QUEUE *pQueue)
00EE ; {
00EE .dbline 181
00EE ; uint8 *pBuffer;
00EE ;
00EE ; SAFE_CODE_PERFORMANCE
00EE F894 cli
00F0 .dbline 181
00F0 F801 movw R30,R16
00F2 A080 ldd R10,z+0
00F4 B180 ldd R11,z+1
00F6 .dbline 181
00F6 AA20 tst R10
00F8 11F4 brne X10
00FA BB20 tst R11
00FC 31F0 breq L20
00FE X10:
00FE 2280 ldd R2,z+2
0100 3380 ldd R3,z+3
0102 2220 tst R2
0104 29F4 brne L18
0106 3320 tst R3
0108 19F4 brne L18
010A X11:
010A L20:
010A .dbline 181
010A .dbline 181
010A 7894 sei
010C .dbline 181
010C 01E0 ldi R16,1
010E 13C0 xjmp L17
0110 L18:
0110 .dbline 181
0110 F801 movw R30,R16
0112 2480 ldd R2,z+4
0114 3580 ldd R3,z+5
0116 4680 ldd R4,z+6
0118 5780 ldd R5,z+7
011A 4214 cp R4,R2
011C 5304 cpc R5,R3
011E 49F4 brne L21
0120 X12:
0120 2084 ldd R2,z+8
0122 3184 ldd R3,z+9
0124 2220 tst R2
0126 29F4 brne L21
0128 3320 tst R3
012A 19F4 brne L21
012C X13:
012C .dbline 181
012C .dbline 181
012C 7894 sei
012E .dbline 181
012E 01E0 ldi R16,1
0130 02C0 xjmp L17
0132 L21:
0132 .dbline 181
0132 .dbline 181
0132 7894 sei
0134 .dbline 200
0134 ; (
0134 ; pBuffer = pQueue->pBuffer;
0134 ;
0134 ; if ((pBuffer == NULL) || (!(pQueue->nSize)))
0134 ; {
0134 ; SEI();
0134 ; return TRUE; //缓冲区未分配空间
0134 ; }
0134 ;
0134 ;
0134 ; if (((pQueue->nTail) == (pQueue->nHead))
0134 ; && ((pQueue->nCount) == 0)) //缓冲区为空
0134 ; {
0134 ; SEI();
0134 ; return TRUE;
0134 ; }
0134 ; )
0134 ;
0134 ; return FALSE;
0134 0027 clr R16
0136 .dbline -2
0136 L17:
0136 .dbline 0 ; func end
0136 B990 ld R11,y+
0138 A990 ld R10,y+
013A 0895 ret
013C .dbsym r pBuffer 10 pc
013C .dbsym r pQueue 16 pS[AbstructDataTypeQueue]
013C .dbend
013C .dbfunc e ADT_Queue_Peek_From_Buffer _ADT_Queue_Peek_From_Buffer fc
013C ; pBuffer -> R10,R11
013C ; nCount0 -> R14,R15
013C ; nHead0 -> R12,R13
013C ; nTail0 -> R20,R21
013C ; nSize0 -> R12,R13
013C ; pData -> R18,R19
013C ; pQueue -> R16,R17
.even
013C _ADT_Queue_Peek_From_Buffer::
013C 0E940000 xcall push_xgset30FC
0140 .dbline -1
0140 .dbline 210
0140 ; }
0140 ;
0140 ; /***********************************************************
0140 ; * 函数说明:队列首个数据预览函数 *
0140 ; * 输入: 存放读取变量的空间指针 *
0140 ; * 输出: 队列是否为空 *
0140 ; * 调用函数:无 *
0140 ; ***********************************************************/
0140 ; BOOL ADT_Queue_Peek_From_Buffer(ADT_QUEUE *pQueue,uint8 *pData)
0140 ; {
0140 .dbline 217
0140 ; uint8 *pBuffer;
0140 ; uint nSize;
0140 ; uint nTail;
0140 ; uint nHead;
0140 ; uint nCount;
0140 ;
0140 ; SAFE_CODE_PERFORMANCE //原子操作
0140 F894 cli
0142 .dbline 217
0142 F801 movw R30,R16
0144 A080 ldd R10,z+0
0146 B180 ldd R11,z+1
0148 .dbline 217
0148 C280 ldd R12,z+2
014A D380 ldd R13,z+3
014C .dbline 217
014C AA20 tst R10
014E 11F4 brne X14
0150 BB20 tst R11
0152 21F0 breq L26
0154 X14:
0154 CC20 tst R12
0156 29F4 brne L24
0158 DD20 tst R13
015A 19F4 brne L24
015C X15:
015C L26:
015C .dbline 217
015C .dbline 217
015C 7894 sei
015E .dbline 217
015E 0027 clr R16
0160 19C0 xjmp L23
0162 L24:
0162 .dbline 217
0162 F801 movw R30,R16
0164 4681 ldd R20,z+6
0166 5781 ldd R21,z+7
0168 .dbline 217
0168 C480 ldd R12,z+4
016A D580 ldd R13,z+5
016C .dbline 217
016C E084 ldd R14,z+8
016E F184 ldd R15,z+9
0170 .dbline 217
0170 4C15 cp R20,R12
0172 5D05 cpc R21,R13
0174 39F4 brne L27
0176 X16:
0176 EE20 tst R14
0178 29F4 brne L27
017A FF20 tst R15
017C 19F4 brne L27
017E X17:
017E .dbline 217
017E .dbline 217
017E 7894 sei
0180 .dbline 217
0180 0027 clr R16
0182 08C0 xjmp L23
0184 L27:
0184 .dbline 217
0184 F601 movw R30,R12
0186 EA0D add R30,R10
0188 FB1D adc R31,R11
018A 2080 ldd R2,z+0
018C F901 movw R30,R18
018E 2082 std z+0,R2
0190 .dbline 217
0190 .dbline 217
0190 7894 sei
0192 .dbline 241
0192 ; (
0192 ; pBuffer = pQueue->pBuffer;
0192 ; nSize = pQueue->nSize;
0192 ;
0192 ; if ((pBuffer == NULL) || (!nSize))
0192 ; {
0192 ; SEI();
0192 ; return FALSE; //缓冲区未分配空间
0192 ; }
0192 ; nTail = pQueue->nTail;
0192 ; nHead = pQueue->nHead;
0192 ; nCount = pQueue->nCount;
0192 ;
0192 ;
0192 ; if ((nTail == nHead) && (nCount == 0)) //缓冲区为空
0192 ; {
0192 ; SEI();
0192 ; return FALSE;
0192 ; }
0192 ;
0192 ; (*pData) = pBuffer[nHead];
0192 ; )
0192 ;
0192 ; return TRUE;
0192 01E0 ldi R16,1
0194 .dbline -2
0194 L23:
0194 .dbline 0 ; func end
0194 0C940000 xjmp pop_xgset30FC
0198 .dbsym r pBuffer 10 pc
0198 .dbsym r nCount0 14 i
0198 .dbsym r nHead0 12 i
0198 .dbsym r nTail0 20 i
0198 .dbsym r nSize0 12 i
0198 .dbsym r pData 18 pc
0198 .dbsym r pQueue 16 pS[AbstructDataTypeQueue]
0198 .dbend
0198 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -