saddr.s51
来自「TI的基于ZIGBEE2006的协议栈」· S51 代码 · 共 753 行 · 第 1/3 页
S51
753 行
CFI VB SameValue
CFI B Undefined
CFI A Undefined
CFI PSW SameValue
CFI DPL0 SameValue
CFI DPH0 SameValue
CFI R0 Undefined
CFI R1 Undefined
CFI R2 Undefined
CFI R3 Undefined
CFI R4 Undefined
CFI R5 Undefined
CFI R6 SameValue
CFI R7 SameValue
CFI V0 SameValue
CFI V1 SameValue
CFI V2 SameValue
CFI V3 SameValue
CFI V4 SameValue
CFI V5 SameValue
CFI V6 SameValue
CFI V7 SameValue
CFI PSPH Undefined
CFI PSPL Undefined
CFI XSPH Undefined
CFI XSPL Undefined
CFI ?RET Concat
CFI ?BRET_EXT Frame(CFA_SP, 3)
CFI ?RET_HIGH Frame(CFA_SP, 2)
CFI ?RET_LOW Frame(CFA_SP, 1)
CFI EndCommon cfiCommon0
EXTERN osal_memcpy
FUNCTION osal_memcpy,0202H
ARGFRAME XSTACK, 14, STACK
// C:\Texas Instruments\ZStack-1.4.2\Components\services\saddr\saddr.c
// 1 /****************************************************************************
// 2 Filename: saddr.c
// 3 Revised: $Date: 2006-04-06 08:19:08 -0700 (Thu, 06 Apr 2006) $
// 4 Revision: $Revision: 10396 $
// 5
// 6 Description:
// 7
// 8 Zigbee and 802.15.4 device address utility functions.
// 9
// 10
// 11 Copyright (c) 2006 by Texas Instruments, Inc.
// 12 All Rights Reserved. Permission to use, reproduce, copy, prepare
// 13 derivative works, modify, distribute, perform, display or sell this
// 14 software and/or its documentation for any purpose is prohibited
// 15 without the express written consent of Texas Instruments, Inc.
// 16 ****************************************************************************/
// 17
// 18 /****************************************************************************
// 19 * INCLUDES
// 20 */
// 21 #include "hal_types.h"
// 22 #include "OSAL.h"
// 23 #include "saddr.h"
// 24
// 25 /****************************************************************************
// 26 * @fn sAddrCmp
// 27 *
// 28 * @brief Compare two device addresses.
// 29 *
// 30 * input parameters
// 31 *
// 32 * @param pAddr1 - Pointer to first address.
// 33 * @param pAddr2 - Pointer to second address.
// 34 *
// 35 * output parameters
// 36 *
// 37 * @return TRUE if addresses are equal, FALSE otherwise
// 38 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 39 bool sAddrCmp(const sAddr_t *pAddr1, const sAddr_t *pAddr2)
sAddrCmp:
CFI Block cfiBlock0 Using cfiCommon0
CFI Function sAddrCmp
// 40 {
FUNCALL sAddrCmp, sAddrExtCmp
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
MOV A,#-0x9
LCALL ?BANKED_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 9)
; Saved register size: 9
; Auto size: 0
// 41 if (pAddr1->addrMode != pAddr2->addrMode)
MOV DPL,R2
MOV DPH,R3
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R6,A
MOV DPL,R4
MOV DPH,R5
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
XRL A,R6
JZ ??sAddrCmp_0
// 42 {
// 43 return FALSE;
??sAddrCmp_1:
MOV R1,#0x0
SJMP ??sAddrCmp_2
// 44 }
// 45 else if (pAddr1->addrMode == SADDR_MODE_NONE)
??sAddrCmp_0:
MOV DPL,R2
MOV DPH,R3
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
JZ ??sAddrCmp_1
// 46 {
// 47 return FALSE;
// 48 }
// 49 else if (pAddr1->addrMode == SADDR_MODE_SHORT)
XRL A,#0x2
MOV DPL,R2
MOV DPH,R3
JNZ ??sAddrCmp_3
// 50 {
// 51 return (bool) (pAddr1->addr.shortAddr == pAddr2->addr.shortAddr);
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPL,R4
MOV DPH,R5
MOVX A,@DPTR
XRL A,R0
JNZ ??sAddrCmp_4
INC DPTR
MOVX A,@DPTR
XRL A,R1
??sAddrCmp_4:
JNZ ??sAddrCmp_1
MOV R1,#0x1
SJMP ??sAddrCmp_2
// 52 }
// 53 else if (pAddr1->addrMode == SADDR_MODE_EXT)
??sAddrCmp_3:
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
XRL A,#0x3
JNZ ??sAddrCmp_1
// 54 {
// 55 return (sAddrExtCmp(pAddr1->addr.extAddr, pAddr2->addr.extAddr));
; Setup parameters for call to function sAddrExtCmp
MOV DPTR,#(sAddrExtCmp & 0xffff)
MOV A,#((sAddrExtCmp >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
CFI EndBlock cfiBlock0
??sAddrCmp_2:
REQUIRE ?Subroutine0
; // Fall through to label ?Subroutine0
// 56 }
// 57 else
// 58 {
// 59 return FALSE;
// 60 }
// 61 }
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine0:
CFI Block cfiBlock1 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 9)
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
MOV R7,#0x1
LJMP ?BANKED_LEAVE_XDATA
CFI EndBlock cfiBlock1
// 62
// 63 /****************************************************************************
// 64 * @fn sAddrCpy
// 65 *
// 66 * @brief Copy a device address.
// 67 *
// 68 * input parameters
// 69 *
// 70 * @param pSrc - Pointer to address to copy.
// 71 *
// 72 * output parameters
// 73 *
// 74 * @param pDest - Pointer to address of copy.
// 75 *
// 76 * @return None.
// 77 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 78 void sAddrCpy(sAddr_t *pDest, const sAddr_t *pSrc)
sAddrCpy:
CFI Block cfiBlock2 Using cfiCommon0
CFI Function sAddrCpy
// 79 {
FUNCALL sAddrCpy, sAddrExtCpy
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
MOV A,#-0x9
LCALL ?BANKED_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?