📄 rd_adt_queue.s
字号:
X8:
.dbline 137
.dbline 137
sei
.dbline 137
clr R16
rjmp L9
L13:
.dbline 137
movw R2,R22
subi R22,255 ; offset = 1
sbci R23,255
movw R30,R2
add R30,R14
adc R31,R15
ldd R2,z+0
movw R30,R18
std z+0,R2
.dbline 137
subi R20,1
sbci R21,0
.dbline 137
cp R22,R12
cpc R23,R13
brne L15
X9:
.dbline 137
.dbline 137
clr R22
clr R23
.dbline 137
L15:
.dbline 137
movw R30,R16
std z+5,R23
std z+4,R22
.dbline 137
std z+9,R21
std z+8,R20
.dbline 137
.dbline 137
out 0x3f,R10
.dbline 137
.dbline 170
; (
; pBuffer = pQueue->pBuffer;
; nSize = pQueue->nSize;
;
; if ((pBuffer == NULL) || (!nSize))
; {
; SEI();
; return FALSE; //缓冲区未分配空间
; }
; nTail = pQueue->nTail;
; nHead = pQueue->nHead;
; nCount = pQueue->nCount;
;
;
; if ((nTail == nHead) && (nCount == 0)) //缓冲区为空
; {
; SEI();
; return FALSE;
; }
;
; (*pData) = pBuffer[nHead++];
;
; nCount--;
; if (nHead == nSize)
; {
; nHead = 0;
; }
;
; pQueue->nHead = nHead;
; pQueue->nCount = nCount;
; )
;
; return TRUE;
ldi R16,1
.dbline -2
L9:
.dbline 0 ; func end
adiw R28,2
rjmp pop_xgsetF0FC
.dbsym r cflags0 10 c
.dbsym r pBuffer 14 pc
.dbsym r nHead1 22 i
.dbsym r nCount0 20 i
.dbsym r nHead0 22 i
.dbsym l nTail0 0 i
.dbsym r nSize0 12 i
.dbsym r pData 18 pc
.dbsym r pQueue 16 pS[AbstructDataTypeQueue]
.dbend
.dbfunc e ADT_Queue_Check_Empty _ADT_Queue_Check_Empty fc
; cflags0 -> R10
; pBuffer -> R12,R13
; pQueue -> R16,R17
.even
_ADT_Queue_Check_Empty::
rcall push_xgset003C
.dbline -1
.dbline 180
; }
;
; /***********************************************************
; * 函数说明:队列判空函数 *
; * 输入: 队列指针 *
; * 输出: 队列是否为空 *
; * 调用函数:无 *
; ***********************************************************/
; BOOL ADT_Queue_Check_Empty(ADT_QUEUE *pQueue)
; {
.dbline 183
; uint8 *pBuffer;
;
; SAFE_CODE_PERFORMANCE
.dbline 183
in R10,0x3f
.dbline 183
cli
.dbline 183
movw R30,R16
ldd R12,z+0
ldd R13,z+1
.dbline 183
tst R12
brne X10
tst R13
breq L20
X10:
ldd R2,z+2
ldd R3,z+3
tst R2
brne L18
tst R3
brne L18
X11:
L20:
.dbline 183
.dbline 183
sei
.dbline 183
ldi R16,1
rjmp L17
L18:
.dbline 183
movw R30,R16
ldd R2,z+4
ldd R3,z+5
ldd R4,z+6
ldd R5,z+7
cp R4,R2
cpc R5,R3
brne L21
X12:
ldd R2,z+8
ldd R3,z+9
tst R2
brne L21
tst R3
brne L21
X13:
.dbline 183
.dbline 183
sei
.dbline 183
ldi R16,1
rjmp L17
L21:
.dbline 183
.dbline 183
out 0x3f,R10
.dbline 183
.dbline 202
; (
; pBuffer = pQueue->pBuffer;
;
; if ((pBuffer == NULL) || (!(pQueue->nSize)))
; {
; SEI();
; return TRUE; //缓冲区未分配空间
; }
;
;
; if (((pQueue->nTail) == (pQueue->nHead))
; && ((pQueue->nCount) == 0)) //缓冲区为空
; {
; SEI();
; return TRUE;
; }
; )
;
; return FALSE;
clr R16
.dbline -2
L17:
.dbline 0 ; func end
rjmp pop_xgset003C
.dbsym r cflags0 10 c
.dbsym r pBuffer 12 pc
.dbsym r pQueue 16 pS[AbstructDataTypeQueue]
.dbend
.dbfunc e ADT_Queue_Peek_From_Buffer _ADT_Queue_Peek_From_Buffer fc
; cflags0 -> R10
; pBuffer -> R12,R13
; nCount0 -> R20,R21
; nHead0 -> R14,R15
; nTail0 -> R22,R23
; nSize0 -> R14,R15
; pData -> R18,R19
; pQueue -> R16,R17
.even
_ADT_Queue_Peek_From_Buffer::
rcall push_xgsetF0FC
.dbline -1
.dbline 212
; }
;
; /***********************************************************
; * 函数说明:队列首个数据预览函数 *
; * 输入: 存放读取变量的空间指针 *
; * 输出: 队列是否为空 *
; * 调用函数:无 *
; ***********************************************************/
; BOOL ADT_Queue_Peek_From_Buffer(ADT_QUEUE *pQueue,uint8 *pData)
; {
.dbline 219
; uint8 *pBuffer;
; uint nSize;
; uint nTail;
; uint nHead;
; uint nCount;
;
; SAFE_CODE_PERFORMANCE //原子操作
.dbline 219
in R10,0x3f
.dbline 219
cli
.dbline 219
movw R30,R16
ldd R12,z+0
ldd R13,z+1
.dbline 219
ldd R14,z+2
ldd R15,z+3
.dbline 219
tst R12
brne X14
tst R13
breq L26
X14:
tst R14
brne L24
tst R15
brne L24
X15:
L26:
.dbline 219
.dbline 219
sei
.dbline 219
clr R16
rjmp L23
L24:
.dbline 219
movw R30,R16
ldd R22,z+6
ldd R23,z+7
.dbline 219
ldd R14,z+4
ldd R15,z+5
.dbline 219
ldd R20,z+8
ldd R21,z+9
.dbline 219
cp R22,R14
cpc R23,R15
brne L27
X16:
cpi R20,0
cpc R20,R21
brne L27
X17:
.dbline 219
.dbline 219
sei
.dbline 219
clr R16
rjmp L23
L27:
.dbline 219
movw R30,R14
add R30,R12
adc R31,R13
ldd R2,z+0
movw R30,R18
std z+0,R2
.dbline 219
.dbline 219
out 0x3f,R10
.dbline 219
.dbline 243
; (
; pBuffer = pQueue->pBuffer;
; nSize = pQueue->nSize;
;
; if ((pBuffer == NULL) || (!nSize))
; {
; SEI();
; return FALSE; //缓冲区未分配空间
; }
; nTail = pQueue->nTail;
; nHead = pQueue->nHead;
; nCount = pQueue->nCount;
;
;
; if ((nTail == nHead) && (nCount == 0)) //缓冲区为空
; {
; SEI();
; return FALSE;
; }
;
; (*pData) = pBuffer[nHead];
; )
;
; return TRUE;
ldi R16,1
.dbline -2
L23:
.dbline 0 ; func end
rjmp pop_xgsetF0FC
.dbsym r cflags0 10 c
.dbsym r pBuffer 12 pc
.dbsym r nCount0 20 i
.dbsym r nHead0 14 i
.dbsym r nTail0 22 i
.dbsym r nSize0 14 i
.dbsym r pData 18 pc
.dbsym r pQueue 16 pS[AbstructDataTypeQueue]
.dbend
; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -