osal.s51
来自「TI的基于ZIGBEE2006的协议栈」· S51 代码 · 共 1,612 行 · 第 1/5 页
S51
1,612 行
// 113 }
// 114
// 115 /*********************************************************************
// 116 * @fn osal_memcpy
// 117 *
// 118 * @brief
// 119 *
// 120 * Generic memory copy.
// 121 *
// 122 * Note: This function differs from the standard memcpy(), since
// 123 * it returns the pointer to the next destination byte. The
// 124 * standard memcpy() returns the original destination address.
// 125 *
// 126 * @param dst - destination address
// 127 * @param src - source address
// 128 * @param len - number of bytes to copy
// 129 *
// 130 * @return pointer to end of destination buffer
// 131 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 132 void *osal_memcpy( void *dst, const void GENERIC *src, unsigned int len )
osal_memcpy:
CFI Block cfiBlock1 Using cfiCommon0
CFI Function osal_memcpy
// 133 {
MOV A,#-0xb
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 V2 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 11)
; Saved register size: 11
; Auto size: 0
MOV A,R2
MOV R6,A
MOV A,R3
MOV R7,A
MOV A,#0xb
LCALL ?XSTACK_DISP0_8
LCALL ?Subroutine5 & 0xFFFF
??CrossCallReturnLabel_19:
INC DPTR
MOVX A,@DPTR
// 134 byte *pDst;
// 135 const byte GENERIC *pSrc;
// 136
// 137 pSrc = src;
MOV R1,?V0 + 0
MOV R2,?V0 + 1
MOV R3,A
// 138 pDst = dst;
MOV DPL,R6
MOV DPH,R7
SJMP ??osal_memcpy_0
// 139
// 140 while ( len-- )
// 141 *pDst++ = *pSrc++;
??osal_memcpy_1:
LCALL ?C_GPTR_LOAD
MOVX @DPTR,A
MOV A,R1
ADD A,#0x1
INC R1
MOV A,R2
ADDC A,#0x0
MOV R2,A
INC DPTR
??osal_memcpy_0:
MOV A,R4
MOV R6,A
MOV A,R5
MOV R7,A
MOV A,#-0x1
ADD A,R6
DEC R4
MOV A,#-0x1
ADDC A,R7
MOV R5,A
MOV A,R6
JNZ ??osal_memcpy_2
MOV A,R7
??osal_memcpy_2:
JNZ ??osal_memcpy_1
// 142
// 143 return ( pDst );
MOV R2,DPL
MOV R3,DPH
CFI EndBlock cfiBlock1
REQUIRE ?Subroutine20
; // Fall through to label ?Subroutine20
// 144 }
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine20:
CFI Block cfiBlock2 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 11)
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-10)))
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(-11)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V2 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,#0x3
LJMP ?BANKED_LEAVE_XDATA
CFI EndBlock cfiBlock2
// 145
// 146 /*********************************************************************
// 147 * @fn osal_cpyExtAddr
// 148 *
// 149 * @brief
// 150 *
// 151 * Copy extended addresses. This function will copy 8 bytes.
// 152 *
// 153 * @param dest destination address pointer
// 154 * @param src source address pointer
// 155 *
// 156 * @return dest + Z_EXTADDR_LEN
// 157 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 158 void *osal_cpyExtAddr( void *dest, void *src )
osal_cpyExtAddr:
CFI Block cfiBlock3 Using cfiCommon0
CFI Function osal_cpyExtAddr
// 159 {
FUNCALL osal_cpyExtAddr, osal_memcpy
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
MOV A,#-0xb
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 V2 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 11)
; Saved register size: 11
; Auto size: 0
// 160 return osal_memcpy( dest, src, Z_EXTADDR_LEN );
; Setup parameters for call to function osal_memcpy
MOV ?V0 + 0,R4
MOV ?V0 + 1,R5
MOV ?V0 + 2,#0x0
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_THREE
CFI CFA_XSP16 add(XSP16, 14)
MOV R4,#0x8
MOV R5,#0x0
MOV DPTR,#(osal_memcpy & 0xffff)
MOV A,#((osal_memcpy >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,#0x3
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 11)
SJMP ?Subroutine20
CFI EndBlock cfiBlock3
// 161 }
// 162
// 163 /*********************************************************************
// 164 * @fn osal_memset
// 165 *
// 166 * @brief
// 167 *
// 168 * Set memory buffer to value.
// 169 *
// 170 * @param dest - pointer to buffer
// 171 * @param value - what to set each byte of the message
// 172 * @param size - how big
// 173 *
// 174 * @return value of next widget, 0 if no widget found
// 175 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 176 void *osal_memset( void *dest, byte value, int len )
osal_memset:
CFI Block cfiBlock4 Using cfiCommon0
CFI Function osal_memset
// 177 {
FUNCALL osal_memset, memset
LOCFRAME XSTACK, 12, STACK
ARGFRAME XSTACK, 12, STACK
MOV A,#-0xa
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 V1 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 10)
; Saved register size: 10
; Auto size: 0
// 178 return memset( dest, value, len );
; Setup parameters for call to function memset
MOV ?V0 + 0,R4
MOV ?V0 + 1,R5
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 12)
MOV A,R1
MOV R4,A
MOV R5,#0x0
MOV DPTR,#(memset & 0xffff)
MOV A,#((memset >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,#0x2
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 10)
LJMP ?Subroutine21 & 0xFFFF
CFI EndBlock cfiBlock4
// 179 }
// 180
// 181 /*********************************************************************
// 182 * @fn osal_build_uint16
// 183 *
// 184 * @brief
// 185 *
// 186 * Build a uint16 out of 2 bytes (0 then 1).
// 187 *
// 188 * @param swapped - 0 then 1
// 189 *
// 190 * @return uint16
// 191 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 192 uint16 osal_build_uint16( byte *swapped )
osal_build_uint16:
CFI Block cfiBlock5 Using cfiCommon0
CFI Function osal_build_uint16
// 193 {
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
// 194 return ( BUILD_UINT16( swapped[0], swapped[1] ) );
MOV DPL,R2
MOV DPH,R3
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
CLR A
ADD A,R4
MOV R2,A
MOV A,R1
ADDC A,#0x0
MOV R3,A
CFI EndBlock cfiBlock5
REQUIRE ?Subroutine23
; // Fall through to label ?Subroutine23
// 195 }
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine23:
CFI Block cfiBlock6 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 cfiBlock6
// 196
// 197 /*********************************************************************
// 198 * @fn osal_build_uint32
// 199 *
// 200 * @brief
// 201 *
// 202 * Build a uint32 out of sequential bytes.
// 203 *
// 204 * @param swapped - sequential bytes
// 205 * @param len - number of bytes in the byte array
// 206 *
// 207 * @return uint32
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?