📄 mac_tx_pool.lst
字号:
61 // A pointer to the reserved packet, or NULL if the pool is empty
62 //-------------------------------------------------------------------------------------------------------
\ In segment NEAR_CODE, align 1, keep-with-next
63 ROOT MAC_TX_PACKET * mtxpReservePacket(void) {
\ mtxpReservePacket:
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
64 MAC_TX_PACKET *pPacket;
65 UINT8 n;
66 for (n = 0; n < MAC_OPT_TX_POOL_SIZE; n++) {
\ 000004 7B00 MOV R3,#0x0
67 pPacket = &pMtxPacketPool[n];
\ ??mtxpReservePacket_0:
\ 000006 EB MOV A,R3
\ 000007 75F093 MOV B,#-0x6d
\ 00000A A4 MUL AB
\ 00000B 24.. ADD A,#(pMtxPacketPool & 0xff)
\ 00000D F582 MOV DPL,A
\ 00000F E5F0 MOV A,B
\ 000011 34.. ADDC A,#((pMtxPacketPool >> 8) & 0xff)
\ 000013 F583 MOV DPH,A
68 if (!pPacket->occupied) {
\ 000015 E0 MOVX A,@DPTR
\ 000016 7011 JNZ ??mtxpReservePacket_1
69 DISABLE_GLOBAL_INT();
\ 000018 C2AF CLR 0xa8.7
70 if (!pPacket->occupied) {
\ 00001A 700B JNZ ??mtxpReservePacket_2
71 pPacket->occupied = TRUE;
\ 00001C 7401 MOV A,#0x1
\ 00001E F0 MOVX @DPTR,A
72 ENABLE_GLOBAL_INT();
\ 00001F D2AF SETB 0xa8.7
73 return pPacket;
\ 000021 AA82 MOV R2,DPL
\ 000023 AB83 MOV R3,DPH
\ 000025 800D SJMP ??mtxpReservePacket_3
74 }
75 ENABLE_GLOBAL_INT();
\ ??mtxpReservePacket_2:
\ 000027 D2AF SETB 0xa8.7
76 }
77 }
\ ??mtxpReservePacket_1:
\ 000029 0B INC R3
\ 00002A EB MOV A,R3
\ 00002B C3 CLR C
\ 00002C 9406 SUBB A,#0x6
\ 00002E 40D6 JC ??mtxpReservePacket_0
78 return NULL;
\ 000030 7A00 MOV R2,#0x0
\ 000032 7B00 MOV R3,#0x0
\ ??mtxpReservePacket_3:
\ 000034 80.. SJMP ?Subroutine0
79 } // mtxpReservePacket
80
81
82
83
84 //-------------------------------------------------------------------------------------------------------
85 // void mtxpReleasePacket(MAC_TX_PACKET* pPacket)
86 //
87 // DESCRIPTION:
88 // Releases a packet back to the TX packet pool
89 //
90 // ARGUMENTS:
91 // MAC_TX_PACKET* pPacket
92 // A pointer to the packet to be released. This parameter can be NULL
93 //-------------------------------------------------------------------------------------------------------
\ In segment NEAR_CODE, align 1, keep-with-next
94 ROOT void mtxpReleasePacket(MAC_TX_PACKET *pPacket) {
\ mtxpReleasePacket:
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
95 if (pPacket) {
\ 000004 EA MOV A,R2
\ 000005 7001 JNZ ??mtxpReleasePacket_0
\ 000007 EB MOV A,R3
\ ??mtxpReleasePacket_0:
\ 000008 601D JZ ??mtxpReleasePacket_1
96 if (mtxInfo.pPacket == pPacket) mtxInfo.pPacket = NULL;
\ 00000A 90.... MOV DPTR,#mtxInfo
\ 00000D E0 MOVX A,@DPTR
\ 00000E F8 MOV R0,A
\ 00000F A3 INC DPTR
\ 000010 E0 MOVX A,@DPTR
\ 000011 F9 MOV R1,A
\ 000012 EA MOV A,R2
\ 000013 68 XRL A,R0
\ 000014 7002 JNZ ??mtxpReleasePacket_2
\ 000016 EB MOV A,R3
\ 000017 69 XRL A,R1
\ ??mtxpReleasePacket_2:
\ 000018 7007 JNZ ??mtxpReleasePacket_3
\ 00001A 90.... MOV DPTR,#mtxInfo
\ 00001D E4 CLR A
\ 00001E F0 MOVX @DPTR,A
\ 00001F A3 INC DPTR
\ 000020 F0 MOVX @DPTR,A
97 pPacket->occupied = FALSE;
\ ??mtxpReleasePacket_3:
\ 000021 E4 CLR A
\ 000022 8A82 MOV DPL,R2
\ 000024 8B83 MOV DPH,R3
\ 000026 F0 MOVX @DPTR,A
98 }
99 } // mtxpReleasePacket
\ ??mtxpReleasePacket_1:
\ 000027 80.. SJMP ?Subroutine0
\ In segment SFR_AN, at 0xa8
\ union <unnamed> volatile __sfr _A_IEN0
\ _A_IEN0:
\ 000000 DS 1
100
Maximum stack usage in bytes:
Function ISTACK PSTACK XSTACK
-------- ------ ------ ------
mtxpInit 3 0 0
mtxpReleasePacket 3 0 0
mtxpReservePacket 3 0 0
Segment part sizes:
Function/Label Bytes
-------------- -----
pMtxPacketPool 882
mtxpInit 43
?Subroutine0 5
mtxpReservePacket 54
mtxpReleasePacket 41
_A_IEN0 1
143 bytes in segment NEAR_CODE
882 bytes in segment PM0_XDATA
1 byte in segment SFR_AN
143 bytes of CODE memory
0 bytes of DATA memory (+ 1 byte shared)
882 bytes of XDATA memory
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -