3582 lines
161 KiB
Plaintext
3582 lines
161 KiB
Plaintext
###############################################################################
|
|
#
|
|
# IAR C/C++ Compiler V10.30.1.6000 for 8051 23/Aug/2019 12:13:07
|
|
# Copyright 2004-2018 IAR Systems AB.
|
|
# PC-locked license - IAR Embedded Workbench for 8051
|
|
#
|
|
# Core = plain
|
|
# Code model = banked
|
|
# Data model = large
|
|
# Calling convention = xdata reentrant
|
|
# Constant location = data_rom
|
|
# Dptr setup = 1,16
|
|
#
|
|
# Source file =
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Components\osal\common\OSAL.c
|
|
# Command line =
|
|
# -f C:\Users\VULCAN\AppData\Local\Temp\EWD6C0.tmp
|
|
# (E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Components\osal\common\OSAL.c
|
|
# -D ZIGBEEPRO -D ZTOOL_P1 -D MT_TASK -D MT_SYS_FUNC -D MT_ZDO_FUNC -D
|
|
# LCD_SUPPORTED=DEBUG -D SAPP_ZSTACK -lC
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\RouterEB\List
|
|
# -lA
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\RouterEB\List
|
|
# --diag_suppress Pe001,Pa010 -o
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\RouterEB\Obj
|
|
# -e --debug --core=plain --dptr=16,1 --data_model=large
|
|
# --code_model=banked --calling_convention=xdata_reentrant
|
|
# --place_constants=data_rom --nr_virtual_regs 8 -f
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\zstack\Tools\CC2530DB\f8wRouter.cfg
|
|
# (-DCPU32MHZ -DROOT=__near_func -DMAC_CFG_APP_PENDING_QUEUE=TRUE
|
|
# -DMAC_CFG_TX_DATA_MAX=5 -DMAC_CFG_TX_MAX=8 -DMAC_CFG_RX_MAX=5
|
|
# -DRTR_NWK) -f
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\zstack\Tools\CC2530DB\f8wConfig.cfg
|
|
# (-DZIGBEEPRO -DSECURE=0 -DZG_SECURE_DYNAMIC=0 -DREFLECTOR
|
|
# -DDEFAULT_CHANLIST=0x00800000 -DZDAPP_CONFIG_PAN_ID=0x0057
|
|
# -DNWK_START_DELAY=100 -DEXTENDED_JOINING_RANDOM_MASK=0x007F
|
|
# -DBEACON_REQUEST_DELAY=100 -DBEACON_REQ_DELAY_MASK=0x00FF
|
|
# -DLINK_STATUS_JITTER_MASK=0x007F -DROUTE_EXPIRY_TIME=30
|
|
# -DAPSC_ACK_WAIT_DURATION_POLLED=3000 -DNWK_INDIRECT_MSG_TIMEOUT=7
|
|
# -DMAX_RREQ_ENTRIES=8 -DAPSC_MAX_FRAME_RETRIES=3
|
|
# -DNWK_MAX_DATA_RETRIES=2 -DMAX_POLL_FAILURE_RETRIES=2 -DMAX_BCAST=9
|
|
# -DAPS_MAX_GROUPS=16 -DMAX_RTG_ENTRIES=40 -DNWK_MAX_BINDING_ENTRIES=4
|
|
# -DMAX_BINDING_CLUSTER_IDS=4 "-DDEFAULT_KEY={0x01, 0x03, 0x05, 0x07,
|
|
# 0x09, 0x0B, 0x0D, 0x0F, 0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C,
|
|
# 0x0D}" -DMAC_MAX_FRAME_SIZE=116 -DZDNWKMGR_MIN_TRANSMISSIONS=20
|
|
# "-DCONST=const __code" -DGENERIC=__generic -DRFD_RCVC_ALWAYS_ON=FALSE
|
|
# -DPOLL_RATE=1000 -DQUEUED_POLL_RATE=100 -DRESPONSE_POLL_RATE=100
|
|
# -DREJOIN_POLL_RATE=440) -I
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\
|
|
# -I
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\Source\
|
|
# -I
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\zstack\ZMain\TI2530DB\
|
|
# -I
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\hal\include\
|
|
# -I
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\hal\target\CC2530EB\
|
|
# -I
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\mac\include\
|
|
# -I
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\mac\high_level\
|
|
# -I
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\mac\low_level\srf04\
|
|
# -I
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\mac\low_level\srf04\single_chip\
|
|
# -I
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\mt\
|
|
# -I
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\osal\include\
|
|
# -I
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\services\saddr\
|
|
# -I
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\services\sdata\
|
|
# -I
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\af\
|
|
# -I
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\nwk\
|
|
# -I
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\sapi\
|
|
# -I
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\sec\
|
|
# -I
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\sys\
|
|
# -I
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\zdo\
|
|
# -I
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\zmac\
|
|
# -I
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\zmac\f8w\
|
|
# -Ohz --require_prototypes --no_code_motion)
|
|
# Locale = Chinese (Simplified)_CHN.936
|
|
# List file =
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\RouterEB\List\OSAL.lst
|
|
# Object file =
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\RouterEB\Obj\OSAL.r51
|
|
#
|
|
###############################################################################
|
|
|
|
E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Components\osal\common\OSAL.c
|
|
1 /**************************************************************************************************
|
|
2 Filename: OSAL.c
|
|
3 Revised: $Date: 2011-05-27 09:03:48 -0700 (Fri, 27 May 2011) $
|
|
4 Revision: $Revision: 26134 $
|
|
5
|
|
6 Description: This API allows the software components in the Z-stack to be written
|
|
7 independently of the specifics of the operating system, kernel or tasking
|
|
8 environment (including control loops or connect-to-interrupt systems).
|
|
9
|
|
10
|
|
11 Copyright 2004-2011 Texas Instruments Incorporated. All rights reserved.
|
|
12
|
|
13 IMPORTANT: Your use of this Software is limited to those specific rights
|
|
14 granted under the terms of a software license agreement between the user
|
|
15 who downloaded the software, his/her employer (which must be your employer)
|
|
16 and Texas Instruments Incorporated (the "License"). You may not use this
|
|
17 Software unless you agree to abide by the terms of the License. The License
|
|
18 limits your use, and you acknowledge, that the Software may not be modified,
|
|
19 copied or distributed unless embedded on a Texas Instruments microcontroller
|
|
20 or used solely and exclusively in conjunction with a Texas Instruments radio
|
|
21 frequency transceiver, which is integrated into your product. Other than for
|
|
22 the foregoing purpose, you may not use, reproduce, copy, prepare derivative
|
|
23 works of, modify, distribute, perform, display or sell this Software and/or
|
|
24 its documentation for any purpose.
|
|
25
|
|
26 YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
|
|
27 PROVIDED 揂S IS?WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
|
|
28 INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
|
|
29 NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
|
|
30 TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,
|
|
31 NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER
|
|
32 LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
|
|
33 INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE
|
|
34 OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT
|
|
35 OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
|
|
36 (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
|
|
37
|
|
38 Should you have any questions regarding your right to use this Software,
|
|
39 contact Texas Instruments Incorporated at www.TI.com.
|
|
40 **************************************************************************************************/
|
|
41
|
|
42 /*********************************************************************
|
|
43 * INCLUDES
|
|
44 */
|
|
45
|
|
46 #include <string.h>
|
|
47
|
|
48 #include "comdef.h"
|
|
49 #include "OSAL.h"
|
|
50 #include "OSAL_Tasks.h"
|
|
51 #include "OSAL_Memory.h"
|
|
52 #include "OSAL_PwrMgr.h"
|
|
53 #include "OSAL_Clock.h"
|
|
54
|
|
55 #include "OnBoard.h"
|
|
|
|
\ In segment SFR_AN, at 0xa8
|
|
\ union <unnamed> volatile __sfr _A_IEN0
|
|
\ _A_IEN0:
|
|
\ 000000 DS 1
|
|
56
|
|
57 /* HAL */
|
|
58 #include "hal_drivers.h"
|
|
59
|
|
60 #ifdef IAR_ARMCM3_LM
|
|
61 #include "FreeRTOSConfig.h"
|
|
62 #include "osal_task.h"
|
|
63 #endif
|
|
64
|
|
65 /*********************************************************************
|
|
66 * MACROS
|
|
67 */
|
|
68
|
|
69 /*********************************************************************
|
|
70 * CONSTANTS
|
|
71 */
|
|
72
|
|
73 /*********************************************************************
|
|
74 * TYPEDEFS
|
|
75 */
|
|
76
|
|
77 /*********************************************************************
|
|
78 * GLOBAL VARIABLES
|
|
79 */
|
|
|
|
\ In segment XDATA_Z, align 1, keep-with-next
|
|
80 uint16 *tasksEvents;
|
|
\ tasksEvents:
|
|
\ 000000 DS 2
|
|
\ 000002 REQUIRE __INIT_XDATA_Z
|
|
81
|
|
82 // Message Pool Definitions
|
|
|
|
\ In segment XDATA_Z, align 1, keep-with-next
|
|
83 osal_msg_q_t osal_qHead;
|
|
\ osal_qHead:
|
|
\ 000000 DS 2
|
|
\ 000002 REQUIRE __INIT_XDATA_Z
|
|
84
|
|
85 /*********************************************************************
|
|
86 * EXTERNAL VARIABLES
|
|
87 */
|
|
88
|
|
89 /*********************************************************************
|
|
90 * EXTERNAL FUNCTIONS
|
|
91 */
|
|
92
|
|
93 /*********************************************************************
|
|
94 * LOCAL VARIABLES
|
|
95 */
|
|
96
|
|
97 // Index of active task
|
|
|
|
\ In segment XDATA_I, align 1, keep-with-next
|
|
98 static uint8 activeTaskID = TASK_NO_TASK;
|
|
\ activeTaskID:
|
|
\ 000000 DS 1
|
|
\ 000001 REQUIRE `?<Initializer for activeTaskID>`
|
|
\ 000001 REQUIRE __INIT_XDATA_I
|
|
99
|
|
100 /*********************************************************************
|
|
101 * LOCAL FUNCTION PROTOTYPES
|
|
102 */
|
|
103
|
|
104 /*********************************************************************
|
|
105 * HELPER FUNCTIONS
|
|
106 */
|
|
107 /* very ugly stub so Keil can compile */
|
|
108 #ifdef __KEIL__
|
|
109 char * itoa ( int value, char * buffer, int radix )
|
|
110 {
|
|
111 return(buffer);
|
|
112 }
|
|
113 #endif
|
|
114
|
|
115 /*********************************************************************
|
|
116 * @fn osal_strlen
|
|
117 *
|
|
118 * @brief
|
|
119 *
|
|
120 * Calculates the length of a string. The string must be null
|
|
121 * terminated.
|
|
122 *
|
|
123 * @param char *pString - pointer to text string
|
|
124 *
|
|
125 * @return int - number of characters
|
|
126 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
127 int osal_strlen( char *pString )
|
|
\ osal_strlen:
|
|
128 {
|
|
\ 000000 C082 PUSH DPL
|
|
\ 000002 C083 PUSH DPH
|
|
\ 000004 ; Saved register size: 2
|
|
\ 000004 ; Auto size: 0
|
|
129 return (int)( strlen( pString ) );
|
|
\ 000004 ; Setup parameters for call to function strlen
|
|
\ 000004 12.... LCALL `??strlen::?relay`; Banked call to: strlen
|
|
\ 000007 02.... LJMP ?Subroutine0 & 0xFFFF
|
|
130 }
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine0:
|
|
\ 000000 D083 POP DPH
|
|
\ 000002 D082 POP DPL
|
|
\ 000004 02.... LJMP ?BRET
|
|
131
|
|
132 /*********************************************************************
|
|
133 * @fn osal_memcpy
|
|
134 *
|
|
135 * @brief
|
|
136 *
|
|
137 * Generic memory copy.
|
|
138 *
|
|
139 * Note: This function differs from the standard memcpy(), since
|
|
140 * it returns the pointer to the next destination uint8. The
|
|
141 * standard memcpy() returns the original destination address.
|
|
142 *
|
|
143 * @param dst - destination address
|
|
144 * @param src - source address
|
|
145 * @param len - number of bytes to copy
|
|
146 *
|
|
147 * @return pointer to end of destination buffer
|
|
148 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
149 void *osal_memcpy( void *dst, const void GENERIC *src, unsigned int len )
|
|
\ osal_memcpy:
|
|
150 {
|
|
\ 000000 74F7 MOV A,#-0x9
|
|
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
|
|
\ 000005 ; Saved register size: 9
|
|
\ 000005 ; Auto size: 0
|
|
\ 000005 EA MOV A,R2
|
|
\ 000006 FE MOV R6,A
|
|
\ 000007 EB MOV A,R3
|
|
\ 000008 FF MOV R7,A
|
|
151 uint8 *pDst;
|
|
152 const uint8 GENERIC *pSrc;
|
|
153
|
|
154 pSrc = src;
|
|
\ 000009 7409 MOV A,#0x9
|
|
\ 00000B 12.... LCALL ?XSTACK_DISP0_8
|
|
\ 00000E 12.... LCALL ?Subroutine9 & 0xFFFF
|
|
155 pDst = dst;
|
|
\ ??CrossCallReturnLabel_8:
|
|
\ 000011 8E82 MOV DPL,R6
|
|
\ 000013 8F83 MOV DPH,R7
|
|
\ 000015 800C SJMP ??osal_memcpy_0
|
|
156
|
|
157 while ( len-- )
|
|
158 *pDst++ = *pSrc++;
|
|
\ ??osal_memcpy_1:
|
|
\ 000017 12.... LCALL ?C_GPTR_LOAD
|
|
\ 00001A F0 MOVX @DPTR,A
|
|
\ 00001B E9 MOV A,R1
|
|
\ 00001C 2401 ADD A,#0x1
|
|
\ 00001E 09 INC R1
|
|
\ 00001F E4 CLR A
|
|
\ 000020 3A ADDC A,R2
|
|
\ 000021 FA MOV R2,A
|
|
\ 000022 A3 INC DPTR
|
|
\ ??osal_memcpy_0:
|
|
\ 000023 12.... LCALL ?Subroutine19 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_23:
|
|
\ 000026 70EF JNZ ??osal_memcpy_1
|
|
159
|
|
160 return ( pDst );
|
|
\ 000028 REQUIRE ?Subroutine4
|
|
\ 000028 ; // Fall through to label ?Subroutine4
|
|
161 }
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine4:
|
|
\ 000000 AA82 MOV R2,DPL
|
|
\ 000002 AB83 MOV R3,DPH
|
|
\ 000004 02.... LJMP ??Subroutine31_0 & 0xFFFF
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine19:
|
|
\ 000000 EC MOV A,R4
|
|
\ 000001 FE MOV R6,A
|
|
\ 000002 ED MOV A,R5
|
|
\ 000003 FF MOV R7,A
|
|
\ 000004 EE MOV A,R6
|
|
\ 000005 24FF ADD A,#-0x1
|
|
\ 000007 1C DEC R4
|
|
\ 000008 EF MOV A,R7
|
|
\ 000009 34FF ADDC A,#-0x1
|
|
\ 00000B FD MOV R5,A
|
|
\ 00000C EE MOV A,R6
|
|
\ 00000D 4F ORL A,R7
|
|
\ 00000E 22 RET
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine9:
|
|
\ 000000 E0 MOVX A,@DPTR
|
|
\ 000001 F9 MOV R1,A
|
|
\ 000002 A3 INC DPTR
|
|
\ 000003 12.... LCALL ?Subroutine28 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_58:
|
|
\ 000006 22 RET
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ??Subroutine31_0:
|
|
\ 000000 7F01 MOV R7,#0x1
|
|
\ 000002 02.... LJMP ?BANKED_LEAVE_XDATA
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine28:
|
|
\ 000000 E0 MOVX A,@DPTR
|
|
\ 000001 FA MOV R2,A
|
|
\ 000002 A3 INC DPTR
|
|
\ 000003 E0 MOVX A,@DPTR
|
|
\ 000004 FB MOV R3,A
|
|
\ 000005 22 RET
|
|
162
|
|
163 /*********************************************************************
|
|
164 * @fn osal_revmemcpy
|
|
165 *
|
|
166 * @brief Generic reverse memory copy. Starts at the end of the
|
|
167 * source buffer, by taking the source address pointer and moving
|
|
168 * pointer ahead "len" bytes, then decrementing the pointer.
|
|
169 *
|
|
170 * Note: This function differs from the standard memcpy(), since
|
|
171 * it returns the pointer to the next destination uint8. The
|
|
172 * standard memcpy() returns the original destination address.
|
|
173 *
|
|
174 * @param dst - destination address
|
|
175 * @param src - source address
|
|
176 * @param len - number of bytes to copy
|
|
177 *
|
|
178 * @return pointer to end of destination buffer
|
|
179 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
180 void *osal_revmemcpy( void *dst, const void GENERIC *src, unsigned int len )
|
|
\ osal_revmemcpy:
|
|
181 {
|
|
\ 000000 74F7 MOV A,#-0x9
|
|
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
|
|
\ 000005 ; Saved register size: 9
|
|
\ 000005 ; Auto size: 0
|
|
\ 000005 EA MOV A,R2
|
|
\ 000006 FE MOV R6,A
|
|
\ 000007 EB MOV A,R3
|
|
\ 000008 FF MOV R7,A
|
|
182 uint8 *pDst;
|
|
183 const uint8 GENERIC *pSrc;
|
|
184
|
|
185 pSrc = src;
|
|
186 pSrc += (len-1);
|
|
\ 000009 7409 MOV A,#0x9
|
|
\ 00000B 12.... LCALL ?XSTACK_DISP0_8
|
|
\ 00000E 12.... LCALL ?Subroutine9 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_9:
|
|
\ 000011 E9 MOV A,R1
|
|
\ 000012 2C ADD A,R4
|
|
\ 000013 F9 MOV R1,A
|
|
\ 000014 EA MOV A,R2
|
|
\ 000015 3D ADDC A,R5
|
|
\ 000016 FA MOV R2,A
|
|
\ 000017 E9 MOV A,R1
|
|
\ 000018 24FF ADD A,#-0x1
|
|
\ 00001A 19 DEC R1
|
|
\ 00001B EA MOV A,R2
|
|
\ 00001C 34FF ADDC A,#-0x1
|
|
\ 00001E FA MOV R2,A
|
|
187 pDst = dst;
|
|
\ 00001F 8E82 MOV DPL,R6
|
|
\ 000021 8F83 MOV DPH,R7
|
|
\ 000023 800D SJMP ??osal_revmemcpy_0
|
|
188
|
|
189 while ( len-- )
|
|
190 *pDst++ = *pSrc--;
|
|
\ ??osal_revmemcpy_1:
|
|
\ 000025 12.... LCALL ?C_GPTR_LOAD
|
|
\ 000028 F0 MOVX @DPTR,A
|
|
\ 000029 E9 MOV A,R1
|
|
\ 00002A 24FF ADD A,#-0x1
|
|
\ 00002C 19 DEC R1
|
|
\ 00002D EA MOV A,R2
|
|
\ 00002E 34FF ADDC A,#-0x1
|
|
\ 000030 FA MOV R2,A
|
|
\ 000031 A3 INC DPTR
|
|
\ ??osal_revmemcpy_0:
|
|
\ 000032 12.... LCALL ?Subroutine19 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_24:
|
|
\ 000035 70EE JNZ ??osal_revmemcpy_1
|
|
191
|
|
192 return ( pDst );
|
|
\ 000037 80.. SJMP ?Subroutine4
|
|
193 }
|
|
194
|
|
195 /*********************************************************************
|
|
196 * @fn osal_memdup
|
|
197 *
|
|
198 * @brief Allocates a buffer [with osal_mem_alloc()] and copies
|
|
199 * the src buffer into the newly allocated space.
|
|
200 *
|
|
201 * @param src - source address
|
|
202 * @param len - number of bytes to copy
|
|
203 *
|
|
204 * @return pointer to the new allocated buffer, or NULL if
|
|
205 * allocation problem.
|
|
206 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
207 void *osal_memdup( const void GENERIC *src, unsigned int len )
|
|
\ osal_memdup:
|
|
208 {
|
|
\ 000000 REQUIRE ?V0
|
|
\ 000000 REQUIRE ?V1
|
|
\ 000000 REQUIRE ?V2
|
|
\ 000000 REQUIRE ?V4
|
|
\ 000000 REQUIRE ?V5
|
|
\ 000000 REQUIRE ?V6
|
|
\ 000000 REQUIRE ?V7
|
|
\ 000000 74F0 MOV A,#-0x10
|
|
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
|
|
\ 000005 ; Saved register size: 16
|
|
\ 000005 ; Auto size: 0
|
|
\ 000005 89.. MOV ?V0,R1
|
|
\ 000007 8A.. MOV ?V1,R2
|
|
\ 000009 8B.. MOV ?V2,R3
|
|
\ 00000B EC MOV A,R4
|
|
\ 00000C FE MOV R6,A
|
|
\ 00000D ED MOV A,R5
|
|
\ 00000E FF MOV R7,A
|
|
209 uint8 *pDst;
|
|
210
|
|
211 pDst = osal_mem_alloc( len );
|
|
\ 00000F ; Setup parameters for call to function osal_mem_alloc
|
|
\ 00000F EC MOV A,R4
|
|
\ 000010 FA MOV R2,A
|
|
\ 000011 ED MOV A,R5
|
|
\ 000012 FB MOV R3,A
|
|
\ 000013 12.... LCALL `??osal_mem_alloc::?relay`; Banked call to: osal_mem_alloc
|
|
\ 000016 8A.. MOV ?V6,R2
|
|
\ 000018 8B.. MOV ?V7,R3
|
|
212 if ( pDst )
|
|
\ 00001A EA MOV A,R2
|
|
\ 00001B 4B ORL A,R3
|
|
\ 00001C 6011 JZ ??osal_memdup_0
|
|
213 {
|
|
214 VOID osal_memcpy( pDst, src, len );
|
|
\ 00001E ; Setup parameters for call to function osal_memcpy
|
|
\ 00001E 78.. MOV R0,#?V0
|
|
\ 000020 12.... LCALL ?PUSH_XSTACK_I_THREE
|
|
\ 000023 EE MOV A,R6
|
|
\ 000024 FC MOV R4,A
|
|
\ 000025 EF MOV A,R7
|
|
\ 000026 FD MOV R5,A
|
|
\ 000027 12.... LCALL `??osal_memcpy::?relay`; Banked call to: osal_memcpy
|
|
\ 00002A 7403 MOV A,#0x3
|
|
\ 00002C 12.... LCALL ?DEALLOC_XSTACK8
|
|
215 }
|
|
216
|
|
217 return ( (void *)pDst );
|
|
\ ??osal_memdup_0:
|
|
\ 00002F AA.. MOV R2,?V6
|
|
\ 000031 AB.. MOV R3,?V7
|
|
\ 000033 02.... LJMP ?Subroutine2 & 0xFFFF
|
|
218 }
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine2:
|
|
\ 000000 7F08 MOV R7,#0x8
|
|
\ 000002 02.... LJMP ?BANKED_LEAVE_XDATA
|
|
219
|
|
220 /*********************************************************************
|
|
221 * @fn osal_memcmp
|
|
222 *
|
|
223 * @brief
|
|
224 *
|
|
225 * Generic memory compare.
|
|
226 *
|
|
227 * @param src1 - source 1 addrexx
|
|
228 * @param src2 - source 2 address
|
|
229 * @param len - number of bytes to compare
|
|
230 *
|
|
231 * @return TRUE - same, FALSE - different
|
|
232 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
233 uint8 osal_memcmp( const void GENERIC *src1, const void GENERIC *src2, unsigned int len )
|
|
\ osal_memcmp:
|
|
234 {
|
|
\ 000000 REQUIRE ?V0
|
|
\ 000000 REQUIRE ?V1
|
|
\ 000000 REQUIRE ?V4
|
|
\ 000000 REQUIRE ?V5
|
|
\ 000000 REQUIRE ?V6
|
|
\ 000000 74F1 MOV A,#-0xf
|
|
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
|
|
\ 000005 ; Saved register size: 15
|
|
\ 000005 ; Auto size: 3
|
|
\ 000005 74FD MOV A,#-0x3
|
|
\ 000007 12.... LCALL ?ALLOC_XSTACK8
|
|
\ 00000A 8C.. MOV ?V0,R4
|
|
\ 00000C 8D.. MOV ?V1,R5
|
|
235 const uint8 GENERIC *pSrc1;
|
|
236 const uint8 GENERIC *pSrc2;
|
|
237
|
|
238 pSrc1 = src1;
|
|
\ 00000E 89.. MOV ?V4,R1
|
|
\ 000010 8A.. MOV ?V5,R2
|
|
\ 000012 8B.. MOV ?V6,R3
|
|
239 pSrc2 = src2;
|
|
\ 000014 7412 MOV A,#0x12
|
|
\ 000016 12.... LCALL ?XSTACK_DISP0_8
|
|
\ 000019 E0 MOVX A,@DPTR
|
|
\ 00001A FC MOV R4,A
|
|
\ 00001B A3 INC DPTR
|
|
\ 00001C E0 MOVX A,@DPTR
|
|
\ 00001D FD MOV R5,A
|
|
\ 00001E A3 INC DPTR
|
|
\ 00001F E0 MOVX A,@DPTR
|
|
\ 000020 FE MOV R6,A
|
|
240
|
|
241 while ( len-- )
|
|
\ ??osal_memcmp_0:
|
|
\ 000021 A8.. MOV R0,?V0
|
|
\ 000023 A9.. MOV R1,?V1
|
|
\ 000025 E8 MOV A,R0
|
|
\ 000026 24FF ADD A,#-0x1
|
|
\ 000028 F5.. MOV ?V0,A
|
|
\ 00002A E9 MOV A,R1
|
|
\ 00002B 34FF ADDC A,#-0x1
|
|
\ 00002D F5.. MOV ?V1,A
|
|
\ 00002F E8 MOV A,R0
|
|
\ 000030 49 ORL A,R1
|
|
\ 000031 6046 JZ ??osal_memcmp_1
|
|
242 {
|
|
243 if( *pSrc1++ != *pSrc2++ )
|
|
\ 000033 A9.. MOV R1,?V4
|
|
\ 000035 AA.. MOV R2,?V5
|
|
\ 000037 AB.. MOV R3,?V6
|
|
\ 000039 E9 MOV A,R1
|
|
\ 00003A 2401 ADD A,#0x1
|
|
\ 00003C F5.. MOV ?V4,A
|
|
\ 00003E E4 CLR A
|
|
\ 00003F 3A ADDC A,R2
|
|
\ 000040 F5.. MOV ?V5,A
|
|
\ 000042 85..82 MOV DPL,?XSP + 0
|
|
\ 000045 85..83 MOV DPH,?XSP + 1
|
|
\ 000048 EC MOV A,R4
|
|
\ 000049 F0 MOVX @DPTR,A
|
|
\ 00004A A3 INC DPTR
|
|
\ 00004B ED MOV A,R5
|
|
\ 00004C F0 MOVX @DPTR,A
|
|
\ 00004D A3 INC DPTR
|
|
\ 00004E EE MOV A,R6
|
|
\ 00004F F0 MOVX @DPTR,A
|
|
\ 000050 85..82 MOV DPL,?XSP + 0
|
|
\ 000053 85..83 MOV DPH,?XSP + 1
|
|
\ 000056 E0 MOVX A,@DPTR
|
|
\ 000057 FC MOV R4,A
|
|
\ 000058 A3 INC DPTR
|
|
\ 000059 E0 MOVX A,@DPTR
|
|
\ 00005A FD MOV R5,A
|
|
\ 00005B EC MOV A,R4
|
|
\ 00005C 2401 ADD A,#0x1
|
|
\ 00005E 0C INC R4
|
|
\ 00005F E4 CLR A
|
|
\ 000060 3D ADDC A,R5
|
|
\ 000061 FD MOV R5,A
|
|
\ 000062 12.... LCALL ?C_GPTR_LOAD
|
|
\ 000065 F8 MOV R0,A
|
|
\ 000066 85..82 MOV DPL,?XSP + 0
|
|
\ 000069 85..83 MOV DPH,?XSP + 1
|
|
\ 00006C 12.... LCALL ?Subroutine9 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_10:
|
|
\ 00006F 12.... LCALL ?C_GPTR_LOAD
|
|
\ 000072 68 XRL A,R0
|
|
\ 000073 60AC JZ ??osal_memcmp_0
|
|
244 return FALSE;
|
|
\ 000075 7900 MOV R1,#0x0
|
|
\ 000077 8002 SJMP ??osal_memcmp_2
|
|
245 }
|
|
246 return TRUE;
|
|
\ ??osal_memcmp_1:
|
|
\ 000079 7901 MOV R1,#0x1
|
|
\ ??osal_memcmp_2:
|
|
\ 00007B 7403 MOV A,#0x3
|
|
\ 00007D 12.... LCALL ?DEALLOC_XSTACK8
|
|
\ 000080 7F07 MOV R7,#0x7
|
|
\ 000082 02.... LJMP ?BANKED_LEAVE_XDATA
|
|
247 }
|
|
248
|
|
249
|
|
250 /*********************************************************************
|
|
251 * @fn osal_memset
|
|
252 *
|
|
253 * @brief
|
|
254 *
|
|
255 * Set memory buffer to value.
|
|
256 *
|
|
257 * @param dest - pointer to buffer
|
|
258 * @param value - what to set each uint8 of the message
|
|
259 * @param size - how big
|
|
260 *
|
|
261 * @return pointer to destination buffer
|
|
262 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
263 void *osal_memset( void *dest, uint8 value, int len )
|
|
\ osal_memset:
|
|
264 {
|
|
\ 000000 REQUIRE ?V0
|
|
\ 000000 REQUIRE ?V1
|
|
\ 000000 74F6 MOV A,#-0xa
|
|
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
|
|
\ 000005 ; Saved register size: 10
|
|
\ 000005 ; Auto size: 0
|
|
265 return memset( dest, value, len );
|
|
\ 000005 ; Setup parameters for call to function memset
|
|
\ 000005 8C.. MOV ?V0,R4
|
|
\ 000007 8D.. MOV ?V1,R5
|
|
\ 000009 78.. MOV R0,#?V0
|
|
\ 00000B 12.... LCALL ?PUSH_XSTACK_I_TWO
|
|
\ 00000E E9 MOV A,R1
|
|
\ 00000F FC MOV R4,A
|
|
\ 000010 7D00 MOV R5,#0x0
|
|
\ 000012 12.... LCALL `??memset::?relay`; Banked call to: memset
|
|
\ 000015 7402 MOV A,#0x2
|
|
\ 000017 12.... LCALL ?DEALLOC_XSTACK8
|
|
\ 00001A 02.... LJMP ?Subroutine3 & 0xFFFF
|
|
266 }
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine3:
|
|
\ 000000 7F02 MOV R7,#0x2
|
|
\ 000002 02.... LJMP ?BANKED_LEAVE_XDATA
|
|
267
|
|
268 /*********************************************************************
|
|
269 * @fn osal_build_uint16
|
|
270 *
|
|
271 * @brief
|
|
272 *
|
|
273 * Build a uint16 out of 2 bytes (0 then 1).
|
|
274 *
|
|
275 * @param swapped - 0 then 1
|
|
276 *
|
|
277 * @return uint16
|
|
278 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
279 uint16 osal_build_uint16( uint8 *swapped )
|
|
\ osal_build_uint16:
|
|
280 {
|
|
\ 000000 C082 PUSH DPL
|
|
\ 000002 C083 PUSH DPH
|
|
\ 000004 ; Saved register size: 2
|
|
\ 000004 ; Auto size: 0
|
|
281 return ( BUILD_UINT16( swapped[0], swapped[1] ) );
|
|
\ 000004 8A82 MOV DPL,R2
|
|
\ 000006 8B83 MOV DPH,R3
|
|
\ 000008 E0 MOVX A,@DPTR
|
|
\ 000009 FC MOV R4,A
|
|
\ 00000A A3 INC DPTR
|
|
\ 00000B E0 MOVX A,@DPTR
|
|
\ 00000C F8 MOV R0,A
|
|
\ 00000D E4 CLR A
|
|
\ 00000E C8 XCH A,R0
|
|
\ 00000F F9 MOV R1,A
|
|
\ 000010 EC MOV A,R4
|
|
\ 000011 28 ADD A,R0
|
|
\ 000012 FA MOV R2,A
|
|
\ 000013 E4 CLR A
|
|
\ 000014 39 ADDC A,R1
|
|
\ 000015 FB MOV R3,A
|
|
\ 000016 02.... LJMP ?Subroutine0 & 0xFFFF
|
|
282 }
|
|
283
|
|
284 /*********************************************************************
|
|
285 * @fn osal_build_uint32
|
|
286 *
|
|
287 * @brief
|
|
288 *
|
|
289 * Build a uint32 out of sequential bytes.
|
|
290 *
|
|
291 * @param swapped - sequential bytes
|
|
292 * @param len - number of bytes in the uint8 array
|
|
293 *
|
|
294 * @return uint32
|
|
295 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
296 uint32 osal_build_uint32( uint8 *swapped, uint8 len )
|
|
\ osal_build_uint32:
|
|
297 {
|
|
\ 000000 REQUIRE ?V0
|
|
\ 000000 REQUIRE ?V1
|
|
\ 000000 REQUIRE ?V2
|
|
\ 000000 REQUIRE ?V3
|
|
\ 000000 REQUIRE ?V4
|
|
\ 000000 REQUIRE ?V5
|
|
\ 000000 REQUIRE ?V6
|
|
\ 000000 REQUIRE ?V7
|
|
\ 000000 74F0 MOV A,#-0x10
|
|
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
|
|
\ 000005 ; Saved register size: 16
|
|
\ 000005 ; Auto size: 0
|
|
\ 000005 E9 MOV A,R1
|
|
\ 000006 FE MOV R6,A
|
|
298 if ( len == 2 )
|
|
\ 000007 7402 MOV A,#0x2
|
|
\ 000009 6E XRL A,R6
|
|
\ 00000A 700A JNZ ??osal_build_uint32_0
|
|
299 return ( BUILD_UINT32( swapped[0], swapped[1], 0L, 0L ) );
|
|
\ 00000C 8A82 MOV DPL,R2
|
|
\ 00000E 8B83 MOV DPH,R3
|
|
\ 000010 12.... LCALL ?Subroutine7 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_3:
|
|
\ 000013 02.... LJMP ??osal_build_uint32_1 & 0xFFFF
|
|
300 else if ( len == 3 )
|
|
\ ??osal_build_uint32_0:
|
|
\ 000016 7403 MOV A,#0x3
|
|
\ 000018 6E XRL A,R6
|
|
\ 000019 703D JNZ ??osal_build_uint32_2
|
|
301 return ( BUILD_UINT32( swapped[0], swapped[1], swapped[2], 0L ) );
|
|
\ 00001B 8A82 MOV DPL,R2
|
|
\ 00001D 8B83 MOV DPH,R3
|
|
\ 00001F 12.... LCALL ?Subroutine25 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_36:
|
|
\ 000022 A3 INC DPTR
|
|
\ 000023 12.... LCALL ?Subroutine26 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_38:
|
|
\ 000026 7408 MOV A,#0x8
|
|
\ 000028 78.. MOV R0,#?V0
|
|
\ 00002A 12.... LCALL ?L_SHL
|
|
\ 00002D 78.. MOV R0,#?V4
|
|
\ 00002F 79.. MOV R1,#?V0
|
|
\ 000031 12.... LCALL ?L_ADD
|
|
\ 000034 8A82 MOV DPL,R2
|
|
\ 000036 8B83 MOV DPH,R3
|
|
\ 000038 A3 INC DPTR
|
|
\ 000039 A3 INC DPTR
|
|
\ 00003A E0 MOVX A,@DPTR
|
|
\ 00003B F5.. MOV ?V0,A
|
|
\ 00003D E4 CLR A
|
|
\ 00003E F5.. MOV ?V1,A
|
|
\ 000040 7410 MOV A,#0x10
|
|
\ 000042 78.. MOV R0,#?V0
|
|
\ 000044 12.... LCALL ?L_SHL
|
|
\ 000047 78.. MOV R0,#?V4
|
|
\ 000049 79.. MOV R1,#?V0
|
|
\ 00004B 12.... LCALL ?L_ADD
|
|
\ 00004E AA.. MOV R2,?V4
|
|
\ 000050 AB.. MOV R3,?V5
|
|
\ 000052 AC.. MOV R4,?V6
|
|
\ 000054 AD.. MOV R5,?V7
|
|
\ 000056 805D SJMP ??osal_build_uint32_3
|
|
302 else if ( len == 4 )
|
|
\ ??osal_build_uint32_2:
|
|
\ 000058 7404 MOV A,#0x4
|
|
\ 00005A 6E XRL A,R6
|
|
\ 00005B 8A82 MOV DPL,R2
|
|
\ 00005D 8B83 MOV DPH,R3
|
|
\ 00005F 704E JNZ ??osal_build_uint32_4
|
|
303 return ( BUILD_UINT32( swapped[0], swapped[1], swapped[2], swapped[3] ) );
|
|
\ 000061 12.... LCALL ?Subroutine7 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_4:
|
|
\ 000064 78.. MOV R0,#?V4
|
|
\ 000066 12.... LCALL ?L_SHL
|
|
\ 000069 78.. MOV R0,#?V0
|
|
\ 00006B 79.. MOV R1,#?V4
|
|
\ 00006D 12.... LCALL ?L_ADD
|
|
\ 000070 8A82 MOV DPL,R2
|
|
\ 000072 8B83 MOV DPH,R3
|
|
\ 000074 A3 INC DPTR
|
|
\ 000075 A3 INC DPTR
|
|
\ 000076 E0 MOVX A,@DPTR
|
|
\ 000077 F5.. MOV ?V4,A
|
|
\ 000079 E4 CLR A
|
|
\ 00007A F5.. MOV ?V5,A
|
|
\ 00007C 7410 MOV A,#0x10
|
|
\ 00007E 78.. MOV R0,#?V4
|
|
\ 000080 12.... LCALL ?L_SHL
|
|
\ 000083 78.. MOV R0,#?V0
|
|
\ 000085 79.. MOV R1,#?V4
|
|
\ 000087 12.... LCALL ?L_ADD
|
|
\ 00008A 8A82 MOV DPL,R2
|
|
\ 00008C 8B83 MOV DPH,R3
|
|
\ 00008E A3 INC DPTR
|
|
\ 00008F A3 INC DPTR
|
|
\ 000090 A3 INC DPTR
|
|
\ 000091 E0 MOVX A,@DPTR
|
|
\ 000092 F5.. MOV ?V4,A
|
|
\ 000094 E4 CLR A
|
|
\ 000095 F5.. MOV ?V6,A
|
|
\ 000097 7418 MOV A,#0x18
|
|
\ ??osal_build_uint32_1:
|
|
\ 000099 78.. MOV R0,#?V4
|
|
\ 00009B 12.... LCALL ?L_SHL
|
|
\ 00009E 78.. MOV R0,#?V0
|
|
\ 0000A0 79.. MOV R1,#?V4
|
|
\ 0000A2 12.... LCALL ?L_ADD
|
|
\ 0000A5 AA.. MOV R2,?V0
|
|
\ 0000A7 AB.. MOV R3,?V1
|
|
\ 0000A9 AC.. MOV R4,?V2
|
|
\ 0000AB AD.. MOV R5,?V3
|
|
\ 0000AD 8006 SJMP ??osal_build_uint32_3
|
|
304 else
|
|
305 return ( (uint32)swapped[0] );
|
|
\ ??osal_build_uint32_4:
|
|
\ 0000AF E0 MOVX A,@DPTR
|
|
\ 0000B0 FA MOV R2,A
|
|
\ 0000B1 E4 CLR A
|
|
\ 0000B2 FB MOV R3,A
|
|
\ 0000B3 FC MOV R4,A
|
|
\ 0000B4 FD MOV R5,A
|
|
\ ??osal_build_uint32_3:
|
|
\ 0000B5 02.... LJMP ?Subroutine2 & 0xFFFF
|
|
306 }
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine7:
|
|
\ 000000 12.... LCALL ?Subroutine26 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_39:
|
|
\ 000003 A3 INC DPTR
|
|
\ 000004 12.... LCALL ?Subroutine25 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_37:
|
|
\ 000007 7408 MOV A,#0x8
|
|
\ 000009 22 RET
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine26:
|
|
\ 000000 E0 MOVX A,@DPTR
|
|
\ 000001 F5.. MOV ?V0,A
|
|
\ 000003 E4 CLR A
|
|
\ 000004 F5.. MOV ?V1,A
|
|
\ 000006 F5.. MOV ?V2,A
|
|
\ 000008 F5.. MOV ?V3,A
|
|
\ 00000A 22 RET
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine25:
|
|
\ 000000 E0 MOVX A,@DPTR
|
|
\ 000001 F5.. MOV ?V4,A
|
|
\ 000003 E4 CLR A
|
|
\ 000004 F5.. MOV ?V5,A
|
|
\ 000006 F5.. MOV ?V6,A
|
|
\ 000008 F5.. MOV ?V7,A
|
|
\ 00000A 22 RET
|
|
307
|
|
308 #if !defined ( ZBIT ) && !defined ( ZBIT2 ) && !defined (UBIT)
|
|
309 /*********************************************************************
|
|
310 * @fn _ltoa
|
|
311 *
|
|
312 * @brief
|
|
313 *
|
|
314 * convert a long unsigned int to a string.
|
|
315 *
|
|
316 * @param l - long to convert
|
|
317 * @param buf - buffer to convert to
|
|
318 * @param radix - 10 dec, 16 hex
|
|
319 *
|
|
320 * @return pointer to buffer
|
|
321 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
322 unsigned char * _ltoa(unsigned long l, unsigned char *buf, unsigned char radix)
|
|
\ _ltoa:
|
|
323 {
|
|
\ 000000 REQUIRE ?V0
|
|
\ 000000 REQUIRE ?V1
|
|
\ 000000 REQUIRE ?V2
|
|
\ 000000 REQUIRE ?V3
|
|
\ 000000 REQUIRE ?V4
|
|
\ 000000 REQUIRE ?V5
|
|
\ 000000 REQUIRE ?V6
|
|
\ 000000 REQUIRE ?V7
|
|
\ 000000 74F0 MOV A,#-0x10
|
|
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
|
|
\ 000005 ; Saved register size: 16
|
|
\ 000005 ; Auto size: 37
|
|
\ 000005 74DB MOV A,#-0x25
|
|
\ 000007 12.... LCALL ?ALLOC_XSTACK8
|
|
\ 00000A 7403 MOV A,#0x3
|
|
\ 00000C 12.... LCALL ?XSTACK_DISP0_8
|
|
\ 00000F EA MOV A,R2
|
|
\ 000010 F0 MOVX @DPTR,A
|
|
\ 000011 A3 INC DPTR
|
|
\ 000012 EB MOV A,R3
|
|
\ 000013 F0 MOVX @DPTR,A
|
|
\ 000014 A3 INC DPTR
|
|
\ 000015 EC MOV A,R4
|
|
\ 000016 F0 MOVX @DPTR,A
|
|
\ 000017 A3 INC DPTR
|
|
\ 000018 ED MOV A,R5
|
|
\ 000019 F0 MOVX @DPTR,A
|
|
\ 00001A 7402 MOV A,#0x2
|
|
\ 00001C 12.... LCALL ?XSTACK_DISP0_8
|
|
\ 00001F E9 MOV A,R1
|
|
\ 000020 F0 MOVX @DPTR,A
|
|
324 #if defined( __GNUC__ )
|
|
325 return ( (char*)ltoa( l, buf, radix ) );
|
|
326 #else
|
|
327 unsigned char tmp1[10] = "", tmp2[10] = "", tmp3[10] = "";
|
|
\ 000021 90.... MOV DPTR,#`?<Constant "">`
|
|
\ 000024 7407 MOV A,#0x7
|
|
\ 000026 12.... LCALL ?XSTACK_DISP102_8
|
|
\ 000029 740A MOV A,#0xa
|
|
\ 00002B 12.... LCALL ?MOVE_LONG8_XDATA_XDATA
|
|
\ 00002E 90.... MOV DPTR,#`?<Constant "">_1`
|
|
\ 000031 740A MOV A,#0xa
|
|
\ 000033 12.... LCALL ?MOVE_LONG8_XDATA_XDATA
|
|
\ 000036 90.... MOV DPTR,#`?<Constant "">_2`
|
|
\ 000039 740A MOV A,#0xa
|
|
\ 00003B 12.... LCALL ?MOVE_LONG8_XDATA_XDATA
|
|
328 unsigned short num1, num2, num3;
|
|
329 unsigned char i;
|
|
330
|
|
331 buf[0] = '\0';
|
|
\ 00003E 7435 MOV A,#0x35
|
|
\ 000040 12.... LCALL ?XSTACK_DISP0_8
|
|
\ 000043 12.... LCALL ?Subroutine16 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_19:
|
|
\ 000046 E4 CLR A
|
|
\ 000047 F0 MOVX @DPTR,A
|
|
332
|
|
333 if ( radix == 10 )
|
|
\ 000048 7402 MOV A,#0x2
|
|
\ 00004A 12.... LCALL ?XSTACK_DISP0_8
|
|
\ 00004D E0 MOVX A,@DPTR
|
|
\ 00004E 640A XRL A,#0xa
|
|
\ 000050 6003 JZ $+5
|
|
\ 000052 02.... LJMP ??_ltoa_0 & 0xFFFF
|
|
334 {
|
|
335 num1 = l % 10000;
|
|
\ 000055 7403 MOV A,#0x3
|
|
\ 000057 12.... LCALL ?XSTACK_DISP0_8
|
|
\ 00005A 78.. MOV R0,#?V4
|
|
\ 00005C 12.... LCALL ?L_MOV_X
|
|
\ 00005F 90.... MOV DPTR,#__Constant_2710
|
|
\ 000062 78.. MOV R0,#?V0
|
|
\ 000064 12.... LCALL ?L_MOV_X
|
|
\ 000067 78.. MOV R0,#?V4
|
|
\ 000069 79.. MOV R1,#?V0
|
|
\ 00006B 12.... LCALL ?UL_DIV_MOD
|
|
\ 00006E 85..82 MOV DPL,?XSP + 0
|
|
\ 000071 85..83 MOV DPH,?XSP + 1
|
|
\ 000074 E5.. MOV A,?V0
|
|
\ 000076 F0 MOVX @DPTR,A
|
|
\ 000077 A3 INC DPTR
|
|
\ 000078 E5.. MOV A,?V1
|
|
\ 00007A F0 MOVX @DPTR,A
|
|
336 num2 = (l / 10000) % 10000;
|
|
\ 00007B 7403 MOV A,#0x3
|
|
\ 00007D 12.... LCALL ?XSTACK_DISP0_8
|
|
\ 000080 78.. MOV R0,#?V4
|
|
\ 000082 12.... LCALL ?L_MOV_X
|
|
\ 000085 90.... MOV DPTR,#__Constant_2710
|
|
\ 000088 78.. MOV R0,#?V0
|
|
\ 00008A 12.... LCALL ?L_MOV_X
|
|
\ 00008D 78.. MOV R0,#?V4
|
|
\ 00008F 79.. MOV R1,#?V0
|
|
\ 000091 12.... LCALL ?UL_DIV_MOD
|
|
\ 000094 90.... MOV DPTR,#__Constant_2710
|
|
\ 000097 78.. MOV R0,#?V0
|
|
\ 000099 12.... LCALL ?L_MOV_X
|
|
\ 00009C 78.. MOV R0,#?V4
|
|
\ 00009E 79.. MOV R1,#?V0
|
|
\ 0000A0 12.... LCALL ?UL_DIV_MOD
|
|
\ 0000A3 AE.. MOV R6,?V0
|
|
\ 0000A5 AF.. MOV R7,?V1
|
|
337 num3 = (unsigned short)(l / 100000000);
|
|
\ 0000A7 7403 MOV A,#0x3
|
|
\ 0000A9 12.... LCALL ?XSTACK_DISP0_8
|
|
\ 0000AC 78.. MOV R0,#?V4
|
|
\ 0000AE 12.... LCALL ?L_MOV_X
|
|
\ 0000B1 90.... MOV DPTR,#__Constant_5f5e100
|
|
\ 0000B4 78.. MOV R0,#?V0
|
|
\ 0000B6 12.... LCALL ?L_MOV_X
|
|
\ 0000B9 78.. MOV R0,#?V4
|
|
\ 0000BB 79.. MOV R1,#?V0
|
|
\ 0000BD 12.... LCALL ?UL_DIV_MOD
|
|
\ 0000C0 85.... MOV ?V6,?V4
|
|
\ 0000C3 85.... MOV ?V7,?V5
|
|
338
|
|
339 if (num3) _itoa(num3, tmp3, 10);
|
|
\ 0000C6 E5.. MOV A,?V6
|
|
\ 0000C8 45.. ORL A,?V7
|
|
\ 0000CA 600E JZ ??_ltoa_1
|
|
\ 0000CC ; Setup parameters for call to function _itoa
|
|
\ 0000CC 790A MOV R1,#0xa
|
|
\ 0000CE 741B MOV A,#0x1b
|
|
\ 0000D0 12.... LCALL ?XSTACK_DISP102_8
|
|
\ 0000D3 AA.. MOV R2,?V6
|
|
\ 0000D5 AB.. MOV R3,?V7
|
|
\ 0000D7 12.... LCALL `??_itoa::?relay`; Banked call to: _itoa
|
|
340 if (num2) _itoa(num2, tmp2, 10);
|
|
\ ??_ltoa_1:
|
|
\ 0000DA EE MOV A,R6
|
|
\ 0000DB 4F ORL A,R7
|
|
\ 0000DC 600E JZ ??_ltoa_2
|
|
\ 0000DE ; Setup parameters for call to function _itoa
|
|
\ 0000DE 790A MOV R1,#0xa
|
|
\ 0000E0 7411 MOV A,#0x11
|
|
\ 0000E2 12.... LCALL ?XSTACK_DISP102_8
|
|
\ 0000E5 EE MOV A,R6
|
|
\ 0000E6 FA MOV R2,A
|
|
\ 0000E7 EF MOV A,R7
|
|
\ 0000E8 FB MOV R3,A
|
|
\ 0000E9 12.... LCALL `??_itoa::?relay`; Banked call to: _itoa
|
|
341 if (num1) _itoa(num1, tmp1, 10);
|
|
\ ??_ltoa_2:
|
|
\ 0000EC 12.... LCALL ?Subroutine6 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_85:
|
|
\ 0000EF 600A JZ ??CrossCallReturnLabel_17
|
|
\ 0000F1 ; Setup parameters for call to function _itoa
|
|
\ 0000F1 790A MOV R1,#0xa
|
|
\ 0000F3 7407 MOV A,#0x7
|
|
\ 0000F5 12.... LCALL ?XSTACK_DISP102_8
|
|
\ 0000F8 12.... LCALL ?Subroutine14 & 0xFFFF
|
|
342
|
|
343 if (num3)
|
|
\ ??CrossCallReturnLabel_17:
|
|
\ 0000FB E5.. MOV A,?V6
|
|
\ 0000FD 45.. ORL A,?V7
|
|
\ 0000FF 6029 JZ ??_ltoa_3
|
|
344 {
|
|
345 strcpy((char*)buf, (char const*)tmp3);
|
|
\ 000101 ; Setup parameters for call to function strcpy
|
|
\ 000101 741B MOV A,#0x1b
|
|
\ 000103 12.... LCALL ?XSTACK_DISP102_8
|
|
\ 000106 7435 MOV A,#0x35
|
|
\ 000108 12.... LCALL ?XSTACK_DISP0_8
|
|
\ 00010B 12.... LCALL ?Subroutine12 & 0xFFFF
|
|
346 for (i = 0; i < 4 - strlen((char const*)tmp2); i++)
|
|
\ ??CrossCallReturnLabel_13:
|
|
\ 00010E 800C SJMP ??CrossCallReturnLabel_5
|
|
347 strcat((char*)buf, "0");
|
|
\ ??_ltoa_4:
|
|
\ 000110 ; Setup parameters for call to function strcat
|
|
\ 000110 7C.. MOV R4,#`?<Constant "0">` & 0xff
|
|
\ 000112 7D.. MOV R5,#(`?<Constant "0">` >> 8) & 0xff
|
|
\ 000114 7435 MOV A,#0x35
|
|
\ 000116 12.... LCALL ?XSTACK_DISP0_8
|
|
\ 000119 12.... LCALL ?Subroutine8 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_5:
|
|
\ 00011C E5.. MOV A,?V2
|
|
\ 00011E F5.. MOV ?V0,A
|
|
\ 000120 ; Setup parameters for call to function strlen
|
|
\ 000120 7411 MOV A,#0x11
|
|
\ 000122 12.... LCALL ?XSTACK_DISP101_8
|
|
\ 000125 12.... LCALL ?Subroutine5 & 0xFFFF
|
|
348 }
|
|
\ ??CrossCallReturnLabel_0:
|
|
\ 000128 40E6 JC ??_ltoa_4
|
|
349 strcat((char*)buf, (char const*)tmp2);
|
|
\ ??_ltoa_3:
|
|
\ 00012A ; Setup parameters for call to function strcat
|
|
\ 00012A 7411 MOV A,#0x11
|
|
\ 00012C 12.... LCALL ?XSTACK_DISP102_8
|
|
\ 00012F 7435 MOV A,#0x35
|
|
\ 000131 12.... LCALL ?XSTACK_DISP0_8
|
|
\ 000134 12.... LCALL ?Subroutine10 & 0xFFFF
|
|
350 if (num3 || num2)
|
|
\ ??CrossCallReturnLabel_11:
|
|
\ 000137 7004 JNZ ??_ltoa_5
|
|
\ 000139 EE MOV A,R6
|
|
\ 00013A 4F ORL A,R7
|
|
\ 00013B 601F JZ ??_ltoa_6
|
|
351 {
|
|
352 for (i = 0; i < 4 - strlen((char const*)tmp1); i++)
|
|
\ ??_ltoa_5:
|
|
\ 00013D 75..00 MOV ?V2,#0x0
|
|
\ 000140 800C SJMP ??CrossCallReturnLabel_6
|
|
353 strcat((char*)buf, "0");
|
|
\ ??_ltoa_7:
|
|
\ 000142 ; Setup parameters for call to function strcat
|
|
\ 000142 7C.. MOV R4,#`?<Constant "0">` & 0xff
|
|
\ 000144 7D.. MOV R5,#(`?<Constant "0">` >> 8) & 0xff
|
|
\ 000146 7435 MOV A,#0x35
|
|
\ 000148 12.... LCALL ?XSTACK_DISP0_8
|
|
\ 00014B 12.... LCALL ?Subroutine8 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_6:
|
|
\ 00014E E5.. MOV A,?V2
|
|
\ 000150 F5.. MOV ?V0,A
|
|
\ 000152 ; Setup parameters for call to function strlen
|
|
\ 000152 7407 MOV A,#0x7
|
|
\ 000154 12.... LCALL ?XSTACK_DISP101_8
|
|
\ 000157 12.... LCALL ?Subroutine5 & 0xFFFF
|
|
354 }
|
|
\ ??CrossCallReturnLabel_1:
|
|
\ 00015A 40E6 JC ??_ltoa_7
|
|
355 strcat((char*)buf, (char const*)tmp1);
|
|
\ ??_ltoa_6:
|
|
\ 00015C ; Setup parameters for call to function strcat
|
|
\ 00015C 7407 MOV A,#0x7
|
|
\ 00015E 12.... LCALL ?XSTACK_DISP102_8
|
|
\ 000161 7435 MOV A,#0x35
|
|
\ 000163 12.... LCALL ?XSTACK_DISP0_8
|
|
\ 000166 12.... LCALL ?Subroutine10 & 0xFFFF
|
|
356 if (!num3 && !num2 && !num1)
|
|
357 strcpy((char*)buf, "0");
|
|
358 }
|
|
\ ??CrossCallReturnLabel_12:
|
|
\ 000169 7007 JNZ ??_ltoa_8
|
|
\ 00016B EE MOV A,R6
|
|
\ 00016C 4F ORL A,R7
|
|
\ 00016D 7003 JNZ $+5
|
|
\ 00016F 02.... LJMP ??_ltoa_9 & 0xFFFF
|
|
359 else if ( radix == 16 )
|
|
360 {
|
|
361 num1 = l & 0x0000FFFF;
|
|
362 num2 = l >> 16;
|
|
363
|
|
364 if (num2) _itoa(num2, tmp2, 16);
|
|
365 if (num1) _itoa(num1, tmp1, 16);
|
|
366
|
|
367 if (num2)
|
|
368 {
|
|
369 strcpy((char*)buf,(char const*)tmp2);
|
|
370 for (i = 0; i < 4 - strlen((char const*)tmp1); i++)
|
|
371 strcat((char*)buf, "0");
|
|
372 }
|
|
373 strcat((char*)buf, (char const*)tmp1);
|
|
374 if (!num2 && !num1)
|
|
375 strcpy((char*)buf, "0");
|
|
376 }
|
|
377 else
|
|
378 return NULL;
|
|
379
|
|
380 return buf;
|
|
\ ??_ltoa_8:
|
|
\ 000172 7435 MOV A,#0x35
|
|
\ 000174 12.... LCALL ?XSTACK_DISP0_8
|
|
\ 000177 12.... LCALL ??Subroutine35_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_51:
|
|
\ 00017A 7425 MOV A,#0x25
|
|
\ 00017C 12.... LCALL ?DEALLOC_XSTACK8
|
|
\ 00017F 02.... LJMP ?Subroutine2 & 0xFFFF
|
|
\ ??_ltoa_0:
|
|
\ 000182 E0 MOVX A,@DPTR
|
|
\ 000183 6410 XRL A,#0x10
|
|
\ 000185 6003 JZ $+5
|
|
\ 000187 02.... LJMP ??_ltoa_10 & 0xFFFF
|
|
\ 00018A 7403 MOV A,#0x3
|
|
\ 00018C 12.... LCALL ?XSTACK_DISP0_8
|
|
\ 00018F 78.. MOV R0,#?V0
|
|
\ 000191 12.... LCALL ?L_MOV_X
|
|
\ 000194 85..82 MOV DPL,?XSP + 0
|
|
\ 000197 85..83 MOV DPH,?XSP + 1
|
|
\ 00019A E5.. MOV A,?V0
|
|
\ 00019C F0 MOVX @DPTR,A
|
|
\ 00019D A3 INC DPTR
|
|
\ 00019E E5.. MOV A,?V1
|
|
\ 0001A0 F0 MOVX @DPTR,A
|
|
\ 0001A1 7403 MOV A,#0x3
|
|
\ 0001A3 12.... LCALL ?XSTACK_DISP0_8
|
|
\ 0001A6 78.. MOV R0,#?V0
|
|
\ 0001A8 12.... LCALL ?L_MOV_X
|
|
\ 0001AB 7410 MOV A,#0x10
|
|
\ 0001AD 78.. MOV R0,#?V0
|
|
\ 0001AF 12.... LCALL ?UL_SHR
|
|
\ 0001B2 AE.. MOV R6,?V0
|
|
\ 0001B4 AF.. MOV R7,?V1
|
|
\ 0001B6 EE MOV A,R6
|
|
\ 0001B7 4F ORL A,R7
|
|
\ 0001B8 600E JZ ??_ltoa_11
|
|
\ 0001BA ; Setup parameters for call to function _itoa
|
|
\ 0001BA 7910 MOV R1,#0x10
|
|
\ 0001BC 7411 MOV A,#0x11
|
|
\ 0001BE 12.... LCALL ?XSTACK_DISP102_8
|
|
\ 0001C1 EE MOV A,R6
|
|
\ 0001C2 FA MOV R2,A
|
|
\ 0001C3 EF MOV A,R7
|
|
\ 0001C4 FB MOV R3,A
|
|
\ 0001C5 12.... LCALL `??_itoa::?relay`; Banked call to: _itoa
|
|
\ ??_ltoa_11:
|
|
\ 0001C8 12.... LCALL ?Subroutine6 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_86:
|
|
\ 0001CB 600A JZ ??CrossCallReturnLabel_18
|
|
\ 0001CD ; Setup parameters for call to function _itoa
|
|
\ 0001CD 7910 MOV R1,#0x10
|
|
\ 0001CF 7407 MOV A,#0x7
|
|
\ 0001D1 12.... LCALL ?XSTACK_DISP102_8
|
|
\ 0001D4 12.... LCALL ?Subroutine14 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_18:
|
|
\ 0001D7 EE MOV A,R6
|
|
\ 0001D8 4F ORL A,R7
|
|
\ 0001D9 6029 JZ ??_ltoa_12
|
|
\ 0001DB ; Setup parameters for call to function strcpy
|
|
\ 0001DB 7411 MOV A,#0x11
|
|
\ 0001DD 12.... LCALL ?XSTACK_DISP102_8
|
|
\ 0001E0 7435 MOV A,#0x35
|
|
\ 0001E2 12.... LCALL ?XSTACK_DISP0_8
|
|
\ 0001E5 12.... LCALL ?Subroutine12 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_14:
|
|
\ 0001E8 800C SJMP ??CrossCallReturnLabel_7
|
|
\ ??_ltoa_13:
|
|
\ 0001EA ; Setup parameters for call to function strcat
|
|
\ 0001EA 7C.. MOV R4,#`?<Constant "0">` & 0xff
|
|
\ 0001EC 7D.. MOV R5,#(`?<Constant "0">` >> 8) & 0xff
|
|
\ 0001EE 7435 MOV A,#0x35
|
|
\ 0001F0 12.... LCALL ?XSTACK_DISP0_8
|
|
\ 0001F3 12.... LCALL ?Subroutine8 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_7:
|
|
\ 0001F6 E5.. MOV A,?V2
|
|
\ 0001F8 F5.. MOV ?V0,A
|
|
\ 0001FA ; Setup parameters for call to function strlen
|
|
\ 0001FA 7407 MOV A,#0x7
|
|
\ 0001FC 12.... LCALL ?XSTACK_DISP101_8
|
|
\ 0001FF 12.... LCALL ?Subroutine5 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_2:
|
|
\ 000202 40E6 JC ??_ltoa_13
|
|
\ ??_ltoa_12:
|
|
\ 000204 ; Setup parameters for call to function strcat
|
|
\ 000204 7407 MOV A,#0x7
|
|
\ 000206 12.... LCALL ?XSTACK_DISP102_8
|
|
\ 000209 7435 MOV A,#0x35
|
|
\ 00020B 12.... LCALL ?XSTACK_DISP0_8
|
|
\ 00020E 12.... LCALL ??Subroutine35_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_52:
|
|
\ 000211 12.... LCALL `??strcat::?relay`; Banked call to: strcat
|
|
\ 000214 EE MOV A,R6
|
|
\ 000215 4F ORL A,R7
|
|
\ 000216 6003 JZ $+5
|
|
\ 000218 02.... LJMP ??_ltoa_8 & 0xFFFF
|
|
\ ??_ltoa_9:
|
|
\ 00021B 12.... LCALL ?Subroutine6 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_87:
|
|
\ 00021E 6003 JZ $+5
|
|
\ 000220 02.... LJMP ??_ltoa_8 & 0xFFFF
|
|
\ 000223 ; Setup parameters for call to function strcpy
|
|
\ 000223 7C.. MOV R4,#`?<Constant "0">` & 0xff
|
|
\ 000225 7D.. MOV R5,#(`?<Constant "0">` >> 8) & 0xff
|
|
\ 000227 7435 MOV A,#0x35
|
|
\ 000229 12.... LCALL ?XSTACK_DISP0_8
|
|
\ 00022C 12.... LCALL ??Subroutine35_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_53:
|
|
\ 00022F 12.... LCALL `??strcpy::?relay`; Banked call to: strcpy
|
|
\ 000232 02.... LJMP ??_ltoa_8 & 0xFFFF
|
|
\ ??_ltoa_10:
|
|
\ 000235 7A00 MOV R2,#0x0
|
|
\ 000237 7B00 MOV R3,#0x0
|
|
\ 000239 02.... LJMP ??CrossCallReturnLabel_51 & 0xFFFF
|
|
381 #endif
|
|
382 }
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine14:
|
|
\ 000000 85..82 MOV DPL,?XSP + 0
|
|
\ 000003 85..83 MOV DPH,?XSP + 1
|
|
\ 000006 12.... LCALL ?Subroutine28 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_60:
|
|
\ 000009 12.... LCALL `??_itoa::?relay`; Banked call to: _itoa
|
|
\ 00000C 22 RET
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine12:
|
|
\ 000000 12.... LCALL ?Subroutine28 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_59:
|
|
\ 000003 12.... LCALL `??strcpy::?relay`; Banked call to: strcpy
|
|
\ 000006 75..00 MOV ?V2,#0x0
|
|
\ 000009 22 RET
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine10:
|
|
\ 000000 12.... LCALL ?Subroutine27 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_40:
|
|
\ 000003 E5.. MOV A,?V6
|
|
\ 000005 45.. ORL A,?V7
|
|
\ 000007 22 RET
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine8:
|
|
\ 000000 12.... LCALL ?Subroutine27 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_41:
|
|
\ 000003 05.. INC ?V2
|
|
\ 000005 22 RET
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine27:
|
|
\ 000000 E0 MOVX A,@DPTR
|
|
\ 000001 FA MOV R2,A
|
|
\ 000002 A3 INC DPTR
|
|
\ 000003 E0 MOVX A,@DPTR
|
|
\ 000004 FB MOV R3,A
|
|
\ 000005 12.... LCALL `??strcat::?relay`; Banked call to: strcat
|
|
\ 000008 22 RET
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine5:
|
|
\ 000000 12.... LCALL `??strlen::?relay`; Banked call to: strlen
|
|
\ 000003 8A.. MOV ?V4,R2
|
|
\ 000005 8B.. MOV ?V5,R3
|
|
\ 000007 7404 MOV A,#0x4
|
|
\ 000009 C3 CLR C
|
|
\ 00000A 95.. SUBB A,?V4
|
|
\ 00000C F8 MOV R0,A
|
|
\ 00000D E4 CLR A
|
|
\ 00000E 95.. SUBB A,?V5
|
|
\ 000010 F9 MOV R1,A
|
|
\ 000011 C3 CLR C
|
|
\ 000012 E5.. MOV A,?V0
|
|
\ 000014 98 SUBB A,R0
|
|
\ 000015 E4 CLR A
|
|
\ 000016 99 SUBB A,R1
|
|
\ 000017 22 RET
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ??Subroutine35_0:
|
|
\ 000000 12.... LCALL ?Subroutine28 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_61:
|
|
\ 000003 22 RET
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine6:
|
|
\ 000000 85..82 MOV DPL,?XSP + 0
|
|
\ 000003 85..83 MOV DPH,?XSP + 1
|
|
\ 000006 REQUIRE ??Subroutine39_0
|
|
\ 000006 ; // Fall through to label ??Subroutine39_0
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ??Subroutine39_0:
|
|
\ 000000 E0 MOVX A,@DPTR
|
|
\ 000001 F8 MOV R0,A
|
|
\ 000002 A3 INC DPTR
|
|
\ 000003 E0 MOVX A,@DPTR
|
|
\ 000004 F9 MOV R1,A
|
|
\ 000005 E8 MOV A,R0
|
|
\ 000006 49 ORL A,R1
|
|
\ 000007 22 RET
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine16:
|
|
\ 000000 E0 MOVX A,@DPTR
|
|
\ 000001 F8 MOV R0,A
|
|
\ 000002 A3 INC DPTR
|
|
\ 000003 E0 MOVX A,@DPTR
|
|
\ 000004 F583 MOV DPH,A
|
|
\ 000006 8882 MOV DPL,R0
|
|
\ 000008 22 RET
|
|
383 #endif // !defined(ZBIT) && !defined(ZBIT2)
|
|
384
|
|
385 /*********************************************************************
|
|
386 * @fn osal_rand
|
|
387 *
|
|
388 * @brief Random number generator
|
|
389 *
|
|
390 * @param none
|
|
391 *
|
|
392 * @return uint16 - new random number
|
|
393 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
394 uint16 osal_rand( void )
|
|
\ osal_rand:
|
|
395 {
|
|
\ 000000 C082 PUSH DPL
|
|
\ 000002 C083 PUSH DPH
|
|
\ 000004 ; Saved register size: 2
|
|
\ 000004 ; Auto size: 0
|
|
396 return ( Onboard_rand() );
|
|
\ 000004 ; Setup parameters for call to function Onboard_rand
|
|
\ 000004 12.... LCALL `??Onboard_rand::?relay`; Banked call to: Onboard_rand
|
|
\ 000007 80.. SJMP ?Subroutine0
|
|
397 }
|
|
398
|
|
399 /*********************************************************************
|
|
400 * API FUNCTIONS
|
|
401 *********************************************************************/
|
|
402
|
|
403 /*********************************************************************
|
|
404 * @fn osal_msg_allocate
|
|
405 *
|
|
406 * @brief
|
|
407 *
|
|
408 * This function is called by a task to allocate a message buffer
|
|
409 * into which the task will encode the particular message it wishes
|
|
410 * to send. This common buffer scheme is used to strictly limit the
|
|
411 * creation of message buffers within the system due to RAM size
|
|
412 * limitations on the microprocessor. Note that all message buffers
|
|
413 * are a fixed size (at least initially). The parameter len is kept
|
|
414 * in case a message pool with varying fixed message sizes is later
|
|
415 * created (for example, a pool of message buffers of size LARGE,
|
|
416 * MEDIUM and SMALL could be maintained and allocated based on request
|
|
417 * from the tasks).
|
|
418 *
|
|
419 *
|
|
420 * @param uint8 len - wanted buffer length
|
|
421 *
|
|
422 *
|
|
423 * @return pointer to allocated buffer or NULL if allocation failed.
|
|
424 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
425 uint8 * osal_msg_allocate( uint16 len )
|
|
\ osal_msg_allocate:
|
|
426 {
|
|
\ 000000 REQUIRE ?V0
|
|
\ 000000 REQUIRE ?V1
|
|
\ 000000 74F6 MOV A,#-0xa
|
|
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
|
|
\ 000005 ; Saved register size: 10
|
|
\ 000005 ; Auto size: 0
|
|
\ 000005 EA MOV A,R2
|
|
\ 000006 FE MOV R6,A
|
|
\ 000007 EB MOV A,R3
|
|
\ 000008 FF MOV R7,A
|
|
427 osal_msg_hdr_t *hdr;
|
|
428
|
|
429 if ( len == 0 )
|
|
\ 000009 EA MOV A,R2
|
|
\ 00000A 4F ORL A,R7
|
|
\ 00000B 6031 JZ ??osal_msg_allocate_0
|
|
430 return ( NULL );
|
|
431
|
|
432 hdr = (osal_msg_hdr_t *) osal_mem_alloc( (short)(len + sizeof( osal_msg_hdr_t )) );
|
|
\ 00000D ; Setup parameters for call to function osal_mem_alloc
|
|
\ 00000D EA MOV A,R2
|
|
\ 00000E 2405 ADD A,#0x5
|
|
\ 000010 FA MOV R2,A
|
|
\ 000011 E4 CLR A
|
|
\ 000012 3F ADDC A,R7
|
|
\ 000013 FB MOV R3,A
|
|
\ 000014 12.... LCALL `??osal_mem_alloc::?relay`; Banked call to: osal_mem_alloc
|
|
\ 000017 8B.. MOV ?V1,R3
|
|
\ 000019 A9.. MOV R1,?V1
|
|
433 if ( hdr )
|
|
\ 00001B EA MOV A,R2
|
|
\ 00001C 49 ORL A,R1
|
|
\ 00001D 601F JZ ??osal_msg_allocate_0
|
|
434 {
|
|
435 hdr->next = NULL;
|
|
\ 00001F 8A82 MOV DPL,R2
|
|
\ 000021 8B83 MOV DPH,R3
|
|
\ 000023 E4 CLR A
|
|
\ 000024 F0 MOVX @DPTR,A
|
|
\ 000025 A3 INC DPTR
|
|
\ 000026 12.... LCALL ??Subroutine32_0 & 0xFFFF
|
|
436 hdr->len = len;
|
|
\ ??CrossCallReturnLabel_44:
|
|
\ 000029 A3 INC DPTR
|
|
\ 00002A A3 INC DPTR
|
|
\ 00002B 12.... LCALL ?Subroutine18 & 0xFFFF
|
|
437 hdr->dest_id = TASK_NO_TASK;
|
|
\ ??CrossCallReturnLabel_42:
|
|
\ 00002E A3 INC DPTR
|
|
\ 00002F A3 INC DPTR
|
|
\ 000030 A3 INC DPTR
|
|
\ 000031 A3 INC DPTR
|
|
\ 000032 74FF MOV A,#-0x1
|
|
\ 000034 F0 MOVX @DPTR,A
|
|
438 return ( (uint8 *) (hdr + 1) );
|
|
\ 000035 EA MOV A,R2
|
|
\ 000036 2405 ADD A,#0x5
|
|
\ 000038 FA MOV R2,A
|
|
\ 000039 E4 CLR A
|
|
\ 00003A 39 ADDC A,R1
|
|
\ 00003B FB MOV R3,A
|
|
\ 00003C 8004 SJMP ??osal_msg_allocate_1
|
|
439 }
|
|
440 else
|
|
441 return ( NULL );
|
|
\ ??osal_msg_allocate_0:
|
|
\ 00003E 7A00 MOV R2,#0x0
|
|
\ 000040 7B00 MOV R3,#0x0
|
|
\ ??osal_msg_allocate_1:
|
|
\ 000042 02.... LJMP ?Subroutine3 & 0xFFFF
|
|
442 }
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine18:
|
|
\ 000000 EE MOV A,R6
|
|
\ 000001 F0 MOVX @DPTR,A
|
|
\ 000002 A3 INC DPTR
|
|
\ 000003 EF MOV A,R7
|
|
\ 000004 REQUIRE ??Subroutine32_0
|
|
\ 000004 ; // Fall through to label ??Subroutine32_0
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ??Subroutine32_0:
|
|
\ 000000 F0 MOVX @DPTR,A
|
|
\ 000001 8A82 MOV DPL,R2
|
|
\ 000003 8B83 MOV DPH,R3
|
|
\ 000005 22 RET
|
|
443
|
|
444 /*********************************************************************
|
|
445 * @fn osal_msg_deallocate
|
|
446 *
|
|
447 * @brief
|
|
448 *
|
|
449 * This function is used to deallocate a message buffer. This function
|
|
450 * is called by a task (or processing element) after it has finished
|
|
451 * processing a received message.
|
|
452 *
|
|
453 *
|
|
454 * @param uint8 *msg_ptr - pointer to new message buffer
|
|
455 *
|
|
456 * @return SUCCESS, INVALID_MSG_POINTER
|
|
457 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
458 uint8 osal_msg_deallocate( uint8 *msg_ptr )
|
|
\ osal_msg_deallocate:
|
|
459 {
|
|
\ 000000 C082 PUSH DPL
|
|
\ 000002 C083 PUSH DPH
|
|
\ 000004 ; Saved register size: 2
|
|
\ 000004 ; Auto size: 0
|
|
460 uint8 *x;
|
|
461
|
|
462 if ( msg_ptr == NULL )
|
|
\ 000004 EA MOV A,R2
|
|
\ 000005 4B ORL A,R3
|
|
\ 000006 7004 JNZ ??osal_msg_deallocate_0
|
|
463 return ( INVALID_MSG_POINTER );
|
|
\ 000008 7905 MOV R1,#0x5
|
|
\ 00000A 8016 SJMP ??osal_msg_deallocate_1
|
|
464
|
|
465 // don't deallocate queued buffer
|
|
466 if ( OSAL_MSG_ID( msg_ptr ) != TASK_NO_TASK )
|
|
\ ??osal_msg_deallocate_0:
|
|
\ 00000C 12.... LCALL ?Subroutine17 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_21:
|
|
\ 00000F 6004 JZ ??osal_msg_deallocate_2
|
|
467 return ( MSG_BUFFER_NOT_AVAIL );
|
|
\ 000011 7904 MOV R1,#0x4
|
|
\ 000013 800D SJMP ??osal_msg_deallocate_1
|
|
468
|
|
469 x = (uint8 *)((uint8 *)msg_ptr - sizeof( osal_msg_hdr_t ));
|
|
470
|
|
471 osal_mem_free( (void *)x );
|
|
\ ??osal_msg_deallocate_2:
|
|
\ 000015 ; Setup parameters for call to function osal_mem_free
|
|
\ 000015 EA MOV A,R2
|
|
\ 000016 24FB ADD A,#-0x5
|
|
\ 000018 FA MOV R2,A
|
|
\ 000019 EB MOV A,R3
|
|
\ 00001A 34FF ADDC A,#-0x1
|
|
\ 00001C FB MOV R3,A
|
|
\ 00001D 12.... LCALL `??osal_mem_free::?relay`; Banked call to: osal_mem_free
|
|
472
|
|
473 return ( SUCCESS );
|
|
\ 000020 7900 MOV R1,#0x0
|
|
\ ??osal_msg_deallocate_1:
|
|
\ 000022 REQUIRE ?Subroutine0
|
|
\ 000022 ; // Fall through to label ?Subroutine0
|
|
474 }
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine17:
|
|
\ 000000 12.... LCALL ?Subroutine24 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_34:
|
|
\ 000003 E0 MOVX A,@DPTR
|
|
\ 000004 F4 CPL A
|
|
\ 000005 22 RET
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine24:
|
|
\ 000000 EA MOV A,R2
|
|
\ 000001 24FF ADD A,#-0x1
|
|
\ 000003 F582 MOV DPL,A
|
|
\ 000005 EB MOV A,R3
|
|
\ 000006 34FF ADDC A,#-0x1
|
|
\ 000008 F583 MOV DPH,A
|
|
\ 00000A 22 RET
|
|
475
|
|
476 /*********************************************************************
|
|
477 * @fn osal_msg_send
|
|
478 *
|
|
479 * @brief
|
|
480 *
|
|
481 * This function is called by a task to send a command message to
|
|
482 * another task or processing element. The sending_task field must
|
|
483 * refer to a valid task, since the task ID will be used
|
|
484 * for the response message. This function will also set a message
|
|
485 * ready event in the destination tasks event list.
|
|
486 *
|
|
487 *
|
|
488 * @param uint8 destination task - Send msg to? Task ID
|
|
489 * @param uint8 *msg_ptr - pointer to new message buffer
|
|
490 * @param uint8 len - length of data in message
|
|
491 *
|
|
492 * @return SUCCESS, INVALID_TASK, INVALID_MSG_POINTER
|
|
493 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
494 uint8 osal_msg_send( uint8 destination_task, uint8 *msg_ptr )
|
|
\ osal_msg_send:
|
|
495 {
|
|
\ 000000 74F7 MOV A,#-0x9
|
|
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
|
|
\ 000005 ; Saved register size: 9
|
|
\ 000005 ; Auto size: 0
|
|
\ 000005 E9 MOV A,R1
|
|
\ 000006 FE MOV R6,A
|
|
496 if ( msg_ptr == NULL )
|
|
\ 000007 EA MOV A,R2
|
|
\ 000008 4B ORL A,R3
|
|
\ 000009 6025 JZ ??osal_msg_send_0
|
|
497 return ( INVALID_MSG_POINTER );
|
|
498
|
|
499 if ( destination_task >= tasksCnt )
|
|
\ 00000B 90.... MOV DPTR,#tasksCnt
|
|
\ 00000E E0 MOVX A,@DPTR
|
|
\ 00000F F8 MOV R0,A
|
|
\ 000010 E9 MOV A,R1
|
|
\ 000011 C3 CLR C
|
|
\ 000012 98 SUBB A,R0
|
|
\ 000013 4007 JC ??osal_msg_send_1
|
|
500 {
|
|
501 osal_msg_deallocate( msg_ptr );
|
|
\ 000015 ; Setup parameters for call to function osal_msg_deallocate
|
|
\ 000015 12.... LCALL `??osal_msg_deallocate::?relay`; Banked call to: osal_msg_deallocate
|
|
502 return ( INVALID_TASK );
|
|
\ 000018 7903 MOV R1,#0x3
|
|
\ 00001A 8030 SJMP ??osal_msg_send_2
|
|
503 }
|
|
504
|
|
505 // Check the message header
|
|
506 if ( OSAL_MSG_NEXT( msg_ptr ) != NULL ||
|
|
507 OSAL_MSG_ID( msg_ptr ) != TASK_NO_TASK )
|
|
\ ??osal_msg_send_1:
|
|
\ 00001C 12.... LCALL ?Subroutine29 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_78:
|
|
\ 00001F EB MOV A,R3
|
|
\ 000020 12.... LCALL ??Subroutine37_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_62:
|
|
\ 000023 12.... LCALL ??Subroutine39_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_81:
|
|
\ 000026 7005 JNZ ??osal_msg_send_3
|
|
\ 000028 12.... LCALL ?Subroutine17 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_22:
|
|
\ 00002B 6007 JZ ??osal_msg_send_4
|
|
508 {
|
|
509 osal_msg_deallocate( msg_ptr );
|
|
\ ??osal_msg_send_3:
|
|
\ 00002D ; Setup parameters for call to function osal_msg_deallocate
|
|
\ 00002D 12.... LCALL `??osal_msg_deallocate::?relay`; Banked call to: osal_msg_deallocate
|
|
510 return ( INVALID_MSG_POINTER );
|
|
\ ??osal_msg_send_0:
|
|
\ 000030 7905 MOV R1,#0x5
|
|
\ 000032 8018 SJMP ??osal_msg_send_2
|
|
511 }
|
|
512
|
|
513 OSAL_MSG_ID( msg_ptr ) = destination_task;
|
|
\ ??osal_msg_send_4:
|
|
\ 000034 EE MOV A,R6
|
|
\ 000035 F0 MOVX @DPTR,A
|
|
514
|
|
515 // queue message
|
|
516 osal_msg_enqueue( &osal_qHead, msg_ptr );
|
|
\ 000036 ; Setup parameters for call to function osal_msg_enqueue
|
|
\ 000036 EA MOV A,R2
|
|
\ 000037 FC MOV R4,A
|
|
\ 000038 EB MOV A,R3
|
|
\ 000039 FD MOV R5,A
|
|
\ 00003A 7A.. MOV R2,#osal_qHead & 0xff
|
|
\ 00003C 7B.. MOV R3,#(osal_qHead >> 8) & 0xff
|
|
\ 00003E 12.... LCALL `??osal_msg_enqueue::?relay`; Banked call to: osal_msg_enqueue
|
|
517
|
|
518 // Signal the task that a message is waiting
|
|
519 osal_set_event( destination_task, SYS_EVENT_MSG );
|
|
\ 000041 ; Setup parameters for call to function osal_set_event
|
|
\ 000041 7A00 MOV R2,#0x0
|
|
\ 000043 7B80 MOV R3,#-0x80
|
|
\ 000045 EE MOV A,R6
|
|
\ 000046 F9 MOV R1,A
|
|
\ 000047 12.... LCALL `??osal_set_event::?relay`; Banked call to: osal_set_event
|
|
520
|
|
521 return ( SUCCESS );
|
|
\ 00004A 7900 MOV R1,#0x0
|
|
\ ??osal_msg_send_2:
|
|
\ 00004C 80.. SJMP ??Subroutine31_0
|
|
522 }
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ??Subroutine37_0:
|
|
\ 000000 34FF ADDC A,#-0x1
|
|
\ 000002 F583 MOV DPH,A
|
|
\ 000004 22 RET
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine29:
|
|
\ 000000 EA MOV A,R2
|
|
\ 000001 REQUIRE ??Subroutine38_0
|
|
\ 000001 ; // Fall through to label ??Subroutine38_0
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ??Subroutine38_0:
|
|
\ 000000 24FB ADD A,#-0x5
|
|
\ 000002 F582 MOV DPL,A
|
|
\ 000004 22 RET
|
|
523
|
|
524 /*********************************************************************
|
|
525 * @fn osal_msg_receive
|
|
526 *
|
|
527 * @brief
|
|
528 *
|
|
529 * This function is called by a task to retrieve a received command
|
|
530 * message. The calling task must deallocate the message buffer after
|
|
531 * processing the message using the osal_msg_deallocate() call.
|
|
532 *
|
|
533 * @param uint8 task_id - receiving tasks ID
|
|
534 *
|
|
535 * @return *uint8 - message information or NULL if no message
|
|
536 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
537 uint8 *osal_msg_receive( uint8 task_id )
|
|
\ osal_msg_receive:
|
|
538 {
|
|
\ 000000 REQUIRE ?V0
|
|
\ 000000 REQUIRE ?V1
|
|
\ 000000 REQUIRE ?V2
|
|
\ 000000 REQUIRE ?V3
|
|
\ 000000 74F4 MOV A,#-0xc
|
|
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
|
|
\ 000005 ; Saved register size: 12
|
|
\ 000005 ; Auto size: 0
|
|
\ 000005 89.. MOV ?V0,R1
|
|
539 osal_msg_hdr_t *listHdr;
|
|
540 osal_msg_hdr_t *prevHdr = NULL;
|
|
\ 000007 75..00 MOV ?V2,#0x0
|
|
\ 00000A 75..00 MOV ?V3,#0x0
|
|
541 osal_msg_hdr_t *foundHdr = NULL;
|
|
\ 00000D 7E00 MOV R6,#0x0
|
|
\ 00000F 7F00 MOV R7,#0x0
|
|
542 halIntState_t intState;
|
|
543
|
|
544 // Hold off interrupts
|
|
545 HAL_ENTER_CRITICAL_SECTION(intState);
|
|
\ 000011 A2AF MOV C,0xa8.7
|
|
\ 000013 E4 CLR A
|
|
\ 000014 33 RLC A
|
|
\ 000015 F5.. MOV ?V1,A
|
|
\ 000017 C2AF CLR 0xa8.7
|
|
546
|
|
547 // Point to the top of the queue
|
|
548 listHdr = osal_qHead;
|
|
\ 000019 90.... MOV DPTR,#osal_qHead
|
|
\ 00001C 800B SJMP ??CrossCallReturnLabel_70
|
|
549
|
|
550 // Look through the queue for a message that belongs to the asking task
|
|
551 while ( listHdr != NULL )
|
|
552 {
|
|
553 if ( (listHdr - 1)->dest_id == task_id )
|
|
554 {
|
|
555 if ( foundHdr == NULL )
|
|
556 {
|
|
557 // Save the first one
|
|
558 foundHdr = listHdr;
|
|
559 }
|
|
560 else
|
|
561 {
|
|
562 // Second msg found, stop looking
|
|
563 break;
|
|
564 }
|
|
565 }
|
|
566 if ( foundHdr == NULL )
|
|
\ ??osal_msg_receive_0:
|
|
\ 00001E EE MOV A,R6
|
|
\ 00001F 4F ORL A,R7
|
|
\ 000020 7004 JNZ ??osal_msg_receive_1
|
|
567 {
|
|
568 prevHdr = listHdr;
|
|
\ 000022 88.. MOV ?V2,R0
|
|
\ 000024 89.. MOV ?V3,R1
|
|
569 }
|
|
570 listHdr = OSAL_MSG_NEXT( listHdr );
|
|
\ ??osal_msg_receive_1:
|
|
\ 000026 12.... LCALL ?Subroutine22 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_70:
|
|
\ 000029 12.... LCALL ??Subroutine39_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_80:
|
|
\ 00002C 6020 JZ ??osal_msg_receive_2
|
|
\ 00002E E8 MOV A,R0
|
|
\ 00002F 24FF ADD A,#-0x1
|
|
\ 000031 12.... LCALL ??Subroutine36_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_69:
|
|
\ 000034 E0 MOVX A,@DPTR
|
|
\ 000035 65.. XRL A,?V0
|
|
\ 000037 70E5 JNZ ??osal_msg_receive_0
|
|
\ 000039 EE MOV A,R6
|
|
\ 00003A 4F ORL A,R7
|
|
\ 00003B 7006 JNZ ??osal_msg_receive_3
|
|
\ 00003D E8 MOV A,R0
|
|
\ 00003E FE MOV R6,A
|
|
\ 00003F E9 MOV A,R1
|
|
\ 000040 FF MOV R7,A
|
|
\ 000041 80E3 SJMP ??osal_msg_receive_1
|
|
571 }
|
|
572
|
|
573 // Is there more than one?
|
|
574 if ( listHdr != NULL )
|
|
575 {
|
|
576 // Yes, Signal the task that a message is waiting
|
|
577 osal_set_event( task_id, SYS_EVENT_MSG );
|
|
\ ??osal_msg_receive_3:
|
|
\ 000043 ; Setup parameters for call to function osal_set_event
|
|
\ 000043 7A00 MOV R2,#0x0
|
|
\ 000045 7B80 MOV R3,#-0x80
|
|
\ 000047 A9.. MOV R1,?V0
|
|
\ 000049 12.... LCALL `??osal_set_event::?relay`; Banked call to: osal_set_event
|
|
\ 00004C 800D SJMP ??osal_msg_receive_4
|
|
578 }
|
|
579 else
|
|
580 {
|
|
581 // No more
|
|
582 osal_clear_event( task_id, SYS_EVENT_MSG );
|
|
\ ??osal_msg_receive_2:
|
|
\ 00004E ; Setup parameters for call to function osal_clear_event
|
|
\ 00004E 7A00 MOV R2,#0x0
|
|
\ 000050 7B80 MOV R3,#-0x80
|
|
\ 000052 A9.. MOV R1,?V0
|
|
\ 000054 12.... LCALL `??osal_clear_event::?relay`; Banked call to: osal_clear_event
|
|
583 }
|
|
584
|
|
585 // Did we find a message?
|
|
586 if ( foundHdr != NULL )
|
|
\ 000057 EE MOV A,R6
|
|
\ 000058 4F ORL A,R7
|
|
\ 000059 6015 JZ ??osal_msg_receive_5
|
|
587 {
|
|
588 // Take out of the link list
|
|
589 osal_msg_extract( &osal_qHead, foundHdr, prevHdr );
|
|
\ ??osal_msg_receive_4:
|
|
\ 00005B ; Setup parameters for call to function osal_msg_extract
|
|
\ 00005B 78.. MOV R0,#?V2
|
|
\ 00005D 12.... LCALL ?PUSH_XSTACK_I_TWO
|
|
\ 000060 EE MOV A,R6
|
|
\ 000061 FC MOV R4,A
|
|
\ 000062 EF MOV A,R7
|
|
\ 000063 FD MOV R5,A
|
|
\ 000064 7A.. MOV R2,#osal_qHead & 0xff
|
|
\ 000066 7B.. MOV R3,#(osal_qHead >> 8) & 0xff
|
|
\ 000068 12.... LCALL `??osal_msg_extract::?relay`; Banked call to: osal_msg_extract
|
|
\ 00006B 7402 MOV A,#0x2
|
|
\ 00006D 12.... LCALL ?DEALLOC_XSTACK8
|
|
590 }
|
|
591
|
|
592 // Release interrupts
|
|
593 HAL_EXIT_CRITICAL_SECTION(intState);
|
|
\ ??osal_msg_receive_5:
|
|
\ 000070 E5.. MOV A,?V1
|
|
\ 000072 A2E0 MOV C,0xE0 /* A */.0
|
|
\ 000074 92AF MOV 0xa8.7,C
|
|
594
|
|
595 return ( (uint8*) foundHdr );
|
|
\ 000076 EE MOV A,R6
|
|
\ 000077 FA MOV R2,A
|
|
\ 000078 EF MOV A,R7
|
|
\ 000079 FB MOV R3,A
|
|
\ 00007A 7F04 MOV R7,#0x4
|
|
\ 00007C 02.... LJMP ?BANKED_LEAVE_XDATA
|
|
\ 00007F REQUIRE _A_IEN0
|
|
596 }
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine22:
|
|
\ 000000 E8 MOV A,R0
|
|
\ 000001 24FB ADD A,#-0x5
|
|
\ 000003 REQUIRE ??Subroutine36_0
|
|
\ 000003 ; // Fall through to label ??Subroutine36_0
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ??Subroutine36_0:
|
|
\ 000000 F582 MOV DPL,A
|
|
\ 000002 E9 MOV A,R1
|
|
\ 000003 REQUIRE ??Subroutine37_0
|
|
\ 000003 ; // Fall through to label ??Subroutine37_0
|
|
597
|
|
598 /**************************************************************************************************
|
|
599 * @fn osal_msg_find
|
|
600 *
|
|
601 * @brief This function finds in place an OSAL message matching the task_id and event
|
|
602 * parameters.
|
|
603 *
|
|
604 * input parameters
|
|
605 *
|
|
606 * @param task_id - The OSAL task id that the enqueued OSAL message must match.
|
|
607 * @param event - The OSAL event id that the enqueued OSAL message must match.
|
|
608 *
|
|
609 * output parameters
|
|
610 *
|
|
611 * None.
|
|
612 *
|
|
613 * @return NULL if no match, otherwise an in place pointer to the matching OSAL message.
|
|
614 **************************************************************************************************
|
|
615 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
616 osal_event_hdr_t *osal_msg_find(uint8 task_id, uint8 event)
|
|
\ osal_msg_find:
|
|
617 {
|
|
\ 000000 C082 PUSH DPL
|
|
\ 000002 C083 PUSH DPH
|
|
\ 000004 ; Saved register size: 2
|
|
\ 000004 ; Auto size: 0
|
|
\ 000004 EA MOV A,R2
|
|
\ 000005 FC MOV R4,A
|
|
618 osal_msg_hdr_t *pHdr;
|
|
619 halIntState_t intState;
|
|
620
|
|
621 HAL_ENTER_CRITICAL_SECTION(intState); // Hold off interrupts.
|
|
\ 000006 A2AF MOV C,0xa8.7
|
|
\ 000008 E4 CLR A
|
|
\ 000009 33 RLC A
|
|
\ 00000A F8 MOV R0,A
|
|
\ 00000B C2AF CLR 0xa8.7
|
|
622
|
|
623 pHdr = osal_qHead; // Point to the top of the queue.
|
|
\ 00000D 90.... MOV DPTR,#osal_qHead
|
|
\ 000010 8007 SJMP ??CrossCallReturnLabel_63
|
|
624
|
|
625 // Look through the queue for a message that matches the task_id and event parameters.
|
|
626 while (pHdr != NULL)
|
|
627 {
|
|
628 if (((pHdr-1)->dest_id == task_id) && (((osal_event_hdr_t *)pHdr)->event == event))
|
|
629 {
|
|
630 break;
|
|
631 }
|
|
632
|
|
633 pHdr = OSAL_MSG_NEXT(pHdr);
|
|
\ ??osal_msg_find_0:
|
|
\ 000012 12.... LCALL ?Subroutine29 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_79:
|
|
\ 000015 EB MOV A,R3
|
|
\ 000016 12.... LCALL ??Subroutine37_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_63:
|
|
\ 000019 12.... LCALL ??Subroutine35_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_54:
|
|
\ 00001C EA MOV A,R2
|
|
\ 00001D 4B ORL A,R3
|
|
\ 00001E 600F JZ ??osal_msg_find_1
|
|
\ 000020 12.... LCALL ?Subroutine20 & 0xFFFF
|
|
634 }
|
|
\ ??CrossCallReturnLabel_25:
|
|
\ 000023 E0 MOVX A,@DPTR
|
|
\ 000024 69 XRL A,R1
|
|
\ 000025 70EB JNZ ??osal_msg_find_0
|
|
\ 000027 8A82 MOV DPL,R2
|
|
\ 000029 8B83 MOV DPH,R3
|
|
\ 00002B E0 MOVX A,@DPTR
|
|
\ 00002C 6C XRL A,R4
|
|
\ 00002D 70E3 JNZ ??osal_msg_find_0
|
|
635
|
|
636 HAL_EXIT_CRITICAL_SECTION(intState); // Release interrupts.
|
|
\ ??osal_msg_find_1:
|
|
\ 00002F E8 MOV A,R0
|
|
\ 000030 A2E0 MOV C,0xE0 /* A */.0
|
|
\ 000032 92AF MOV 0xa8.7,C
|
|
637
|
|
638 return (osal_event_hdr_t *)pHdr;
|
|
\ 000034 02.... LJMP ?Subroutine0 & 0xFFFF
|
|
\ 000037 REQUIRE _A_IEN0
|
|
639 }
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine20:
|
|
\ 000000 12.... LCALL ?Subroutine24 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_35:
|
|
\ 000003 22 RET
|
|
640
|
|
641 /*********************************************************************
|
|
642 * @fn osal_msg_enqueue
|
|
643 *
|
|
644 * @brief
|
|
645 *
|
|
646 * This function enqueues an OSAL message into an OSAL queue.
|
|
647 *
|
|
648 * @param osal_msg_q_t *q_ptr - OSAL queue
|
|
649 * @param void *msg_ptr - OSAL message
|
|
650 *
|
|
651 * @return none
|
|
652 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine1:
|
|
\ 000000 F0 MOVX @DPTR,A
|
|
\ 000001 EE MOV A,R6
|
|
\ 000002 A2E0 MOV C,0xE0 /* A */.0
|
|
\ 000004 REQUIRE ??Subroutine30_0
|
|
\ 000004 ; // Fall through to label ??Subroutine30_0
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ??Subroutine30_0:
|
|
\ 000000 92AF MOV 0xa8.7,C
|
|
\ 000002 REQUIRE ??Subroutine31_0
|
|
\ 000002 ; // Fall through to label ??Subroutine31_0
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
653 void osal_msg_enqueue( osal_msg_q_t *q_ptr, void *msg_ptr )
|
|
\ osal_msg_enqueue:
|
|
654 {
|
|
\ 000000 74F7 MOV A,#-0x9
|
|
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
|
|
\ 000005 ; Saved register size: 9
|
|
\ 000005 ; Auto size: 0
|
|
655 void *list;
|
|
656 halIntState_t intState;
|
|
657
|
|
658 // Hold off interrupts
|
|
659 HAL_ENTER_CRITICAL_SECTION(intState);
|
|
\ 000005 A2AF MOV C,0xa8.7
|
|
\ 000007 E4 CLR A
|
|
\ 000008 33 RLC A
|
|
\ 000009 FE MOV R6,A
|
|
\ 00000A C2AF CLR 0xa8.7
|
|
660
|
|
661 OSAL_MSG_NEXT( msg_ptr ) = NULL;
|
|
\ 00000C 12.... LCALL ?Subroutine23 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_29:
|
|
\ 00000F 12.... LCALL ??Subroutine37_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_64:
|
|
\ 000012 E4 CLR A
|
|
\ 000013 F0 MOVX @DPTR,A
|
|
\ 000014 A3 INC DPTR
|
|
\ 000015 12.... LCALL ??Subroutine32_0 & 0xFFFF
|
|
662 // If first message in queue
|
|
663 if ( *q_ptr == NULL )
|
|
\ ??CrossCallReturnLabel_45:
|
|
\ 000018 12.... LCALL ??Subroutine39_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_82:
|
|
\ 00001B 7009 JNZ ??CrossCallReturnLabel_49
|
|
664 {
|
|
665 *q_ptr = msg_ptr;
|
|
\ 00001D 8A82 MOV DPL,R2
|
|
\ 00001F 8B83 MOV DPH,R3
|
|
\ 000021 8014 SJMP ??CrossCallReturnLabel_71
|
|
666 }
|
|
667 else
|
|
668 {
|
|
669 // Find end of queue
|
|
670 for ( list = *q_ptr; OSAL_MSG_NEXT( list ) != NULL; list = OSAL_MSG_NEXT( list ) );
|
|
\ ??osal_msg_enqueue_0:
|
|
\ 000023 12.... LCALL ?Subroutine11 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_49:
|
|
\ 000026 E8 MOV A,R0
|
|
\ 000027 12.... LCALL ??Subroutine38_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_74:
|
|
\ 00002A E9 MOV A,R1
|
|
\ 00002B 34FF ADDC A,#-0x1
|
|
\ 00002D 12.... LCALL ?Subroutine15 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_56:
|
|
\ 000030 EA MOV A,R2
|
|
\ 000031 4B ORL A,R3
|
|
\ 000032 70EF JNZ ??osal_msg_enqueue_0
|
|
671
|
|
672 // Add message to end of queue
|
|
673 OSAL_MSG_NEXT( list ) = msg_ptr;
|
|
\ 000034 12.... LCALL ?Subroutine22 & 0xFFFF
|
|
674 }
|
|
\ ??CrossCallReturnLabel_71:
|
|
\ 000037 EC MOV A,R4
|
|
\ 000038 F0 MOVX @DPTR,A
|
|
\ 000039 A3 INC DPTR
|
|
\ 00003A ED MOV A,R5
|
|
\ 00003B 02.... LJMP ?Subroutine1 & 0xFFFF
|
|
\ 00003E REQUIRE _A_IEN0
|
|
675
|
|
676 // Re-enable interrupts
|
|
677 HAL_EXIT_CRITICAL_SECTION(intState);
|
|
678 }
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine11:
|
|
\ 000000 E8 MOV A,R0
|
|
\ 000001 12.... LCALL ??Subroutine38_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_76:
|
|
\ 000004 E9 MOV A,R1
|
|
\ 000005 REQUIRE ??Subroutine33_0
|
|
\ 000005 ; // Fall through to label ??Subroutine33_0
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ??Subroutine33_0:
|
|
\ 000000 34FF ADDC A,#-0x1
|
|
\ 000002 F583 MOV DPH,A
|
|
\ 000004 REQUIRE ??Subroutine34_0
|
|
\ 000004 ; // Fall through to label ??Subroutine34_0
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ??Subroutine34_0:
|
|
\ 000000 E0 MOVX A,@DPTR
|
|
\ 000001 F8 MOV R0,A
|
|
\ 000002 A3 INC DPTR
|
|
\ 000003 E0 MOVX A,@DPTR
|
|
\ 000004 F9 MOV R1,A
|
|
\ 000005 22 RET
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine15:
|
|
\ 000000 F583 MOV DPH,A
|
|
\ 000002 REQUIRE ??Subroutine35_0
|
|
\ 000002 ; // Fall through to label ??Subroutine35_0
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine23:
|
|
\ 000000 EC MOV A,R4
|
|
\ 000001 12.... LCALL ??Subroutine38_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_77:
|
|
\ 000004 ED MOV A,R5
|
|
\ 000005 22 RET
|
|
679
|
|
680 /*********************************************************************
|
|
681 * @fn osal_msg_dequeue
|
|
682 *
|
|
683 * @brief
|
|
684 *
|
|
685 * This function dequeues an OSAL message from an OSAL queue.
|
|
686 *
|
|
687 * @param osal_msg_q_t *q_ptr - OSAL queue
|
|
688 *
|
|
689 * @return void * - pointer to OSAL message or NULL of queue is empty.
|
|
690 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
691 void *osal_msg_dequeue( osal_msg_q_t *q_ptr )
|
|
\ osal_msg_dequeue:
|
|
692 {
|
|
\ 000000 REQUIRE ?V0
|
|
\ 000000 REQUIRE ?V1
|
|
\ 000000 74F6 MOV A,#-0xa
|
|
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
|
|
\ 000005 ; Saved register size: 10
|
|
\ 000005 ; Auto size: 0
|
|
\ 000005 EA MOV A,R2
|
|
\ 000006 F8 MOV R0,A
|
|
\ 000007 EB MOV A,R3
|
|
\ 000008 F9 MOV R1,A
|
|
693 void *msg_ptr = NULL;
|
|
\ 000009 7A00 MOV R2,#0x0
|
|
\ 00000B 7B00 MOV R3,#0x0
|
|
694 halIntState_t intState;
|
|
695
|
|
696 // Hold off interrupts
|
|
697 HAL_ENTER_CRITICAL_SECTION(intState);
|
|
\ 00000D A2AF MOV C,0xa8.7
|
|
\ 00000F E4 CLR A
|
|
\ 000010 33 RLC A
|
|
\ 000011 FE MOV R6,A
|
|
\ 000012 C2AF CLR 0xa8.7
|
|
698
|
|
699 if ( *q_ptr != NULL )
|
|
\ 000014 8882 MOV DPL,R0
|
|
\ 000016 8983 MOV DPH,R1
|
|
\ 000018 E0 MOVX A,@DPTR
|
|
\ 000019 FC MOV R4,A
|
|
\ 00001A A3 INC DPTR
|
|
\ 00001B E0 MOVX A,@DPTR
|
|
\ 00001C FD MOV R5,A
|
|
\ 00001D EC MOV A,R4
|
|
\ 00001E 4D ORL A,R5
|
|
\ 00001F 6033 JZ ??osal_msg_dequeue_0
|
|
700 {
|
|
701 // Dequeue message
|
|
702 msg_ptr = *q_ptr;
|
|
\ 000021 8882 MOV DPL,R0
|
|
\ 000023 8983 MOV DPH,R1
|
|
\ 000025 12.... LCALL ??Subroutine35_0 & 0xFFFF
|
|
703 *q_ptr = OSAL_MSG_NEXT( msg_ptr );
|
|
\ ??CrossCallReturnLabel_55:
|
|
\ 000028 EC MOV A,R4
|
|
\ 000029 24FB ADD A,#-0x5
|
|
\ 00002B FC MOV R4,A
|
|
\ 00002C ED MOV A,R5
|
|
\ 00002D 34FF ADDC A,#-0x1
|
|
\ 00002F FD MOV R5,A
|
|
\ 000030 8C82 MOV DPL,R4
|
|
\ 000032 F583 MOV DPH,A
|
|
\ 000034 E0 MOVX A,@DPTR
|
|
\ 000035 F5.. MOV ?V0,A
|
|
\ 000037 A3 INC DPTR
|
|
\ 000038 E0 MOVX A,@DPTR
|
|
\ 000039 F5.. MOV ?V1,A
|
|
\ 00003B 8882 MOV DPL,R0
|
|
\ 00003D 8983 MOV DPH,R1
|
|
\ 00003F E5.. MOV A,?V0
|
|
\ 000041 F0 MOVX @DPTR,A
|
|
\ 000042 A3 INC DPTR
|
|
\ 000043 E5.. MOV A,?V1
|
|
\ 000045 F0 MOVX @DPTR,A
|
|
704 OSAL_MSG_NEXT( msg_ptr ) = NULL;
|
|
\ 000046 8C82 MOV DPL,R4
|
|
\ 000048 8D83 MOV DPH,R5
|
|
\ 00004A E4 CLR A
|
|
\ 00004B F0 MOVX @DPTR,A
|
|
\ 00004C A3 INC DPTR
|
|
\ 00004D F0 MOVX @DPTR,A
|
|
705 OSAL_MSG_ID( msg_ptr ) = TASK_NO_TASK;
|
|
\ 00004E 12.... LCALL ?Subroutine20 & 0xFFFF
|
|
706 }
|
|
\ ??CrossCallReturnLabel_26:
|
|
\ 000051 74FF MOV A,#-0x1
|
|
\ 000053 F0 MOVX @DPTR,A
|
|
707
|
|
708 // Re-enable interrupts
|
|
709 HAL_EXIT_CRITICAL_SECTION(intState);
|
|
\ ??osal_msg_dequeue_0:
|
|
\ 000054 EE MOV A,R6
|
|
\ 000055 A2E0 MOV C,0xE0 /* A */.0
|
|
\ 000057 92AF MOV 0xa8.7,C
|
|
710
|
|
711 return msg_ptr;
|
|
\ 000059 REQUIRE ?Subroutine3
|
|
\ 000059 REQUIRE _A_IEN0
|
|
\ 000059 ; // Fall through to label ?Subroutine3
|
|
712 }
|
|
713
|
|
714 /*********************************************************************
|
|
715 * @fn osal_msg_push
|
|
716 *
|
|
717 * @brief
|
|
718 *
|
|
719 * This function pushes an OSAL message to the head of an OSAL
|
|
720 * queue.
|
|
721 *
|
|
722 * @param osal_msg_q_t *q_ptr - OSAL queue
|
|
723 * @param void *msg_ptr - OSAL message
|
|
724 *
|
|
725 * @return none
|
|
726 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
727 void osal_msg_push( osal_msg_q_t *q_ptr, void *msg_ptr )
|
|
\ osal_msg_push:
|
|
728 {
|
|
\ 000000 74F7 MOV A,#-0x9
|
|
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
|
|
\ 000005 ; Saved register size: 9
|
|
\ 000005 ; Auto size: 0
|
|
729 halIntState_t intState;
|
|
730
|
|
731 // Hold off interrupts
|
|
732 HAL_ENTER_CRITICAL_SECTION(intState);
|
|
\ 000005 A8A8 MOV R0,0xa8+0x0
|
|
\ 000007 C2AF CLR 0xa8.7
|
|
733
|
|
734 // Push message to head of queue
|
|
735 OSAL_MSG_NEXT( msg_ptr ) = *q_ptr;
|
|
\ 000009 8A82 MOV DPL,R2
|
|
\ 00000B 8B83 MOV DPH,R3
|
|
\ 00000D E0 MOVX A,@DPTR
|
|
\ 00000E FE MOV R6,A
|
|
\ 00000F A3 INC DPTR
|
|
\ 000010 E0 MOVX A,@DPTR
|
|
\ 000011 FF MOV R7,A
|
|
\ 000012 12.... LCALL ?Subroutine23 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_30:
|
|
\ 000015 12.... LCALL ??Subroutine37_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_65:
|
|
\ 000018 12.... LCALL ?Subroutine18 & 0xFFFF
|
|
736 *q_ptr = msg_ptr;
|
|
\ ??CrossCallReturnLabel_43:
|
|
\ 00001B EC MOV A,R4
|
|
\ 00001C F0 MOVX @DPTR,A
|
|
\ 00001D A3 INC DPTR
|
|
\ 00001E ED MOV A,R5
|
|
\ 00001F F0 MOVX @DPTR,A
|
|
737
|
|
738 // Re-enable interrupts
|
|
739 HAL_EXIT_CRITICAL_SECTION(intState);
|
|
\ 000020 E8 MOV A,R0
|
|
\ 000021 A2E7 MOV C,0xE0 /* A */.7
|
|
\ 000023 02.... LJMP ??Subroutine30_0 & 0xFFFF
|
|
\ 000026 REQUIRE _A_IEN0
|
|
740 }
|
|
741
|
|
742 /*********************************************************************
|
|
743 * @fn osal_msg_extract
|
|
744 *
|
|
745 * @brief
|
|
746 *
|
|
747 * This function extracts and removes an OSAL message from the
|
|
748 * middle of an OSAL queue.
|
|
749 *
|
|
750 * @param osal_msg_q_t *q_ptr - OSAL queue
|
|
751 * @param void *msg_ptr - OSAL message to be extracted
|
|
752 * @param void *prev_ptr - OSAL message before msg_ptr in queue
|
|
753 *
|
|
754 * @return none
|
|
755 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
756 void osal_msg_extract( osal_msg_q_t *q_ptr, void *msg_ptr, void *prev_ptr )
|
|
\ osal_msg_extract:
|
|
757 {
|
|
\ 000000 74F7 MOV A,#-0x9
|
|
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
|
|
\ 000005 ; Saved register size: 9
|
|
\ 000005 ; Auto size: 0
|
|
758 halIntState_t intState;
|
|
759
|
|
760 // Hold off interrupts
|
|
761 HAL_ENTER_CRITICAL_SECTION(intState);
|
|
\ 000005 A2AF MOV C,0xa8.7
|
|
\ 000007 E4 CLR A
|
|
\ 000008 33 RLC A
|
|
\ 000009 FE MOV R6,A
|
|
\ 00000A C2AF CLR 0xa8.7
|
|
762
|
|
763 if ( msg_ptr == *q_ptr )
|
|
\ 00000C 8A82 MOV DPL,R2
|
|
\ 00000E 8B83 MOV DPH,R3
|
|
\ 000010 12.... LCALL ??Subroutine34_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_46:
|
|
\ 000013 EC MOV A,R4
|
|
\ 000014 68 XRL A,R0
|
|
\ 000015 7002 JNZ ??osal_msg_extract_0
|
|
\ 000017 ED MOV A,R5
|
|
\ 000018 69 XRL A,R1
|
|
\ ??osal_msg_extract_0:
|
|
\ 000019 700C JNZ ??osal_msg_extract_1
|
|
764 {
|
|
765 // remove from first
|
|
766 *q_ptr = OSAL_MSG_NEXT( msg_ptr );
|
|
\ 00001B 12.... LCALL ?Subroutine23 & 0xFFFF
|
|
767 }
|
|
\ ??CrossCallReturnLabel_31:
|
|
\ 00001E 12.... LCALL ??Subroutine33_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_47:
|
|
\ 000021 8A82 MOV DPL,R2
|
|
\ 000023 8B83 MOV DPH,R3
|
|
\ 000025 8017 SJMP ??CrossCallReturnLabel_66
|
|
768 else
|
|
769 {
|
|
770 // remove from middle
|
|
771 OSAL_MSG_NEXT( prev_ptr ) = OSAL_MSG_NEXT( msg_ptr );
|
|
\ ??osal_msg_extract_1:
|
|
\ 000027 12.... LCALL ?Subroutine23 & 0xFFFF
|
|
772 }
|
|
\ ??CrossCallReturnLabel_32:
|
|
\ 00002A 12.... LCALL ??Subroutine33_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_48:
|
|
\ 00002D 7409 MOV A,#0x9
|
|
\ 00002F 12.... LCALL ?XSTACK_DISP0_8
|
|
\ 000032 E0 MOVX A,@DPTR
|
|
\ 000033 FA MOV R2,A
|
|
\ 000034 A3 INC DPTR
|
|
\ 000035 E0 MOVX A,@DPTR
|
|
\ 000036 CA XCH A,R2
|
|
\ 000037 12.... LCALL ??Subroutine38_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_75:
|
|
\ 00003A EA MOV A,R2
|
|
\ 00003B 12.... LCALL ??Subroutine37_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_66:
|
|
\ 00003E E8 MOV A,R0
|
|
\ 00003F F0 MOVX @DPTR,A
|
|
\ 000040 A3 INC DPTR
|
|
\ 000041 E9 MOV A,R1
|
|
\ 000042 F0 MOVX @DPTR,A
|
|
773 OSAL_MSG_NEXT( msg_ptr ) = NULL;
|
|
\ 000043 12.... LCALL ?Subroutine23 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_33:
|
|
\ 000046 12.... LCALL ??Subroutine37_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_67:
|
|
\ 000049 E4 CLR A
|
|
\ 00004A F0 MOVX @DPTR,A
|
|
\ 00004B A3 INC DPTR
|
|
\ 00004C F0 MOVX @DPTR,A
|
|
774 OSAL_MSG_ID( msg_ptr ) = TASK_NO_TASK;
|
|
\ 00004D EC MOV A,R4
|
|
\ 00004E 24FF ADD A,#-0x1
|
|
\ 000050 F582 MOV DPL,A
|
|
\ 000052 ED MOV A,R5
|
|
\ 000053 12.... LCALL ??Subroutine37_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_68:
|
|
\ 000056 74FF MOV A,#-0x1
|
|
\ 000058 02.... LJMP ?Subroutine1 & 0xFFFF
|
|
\ 00005B REQUIRE _A_IEN0
|
|
775
|
|
776 // Re-enable interrupts
|
|
777 HAL_EXIT_CRITICAL_SECTION(intState);
|
|
778 }
|
|
779
|
|
780 /*********************************************************************
|
|
781 * @fn osal_msg_enqueue_max
|
|
782 *
|
|
783 * @brief
|
|
784 *
|
|
785 * This function enqueues an OSAL message into an OSAL queue if
|
|
786 * the length of the queue is less than max.
|
|
787 *
|
|
788 * @param osal_msg_q_t *q_ptr - OSAL queue
|
|
789 * @param void *msg_ptr - OSAL message
|
|
790 * @param uint8 max - maximum length of queue
|
|
791 *
|
|
792 * @return TRUE if message was enqueued, FALSE otherwise
|
|
793 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
794 uint8 osal_msg_enqueue_max( osal_msg_q_t *q_ptr, void *msg_ptr, uint8 max )
|
|
\ osal_msg_enqueue_max:
|
|
795 {
|
|
\ 000000 REQUIRE ?V0
|
|
\ 000000 REQUIRE ?V1
|
|
\ 000000 74F6 MOV A,#-0xa
|
|
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
|
|
\ 000005 ; Saved register size: 10
|
|
\ 000005 ; Auto size: 0
|
|
\ 000005 8A.. MOV ?V0,R2
|
|
\ 000007 8B.. MOV ?V1,R3
|
|
\ 000009 E9 MOV A,R1
|
|
\ 00000A FE MOV R6,A
|
|
796 void *list;
|
|
797 uint8 ret = FALSE;
|
|
\ 00000B 7A00 MOV R2,#0x0
|
|
798 halIntState_t intState;
|
|
799
|
|
800 // Hold off interrupts
|
|
801 HAL_ENTER_CRITICAL_SECTION(intState);
|
|
\ 00000D A2AF MOV C,0xa8.7
|
|
\ 00000F E4 CLR A
|
|
\ 000010 33 RLC A
|
|
\ 000011 FB MOV R3,A
|
|
\ 000012 C2AF CLR 0xa8.7
|
|
802
|
|
803 // If first message in queue
|
|
804 if ( *q_ptr == NULL )
|
|
\ 000014 85..82 MOV DPL,?V0
|
|
\ 000017 85..83 MOV DPH,?V1
|
|
\ 00001A 12.... LCALL ??Subroutine39_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_83:
|
|
\ 00001D 700E JNZ ??CrossCallReturnLabel_50
|
|
805 {
|
|
806 *q_ptr = msg_ptr;
|
|
\ 00001F 85..82 MOV DPL,?V0
|
|
\ 000022 85..83 MOV DPH,?V1
|
|
\ 000025 801D SJMP ??CrossCallReturnLabel_73
|
|
807 ret = TRUE;
|
|
808 }
|
|
809 else
|
|
810 {
|
|
811 // Find end of queue or max
|
|
812 list = *q_ptr;
|
|
813 max--;
|
|
814 while ( (OSAL_MSG_NEXT( list ) != NULL) && (max > 0) )
|
|
\ ??osal_msg_enqueue_max_0:
|
|
\ 000027 EE MOV A,R6
|
|
\ 000028 6021 JZ ??osal_msg_enqueue_max_1
|
|
815 {
|
|
816 list = OSAL_MSG_NEXT( list );
|
|
\ 00002A 12.... LCALL ?Subroutine11 & 0xFFFF
|
|
817 max--;
|
|
\ ??CrossCallReturnLabel_50:
|
|
\ 00002D 1E DEC R6
|
|
818 }
|
|
\ 00002E 12.... LCALL ?Subroutine22 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_72:
|
|
\ 000031 E0 MOVX A,@DPTR
|
|
\ 000032 F5.. MOV ?V0,A
|
|
\ 000034 A3 INC DPTR
|
|
\ 000035 E0 MOVX A,@DPTR
|
|
\ 000036 F5.. MOV ?V1,A
|
|
\ 000038 E5.. MOV A,?V0
|
|
\ 00003A 45.. ORL A,?V1
|
|
\ 00003C 70E9 JNZ ??osal_msg_enqueue_max_0
|
|
819
|
|
820 // Add message to end of queue if max not reached
|
|
821 if ( max != 0 )
|
|
\ 00003E EE MOV A,R6
|
|
\ 00003F 600A JZ ??osal_msg_enqueue_max_1
|
|
822 {
|
|
823 OSAL_MSG_NEXT( list ) = msg_ptr;
|
|
\ 000041 12.... LCALL ?Subroutine22 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_73:
|
|
\ 000044 EC MOV A,R4
|
|
\ 000045 F0 MOVX @DPTR,A
|
|
\ 000046 A3 INC DPTR
|
|
\ 000047 ED MOV A,R5
|
|
\ 000048 F0 MOVX @DPTR,A
|
|
824 ret = TRUE;
|
|
\ 000049 7A01 MOV R2,#0x1
|
|
825 }
|
|
826 }
|
|
827
|
|
828 // Re-enable interrupts
|
|
829 HAL_EXIT_CRITICAL_SECTION(intState);
|
|
\ ??osal_msg_enqueue_max_1:
|
|
\ 00004B EB MOV A,R3
|
|
\ 00004C A2E0 MOV C,0xE0 /* A */.0
|
|
\ 00004E 92AF MOV 0xa8.7,C
|
|
830
|
|
831 return ret;
|
|
\ 000050 EA MOV A,R2
|
|
\ 000051 F9 MOV R1,A
|
|
\ 000052 02.... LJMP ?Subroutine3 & 0xFFFF
|
|
\ 000055 REQUIRE _A_IEN0
|
|
832 }
|
|
833
|
|
834 /*********************************************************************
|
|
835 * @fn osal_set_event
|
|
836 *
|
|
837 * @brief
|
|
838 *
|
|
839 * This function is called to set the event flags for a task. The
|
|
840 * event passed in is OR'd into the task's event variable.
|
|
841 *
|
|
842 * @param uint8 task_id - receiving tasks ID
|
|
843 * @param uint8 event_flag - what event to set
|
|
844 *
|
|
845 * @return SUCCESS, INVALID_TASK
|
|
846 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
847 uint8 osal_set_event( uint8 task_id, uint16 event_flag )
|
|
\ osal_set_event:
|
|
848 {
|
|
\ 000000 74F7 MOV A,#-0x9
|
|
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
|
|
\ 000005 ; Saved register size: 9
|
|
\ 000005 ; Auto size: 0
|
|
849 if ( task_id < tasksCnt )
|
|
\ 000005 90.... MOV DPTR,#tasksCnt
|
|
\ 000008 E0 MOVX A,@DPTR
|
|
\ 000009 F8 MOV R0,A
|
|
\ 00000A E9 MOV A,R1
|
|
\ 00000B C3 CLR C
|
|
\ 00000C 98 SUBB A,R0
|
|
\ 00000D 5027 JNC ??osal_set_event_0
|
|
850 {
|
|
851 halIntState_t intState;
|
|
852 HAL_ENTER_CRITICAL_SECTION(intState); // Hold off interrupts
|
|
\ 00000F ACA8 MOV R4,0xa8+0x0
|
|
\ 000011 C2AF CLR 0xa8.7
|
|
853 tasksEvents[task_id] |= event_flag; // Stuff the event bit(s)
|
|
\ 000013 E9 MOV A,R1
|
|
\ 000014 29 ADD A,R1
|
|
\ 000015 F8 MOV R0,A
|
|
\ 000016 E4 CLR A
|
|
\ 000017 33 RLC A
|
|
\ 000018 F9 MOV R1,A
|
|
\ 000019 90.... MOV DPTR,#tasksEvents
|
|
\ 00001C E0 MOVX A,@DPTR
|
|
\ 00001D 28 ADD A,R0
|
|
\ 00001E FD MOV R5,A
|
|
\ 00001F A3 INC DPTR
|
|
\ 000020 E0 MOVX A,@DPTR
|
|
\ 000021 39 ADDC A,R1
|
|
\ 000022 8D82 MOV DPL,R5
|
|
\ 000024 F583 MOV DPH,A
|
|
\ 000026 E0 MOVX A,@DPTR
|
|
\ 000027 4A ORL A,R2
|
|
\ 000028 F0 MOVX @DPTR,A
|
|
\ 000029 A3 INC DPTR
|
|
\ 00002A E0 MOVX A,@DPTR
|
|
\ 00002B 4B ORL A,R3
|
|
\ 00002C F0 MOVX @DPTR,A
|
|
854 HAL_EXIT_CRITICAL_SECTION(intState); // Release interrupts
|
|
\ 00002D EC MOV A,R4
|
|
\ 00002E A2E7 MOV C,0xE0 /* A */.7
|
|
\ 000030 92AF MOV 0xa8.7,C
|
|
855 return ( SUCCESS );
|
|
\ 000032 7900 MOV R1,#0x0
|
|
\ 000034 8002 SJMP ??osal_set_event_1
|
|
856 }
|
|
857 else
|
|
858 {
|
|
859 return ( INVALID_TASK );
|
|
\ ??osal_set_event_0:
|
|
\ 000036 7903 MOV R1,#0x3
|
|
860 }
|
|
\ ??osal_set_event_1:
|
|
\ 000038 02.... LJMP ??Subroutine31_0 & 0xFFFF
|
|
\ 00003B REQUIRE _A_IEN0
|
|
861 }
|
|
862
|
|
863 /*********************************************************************
|
|
864 * @fn osal_clear_event
|
|
865 *
|
|
866 * @brief
|
|
867 *
|
|
868 * This function is called to clear the event flags for a task. The
|
|
869 * event passed in is masked out of the task's event variable.
|
|
870 *
|
|
871 * @param uint8 task_id - receiving tasks ID
|
|
872 * @param uint8 event_flag - what event to clear
|
|
873 *
|
|
874 * @return SUCCESS, INVALID_TASK
|
|
875 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
876 uint8 osal_clear_event( uint8 task_id, uint16 event_flag )
|
|
\ osal_clear_event:
|
|
877 {
|
|
\ 000000 74F7 MOV A,#-0x9
|
|
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
|
|
\ 000005 ; Saved register size: 9
|
|
\ 000005 ; Auto size: 0
|
|
878 if ( task_id < tasksCnt )
|
|
\ 000005 90.... MOV DPTR,#tasksCnt
|
|
\ 000008 E0 MOVX A,@DPTR
|
|
\ 000009 F8 MOV R0,A
|
|
\ 00000A E9 MOV A,R1
|
|
\ 00000B C3 CLR C
|
|
\ 00000C 98 SUBB A,R0
|
|
\ 00000D 501F JNC ??osal_clear_event_0
|
|
879 {
|
|
880 halIntState_t intState;
|
|
881 HAL_ENTER_CRITICAL_SECTION(intState); // Hold off interrupts
|
|
\ 00000F AEA8 MOV R6,0xa8+0x0
|
|
\ 000011 C2AF CLR 0xa8.7
|
|
882 tasksEvents[task_id] &= ~(event_flag); // Clear the event bit(s)
|
|
\ 000013 EA MOV A,R2
|
|
\ 000014 F4 CPL A
|
|
\ 000015 FC MOV R4,A
|
|
\ 000016 EB MOV A,R3
|
|
\ 000017 F4 CPL A
|
|
\ 000018 FD MOV R5,A
|
|
\ 000019 E9 MOV A,R1
|
|
\ 00001A 29 ADD A,R1
|
|
\ 00001B 12.... LCALL ?Subroutine13 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_15:
|
|
\ 00001E E0 MOVX A,@DPTR
|
|
\ 00001F 5C ANL A,R4
|
|
\ 000020 F0 MOVX @DPTR,A
|
|
\ 000021 A3 INC DPTR
|
|
\ 000022 E0 MOVX A,@DPTR
|
|
\ 000023 5D ANL A,R5
|
|
\ 000024 F0 MOVX @DPTR,A
|
|
883 HAL_EXIT_CRITICAL_SECTION(intState); // Release interrupts
|
|
\ 000025 EE MOV A,R6
|
|
\ 000026 A2E7 MOV C,0xE0 /* A */.7
|
|
\ 000028 92AF MOV 0xa8.7,C
|
|
884 return ( SUCCESS );
|
|
\ 00002A 7900 MOV R1,#0x0
|
|
\ 00002C 8002 SJMP ??osal_clear_event_1
|
|
885 }
|
|
886 else
|
|
887 {
|
|
888 return ( INVALID_TASK );
|
|
\ ??osal_clear_event_0:
|
|
\ 00002E 7903 MOV R1,#0x3
|
|
889 }
|
|
\ ??osal_clear_event_1:
|
|
\ 000030 02.... LJMP ??Subroutine31_0 & 0xFFFF
|
|
\ 000033 REQUIRE _A_IEN0
|
|
890 }
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine13:
|
|
\ 000000 F8 MOV R0,A
|
|
\ 000001 E4 CLR A
|
|
\ 000002 33 RLC A
|
|
\ 000003 F9 MOV R1,A
|
|
\ 000004 90.... MOV DPTR,#tasksEvents
|
|
\ 000007 E0 MOVX A,@DPTR
|
|
\ 000008 28 ADD A,R0
|
|
\ 000009 FA MOV R2,A
|
|
\ 00000A A3 INC DPTR
|
|
\ 00000B E0 MOVX A,@DPTR
|
|
\ 00000C 39 ADDC A,R1
|
|
\ 00000D 8A82 MOV DPL,R2
|
|
\ 00000F F583 MOV DPH,A
|
|
\ 000011 22 RET
|
|
891
|
|
892 /*********************************************************************
|
|
893 * @fn osal_isr_register
|
|
894 *
|
|
895 * @brief
|
|
896 *
|
|
897 * This function is called to register a service routine with an
|
|
898 * interrupt. When the interrupt occurs, this service routine is called.
|
|
899 *
|
|
900 * @param uint8 interrupt_id - Interrupt number
|
|
901 * @param void (*isr_ptr)( uint8* ) - function pointer to ISR
|
|
902 *
|
|
903 * @return SUCCESS, INVALID_INTERRUPT_ID,
|
|
904 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
905 uint8 osal_isr_register( uint8 interrupt_id, void (*isr_ptr)( uint8* ) )
|
|
\ osal_isr_register:
|
|
906 {
|
|
\ 000000 ; Saved register size: 0
|
|
\ 000000 ; Auto size: 0
|
|
907 // Remove these statements when functionality is complete
|
|
908 (void)interrupt_id;
|
|
909 (void)isr_ptr;
|
|
910 return ( SUCCESS );
|
|
\ 000000 7900 MOV R1,#0x0
|
|
\ 000002 02.... LJMP ?BRET
|
|
911 }
|
|
912
|
|
913 /*********************************************************************
|
|
914 * @fn osal_int_enable
|
|
915 *
|
|
916 * @brief
|
|
917 *
|
|
918 * This function is called to enable an interrupt. Once enabled,
|
|
919 * occurrence of the interrupt causes the service routine associated
|
|
920 * with that interrupt to be called.
|
|
921 *
|
|
922 * If INTS_ALL is the interrupt_id, interrupts (in general) are enabled.
|
|
923 * If a single interrupt is passed in, then interrupts still have
|
|
924 * to be enabled with another call to INTS_ALL.
|
|
925 *
|
|
926 * @param uint8 interrupt_id - Interrupt number
|
|
927 *
|
|
928 * @return SUCCESS or INVALID_INTERRUPT_ID
|
|
929 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
930 uint8 osal_int_enable( uint8 interrupt_id )
|
|
\ osal_int_enable:
|
|
931 {
|
|
\ 000000 ; Saved register size: 0
|
|
\ 000000 ; Auto size: 0
|
|
\ 000000 E9 MOV A,R1
|
|
\ 000001 F8 MOV R0,A
|
|
932
|
|
933 if ( interrupt_id == INTS_ALL )
|
|
\ 000002 74FF MOV A,#-0x1
|
|
\ 000004 68 XRL A,R0
|
|
\ 000005 7006 JNZ ??osal_int_enable_0
|
|
934 {
|
|
935 HAL_ENABLE_INTERRUPTS();
|
|
\ 000007 D2AF SETB 0xa8.7
|
|
936 return ( SUCCESS );
|
|
\ 000009 7900 MOV R1,#0x0
|
|
\ 00000B 8002 SJMP ??osal_int_enable_1
|
|
937 }
|
|
938 else
|
|
939 {
|
|
940 return ( INVALID_INTERRUPT_ID );
|
|
\ ??osal_int_enable_0:
|
|
\ 00000D 7907 MOV R1,#0x7
|
|
\ ??osal_int_enable_1:
|
|
\ 00000F 02.... LJMP ?BRET
|
|
\ 000012 REQUIRE _A_IEN0
|
|
941 }
|
|
942 }
|
|
943
|
|
944 /*********************************************************************
|
|
945 * @fn osal_int_disable
|
|
946 *
|
|
947 * @brief
|
|
948 *
|
|
949 * This function is called to disable an interrupt. When a disabled
|
|
950 * interrupt occurs, the service routine associated with that
|
|
951 * interrupt is not called.
|
|
952 *
|
|
953 * If INTS_ALL is the interrupt_id, interrupts (in general) are disabled.
|
|
954 * If a single interrupt is passed in, then just that interrupt is disabled.
|
|
955 *
|
|
956 * @param uint8 interrupt_id - Interrupt number
|
|
957 *
|
|
958 * @return SUCCESS or INVALID_INTERRUPT_ID
|
|
959 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
960 uint8 osal_int_disable( uint8 interrupt_id )
|
|
\ osal_int_disable:
|
|
961 {
|
|
\ 000000 ; Saved register size: 0
|
|
\ 000000 ; Auto size: 0
|
|
\ 000000 E9 MOV A,R1
|
|
\ 000001 F8 MOV R0,A
|
|
962
|
|
963 if ( interrupt_id == INTS_ALL )
|
|
\ 000002 74FF MOV A,#-0x1
|
|
\ 000004 68 XRL A,R0
|
|
\ 000005 7006 JNZ ??osal_int_disable_0
|
|
964 {
|
|
965 HAL_DISABLE_INTERRUPTS();
|
|
\ 000007 C2AF CLR 0xa8.7
|
|
966 return ( SUCCESS );
|
|
\ 000009 7900 MOV R1,#0x0
|
|
\ 00000B 8002 SJMP ??osal_int_disable_1
|
|
967 }
|
|
968 else
|
|
969 {
|
|
970 return ( INVALID_INTERRUPT_ID );
|
|
\ ??osal_int_disable_0:
|
|
\ 00000D 7907 MOV R1,#0x7
|
|
\ ??osal_int_disable_1:
|
|
\ 00000F 02.... LJMP ?BRET
|
|
\ 000012 REQUIRE _A_IEN0
|
|
971 }
|
|
972 }
|
|
973
|
|
974 /*********************************************************************
|
|
975 * @fn osal_init_system
|
|
976 *
|
|
977 * @brief
|
|
978 *
|
|
979 * This function initializes the "task" system by creating the
|
|
980 * tasks defined in the task table (OSAL_Tasks.h).
|
|
981 *
|
|
982 * @param void
|
|
983 *
|
|
984 * @return SUCCESS
|
|
985 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
986 uint8 osal_init_system( void )
|
|
\ osal_init_system:
|
|
987 {
|
|
\ 000000 74F7 MOV A,#-0x9
|
|
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
|
|
\ 000005 ; Saved register size: 9
|
|
\ 000005 ; Auto size: 0
|
|
988 // Initialize the Memory Allocation System
|
|
989 osal_mem_init();
|
|
\ 000005 ; Setup parameters for call to function osal_mem_init
|
|
\ 000005 12.... LCALL `??osal_mem_init::?relay`; Banked call to: osal_mem_init
|
|
990
|
|
991 // Initialize the message queue
|
|
992 osal_qHead = NULL;
|
|
\ 000008 90.... MOV DPTR,#osal_qHead
|
|
\ 00000B E4 CLR A
|
|
\ 00000C F0 MOVX @DPTR,A
|
|
\ 00000D A3 INC DPTR
|
|
\ 00000E F0 MOVX @DPTR,A
|
|
993
|
|
994 // Initialize the timers
|
|
995 osalTimerInit();
|
|
\ 00000F ; Setup parameters for call to function osalTimerInit
|
|
\ 00000F 12.... LCALL `??osalTimerInit::?relay`; Banked call to: osalTimerInit
|
|
996
|
|
997 // Initialize the Power Management System
|
|
998 osal_pwrmgr_init();
|
|
\ 000012 ; Setup parameters for call to function osal_pwrmgr_init
|
|
\ 000012 12.... LCALL `??osal_pwrmgr_init::?relay`; Banked call to: osal_pwrmgr_init
|
|
999
|
|
1000 // Initialize the system tasks.
|
|
1001 tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);
|
|
\ 000015 90.... MOV DPTR,#tasksCnt
|
|
\ 000018 E0 MOVX A,@DPTR
|
|
\ 000019 25E0 ADD A,0xE0 /* A */
|
|
\ 00001B FE MOV R6,A
|
|
\ 00001C E4 CLR A
|
|
\ 00001D 33 RLC A
|
|
\ 00001E FF MOV R7,A
|
|
\ 00001F ; Setup parameters for call to function osal_mem_alloc
|
|
\ 00001F EE MOV A,R6
|
|
\ 000020 FA MOV R2,A
|
|
\ 000021 EF MOV A,R7
|
|
\ 000022 FB MOV R3,A
|
|
\ 000023 12.... LCALL `??osal_mem_alloc::?relay`; Banked call to: osal_mem_alloc
|
|
\ 000026 90.... MOV DPTR,#tasksEvents
|
|
\ 000029 EA MOV A,R2
|
|
\ 00002A F0 MOVX @DPTR,A
|
|
\ 00002B A3 INC DPTR
|
|
\ 00002C EB MOV A,R3
|
|
\ 00002D F0 MOVX @DPTR,A
|
|
1002 osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt));
|
|
\ 00002E ; Setup parameters for call to function osal_memset
|
|
\ 00002E EE MOV A,R6
|
|
\ 00002F FC MOV R4,A
|
|
\ 000030 EF MOV A,R7
|
|
\ 000031 FD MOV R5,A
|
|
\ 000032 7900 MOV R1,#0x0
|
|
\ 000034 12.... LCALL `??osal_memset::?relay`; Banked call to: osal_memset
|
|
1003 osalInitTasks();
|
|
\ 000037 ; Setup parameters for call to function osalInitTasks
|
|
\ 000037 12.... LCALL `??osalInitTasks::?relay`; Banked call to: osalInitTasks
|
|
1004
|
|
1005 // Setup efficient search for the first free block of heap.
|
|
1006 osal_mem_kick();
|
|
\ 00003A ; Setup parameters for call to function osal_mem_kick
|
|
\ 00003A 12.... LCALL `??osal_mem_kick::?relay`; Banked call to: osal_mem_kick
|
|
1007
|
|
1008 return ( SUCCESS );
|
|
\ 00003D 7900 MOV R1,#0x0
|
|
\ 00003F 02.... LJMP ??Subroutine31_0 & 0xFFFF
|
|
1009 }
|
|
1010
|
|
1011 /*********************************************************************
|
|
1012 * @fn osal_start_system
|
|
1013 *
|
|
1014 * @brief
|
|
1015 *
|
|
1016 * This function is the main loop function of the task system (if
|
|
1017 * ZBIT and UBIT are not defined). This Function doesn't return.
|
|
1018 *
|
|
1019 * @param void
|
|
1020 *
|
|
1021 * @return none
|
|
1022 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
1023 void osal_start_system( void )
|
|
\ osal_start_system:
|
|
1024 {
|
|
\ 000000 C082 PUSH DPL
|
|
\ 000002 C083 PUSH DPH
|
|
\ 000004 ; Saved register size: 2
|
|
\ 000004 ; Auto size: 0
|
|
1025 #if !defined ( ZBIT ) && !defined ( UBIT )
|
|
1026 for(;;) // Forever Loop
|
|
1027 #endif
|
|
1028 {
|
|
1029 osal_run_system();
|
|
\ ??osal_start_system_0:
|
|
\ 000004 ; Setup parameters for call to function osal_run_system
|
|
\ 000004 12.... LCALL `??osal_run_system::?relay`; Banked call to: osal_run_system
|
|
\ 000007 80FB SJMP ??osal_start_system_0
|
|
1030 }
|
|
1031 }
|
|
1032
|
|
1033 /*********************************************************************
|
|
1034 * @fn osal_run_system
|
|
1035 *
|
|
1036 * @brief
|
|
1037 *
|
|
1038 * This function will make one pass through the OSAL taskEvents table
|
|
1039 * and call the task_event_processor() function for the first task that
|
|
1040 * is found with at least one event pending. If there are no pending
|
|
1041 * events (all tasks), this function puts the processor into Sleep.
|
|
1042 *
|
|
1043 * @param void
|
|
1044 *
|
|
1045 * @return none
|
|
1046 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
1047 void osal_run_system( void )
|
|
\ osal_run_system:
|
|
1048 {
|
|
\ 000000 REQUIRE ?V0
|
|
\ 000000 REQUIRE ?V1
|
|
\ 000000 74F6 MOV A,#-0xa
|
|
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
|
|
\ 000005 ; Saved register size: 10
|
|
\ 000005 ; Auto size: 0
|
|
1049 uint8 idx = 0;
|
|
\ 000005 75..00 MOV ?V0,#0x0
|
|
1050
|
|
1051 osalTimeUpdate();
|
|
\ 000008 ; Setup parameters for call to function osalTimeUpdate
|
|
\ 000008 12.... LCALL `??osalTimeUpdate::?relay`; Banked call to: osalTimeUpdate
|
|
1052 Hal_ProcessPoll();
|
|
\ 00000B ; Setup parameters for call to function Hal_ProcessPoll
|
|
\ 00000B 12.... LCALL `??Hal_ProcessPoll::?relay`; Banked call to: Hal_ProcessPoll
|
|
1053
|
|
1054 do {
|
|
1055 if (tasksEvents[idx]) // Task is highest priority that is ready.
|
|
\ ??osal_run_system_0:
|
|
\ 00000E A8.. MOV R0,?V0
|
|
\ 000010 E8 MOV A,R0
|
|
\ 000011 28 ADD A,R0
|
|
\ 000012 12.... LCALL ?Subroutine13 & 0xFFFF
|
|
1056 {
|
|
1057 break;
|
|
1058 }
|
|
1059 } while (++idx < tasksCnt);
|
|
\ ??CrossCallReturnLabel_16:
|
|
\ 000015 12.... LCALL ??Subroutine39_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_84:
|
|
\ 000018 700D JNZ ??osal_run_system_1
|
|
\ 00001A 05.. INC ?V0
|
|
\ 00001C 90.... MOV DPTR,#tasksCnt
|
|
\ 00001F E0 MOVX A,@DPTR
|
|
\ 000020 F8 MOV R0,A
|
|
\ 000021 E5.. MOV A,?V0
|
|
\ 000023 C3 CLR C
|
|
\ 000024 98 SUBB A,R0
|
|
\ 000025 40E7 JC ??osal_run_system_0
|
|
1060
|
|
1061 if (idx < tasksCnt)
|
|
\ ??osal_run_system_1:
|
|
\ 000027 90.... MOV DPTR,#tasksCnt
|
|
\ 00002A E0 MOVX A,@DPTR
|
|
\ 00002B F8 MOV R0,A
|
|
\ 00002C E5.. MOV A,?V0
|
|
\ 00002E C3 CLR C
|
|
\ 00002F 98 SUBB A,R0
|
|
\ 000030 5062 JNC ??osal_run_system_2
|
|
1062 {
|
|
1063 uint16 events;
|
|
1064 halIntState_t intState;
|
|
1065
|
|
1066 HAL_ENTER_CRITICAL_SECTION(intState);
|
|
\ 000032 ACA8 MOV R4,0xa8+0x0
|
|
\ 000034 C2AF CLR 0xa8.7
|
|
1067 events = tasksEvents[idx];
|
|
\ 000036 AE.. MOV R6,?V0
|
|
\ 000038 EE MOV A,R6
|
|
\ 000039 2E ADD A,R6
|
|
\ 00003A FE MOV R6,A
|
|
\ 00003B E4 CLR A
|
|
\ 00003C 33 RLC A
|
|
\ 00003D FF MOV R7,A
|
|
\ 00003E 90.... MOV DPTR,#tasksEvents
|
|
\ 000041 E0 MOVX A,@DPTR
|
|
\ 000042 2E ADD A,R6
|
|
\ 000043 F8 MOV R0,A
|
|
\ 000044 A3 INC DPTR
|
|
\ 000045 E0 MOVX A,@DPTR
|
|
\ 000046 3F ADDC A,R7
|
|
\ 000047 F9 MOV R1,A
|
|
\ 000048 8882 MOV DPL,R0
|
|
\ 00004A 12.... LCALL ?Subroutine15 & 0xFFFF
|
|
1068 tasksEvents[idx] = 0; // Clear the Events for this task.
|
|
\ ??CrossCallReturnLabel_57:
|
|
\ 00004D 8882 MOV DPL,R0
|
|
\ 00004F 8983 MOV DPH,R1
|
|
\ 000051 E4 CLR A
|
|
\ 000052 F0 MOVX @DPTR,A
|
|
\ 000053 A3 INC DPTR
|
|
\ 000054 F0 MOVX @DPTR,A
|
|
1069 HAL_EXIT_CRITICAL_SECTION(intState);
|
|
\ 000055 EC MOV A,R4
|
|
\ 000056 A2E7 MOV C,0xE0 /* A */.7
|
|
\ 000058 92AF MOV 0xa8.7,C
|
|
1070
|
|
1071 activeTaskID = idx;
|
|
\ 00005A E5.. MOV A,?V0
|
|
\ 00005C 90.... MOV DPTR,#activeTaskID
|
|
\ 00005F F0 MOVX @DPTR,A
|
|
1072 events = (tasksArr[idx])( idx, events );
|
|
\ 000060 ; Setup parameters for indirect call
|
|
\ 000060 F9 MOV R1,A
|
|
\ 000061 74.. MOV A,#tasksArr & 0xff
|
|
\ 000063 2E ADD A,R6
|
|
\ 000064 F582 MOV DPL,A
|
|
\ 000066 74.. MOV A,#(tasksArr >> 8) & 0xff
|
|
\ 000068 3F ADDC A,R7
|
|
\ 000069 F583 MOV DPH,A
|
|
\ 00006B 12.... LCALL ?Subroutine16 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_20:
|
|
\ 00006E 12.... LCALL ?CALL_IND
|
|
1073 activeTaskID = TASK_NO_TASK;
|
|
\ 000071 90.... MOV DPTR,#activeTaskID
|
|
\ 000074 74FF MOV A,#-0x1
|
|
\ 000076 F0 MOVX @DPTR,A
|
|
1074
|
|
1075 HAL_ENTER_CRITICAL_SECTION(intState);
|
|
\ 000077 A8A8 MOV R0,0xa8+0x0
|
|
\ 000079 C2AF CLR 0xa8.7
|
|
1076 tasksEvents[idx] |= events; // Add back unprocessed events to the current task.
|
|
\ 00007B 90.... MOV DPTR,#tasksEvents
|
|
\ 00007E E0 MOVX A,@DPTR
|
|
\ 00007F 2E ADD A,R6
|
|
\ 000080 F9 MOV R1,A
|
|
\ 000081 A3 INC DPTR
|
|
\ 000082 E0 MOVX A,@DPTR
|
|
\ 000083 3F ADDC A,R7
|
|
\ 000084 8982 MOV DPL,R1
|
|
\ 000086 F583 MOV DPH,A
|
|
\ 000088 E0 MOVX A,@DPTR
|
|
\ 000089 4A ORL A,R2
|
|
\ 00008A F0 MOVX @DPTR,A
|
|
\ 00008B A3 INC DPTR
|
|
\ 00008C E0 MOVX A,@DPTR
|
|
\ 00008D 4B ORL A,R3
|
|
\ 00008E F0 MOVX @DPTR,A
|
|
1077 HAL_EXIT_CRITICAL_SECTION(intState);
|
|
\ 00008F E8 MOV A,R0
|
|
\ 000090 A2E7 MOV C,0xE0 /* A */.7
|
|
\ 000092 92AF MOV 0xa8.7,C
|
|
1078 }
|
|
1079 #if defined( POWER_SAVING )
|
|
1080 else // Complete pass through all task events with no activity?
|
|
1081 {
|
|
1082 osal_pwrmgr_powerconserve(); // Put the processor/system into sleep
|
|
1083 }
|
|
1084 #endif
|
|
1085
|
|
1086 /* Yield in case cooperative scheduling is being used. */
|
|
1087 #if defined (configUSE_PREEMPTION) && (configUSE_PREEMPTION == 0)
|
|
1088 {
|
|
1089 osal_task_yield();
|
|
1090 }
|
|
1091 #endif
|
|
1092 }
|
|
\ ??osal_run_system_2:
|
|
\ 000094 02.... LJMP ?Subroutine3 & 0xFFFF
|
|
\ 000097 REQUIRE _A_IEN0
|
|
1093
|
|
1094 /*********************************************************************
|
|
1095 * @fn osal_buffer_uint32
|
|
1096 *
|
|
1097 * @brief
|
|
1098 *
|
|
1099 * Buffer an uint32 value - LSB first.
|
|
1100 *
|
|
1101 * @param buf - buffer
|
|
1102 * @param val - uint32 value
|
|
1103 *
|
|
1104 * @return pointer to end of destination buffer
|
|
1105 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
1106 uint8* osal_buffer_uint32( uint8 *buf, uint32 val )
|
|
\ osal_buffer_uint32:
|
|
1107 {
|
|
\ 000000 REQUIRE ?V0
|
|
\ 000000 REQUIRE ?V1
|
|
\ 000000 REQUIRE ?V2
|
|
\ 000000 REQUIRE ?V3
|
|
\ 000000 REQUIRE ?V4
|
|
\ 000000 REQUIRE ?V5
|
|
\ 000000 REQUIRE ?V6
|
|
\ 000000 REQUIRE ?V7
|
|
\ 000000 74F0 MOV A,#-0x10
|
|
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
|
|
\ 000005 ; Saved register size: 16
|
|
\ 000005 ; Auto size: 0
|
|
\ 000005 7410 MOV A,#0x10
|
|
\ 000007 12.... LCALL ?XSTACK_DISP0_8
|
|
\ 00000A 78.. MOV R0,#?V4
|
|
\ 00000C 12.... LCALL ?L_MOV_X
|
|
1108 *buf++ = BREAK_UINT32( val, 0 );
|
|
\ 00000F 12.... LCALL ?Subroutine21 & 0xFFFF
|
|
1109 *buf++ = BREAK_UINT32( val, 1 );
|
|
1110 *buf++ = BREAK_UINT32( val, 2 );
|
|
\ ??CrossCallReturnLabel_27:
|
|
\ 000012 85.... MOV ?V0,?V4
|
|
\ 000015 85.... MOV ?V2,?V6
|
|
\ 000018 85.... MOV ?V3,?V7
|
|
\ 00001B 7410 MOV A,#0x10
|
|
\ 00001D 78.. MOV R0,#?V0
|
|
\ 00001F 12.... LCALL ?UL_SHR
|
|
\ 000022 8A82 MOV DPL,R2
|
|
\ 000024 8B83 MOV DPH,R3
|
|
\ 000026 A3 INC DPTR
|
|
\ 000027 A3 INC DPTR
|
|
\ 000028 E5.. MOV A,?V0
|
|
\ 00002A F0 MOVX @DPTR,A
|
|
1111 *buf++ = BREAK_UINT32( val, 3 );
|
|
\ 00002B 7418 MOV A,#0x18
|
|
\ 00002D 78.. MOV R0,#?V4
|
|
\ 00002F 12.... LCALL ?UL_SHR
|
|
\ 000032 8A82 MOV DPL,R2
|
|
\ 000034 8B83 MOV DPH,R3
|
|
\ 000036 A3 INC DPTR
|
|
\ 000037 A3 INC DPTR
|
|
\ 000038 A3 INC DPTR
|
|
\ 000039 E5.. MOV A,?V4
|
|
\ 00003B F0 MOVX @DPTR,A
|
|
1112
|
|
1113 return buf;
|
|
\ 00003C EA MOV A,R2
|
|
\ 00003D 2404 ADD A,#0x4
|
|
\ 00003F FA MOV R2,A
|
|
\ 000040 5001 JNC ??osal_buffer_uint32_0
|
|
\ 000042 0B INC R3
|
|
\ ??osal_buffer_uint32_0:
|
|
\ 000043 REQUIRE ?Subroutine2
|
|
\ 000043 ; // Fall through to label ?Subroutine2
|
|
1114 }
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine21:
|
|
\ 000000 8A82 MOV DPL,R2
|
|
\ 000002 8B83 MOV DPH,R3
|
|
\ 000004 E5.. MOV A,?V4
|
|
\ 000006 F0 MOVX @DPTR,A
|
|
\ 000007 85.... MOV ?V1,?V5
|
|
\ 00000A E5.. MOV A,?V1
|
|
\ 00000C A3 INC DPTR
|
|
\ 00000D F0 MOVX @DPTR,A
|
|
\ 00000E 22 RET
|
|
1115
|
|
1116 /*********************************************************************
|
|
1117 * @fn osal_buffer_uint24
|
|
1118 *
|
|
1119 * @brief
|
|
1120 *
|
|
1121 * Buffer an uint24 value - LSB first. Note that type uint24 is
|
|
1122 * typedef to uint32 in comdef.h
|
|
1123 *
|
|
1124 * @param buf - buffer
|
|
1125 * @param val - uint24 value
|
|
1126 *
|
|
1127 * @return pointer to end of destination buffer
|
|
1128 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
1129 uint8* osal_buffer_uint24( uint8 *buf, uint24 val )
|
|
\ osal_buffer_uint24:
|
|
1130 {
|
|
\ 000000 REQUIRE ?V0
|
|
\ 000000 REQUIRE ?V1
|
|
\ 000000 REQUIRE ?V4
|
|
\ 000000 REQUIRE ?V5
|
|
\ 000000 REQUIRE ?V6
|
|
\ 000000 REQUIRE ?V7
|
|
\ 000000 74F0 MOV A,#-0x10
|
|
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
|
|
\ 000005 ; Saved register size: 16
|
|
\ 000005 ; Auto size: 0
|
|
\ 000005 7410 MOV A,#0x10
|
|
\ 000007 12.... LCALL ?XSTACK_DISP0_8
|
|
\ 00000A 78.. MOV R0,#?V4
|
|
\ 00000C 12.... LCALL ?L_MOV_X
|
|
1131 *buf++ = BREAK_UINT32( val, 0 );
|
|
\ 00000F 12.... LCALL ?Subroutine21 & 0xFFFF
|
|
1132 *buf++ = BREAK_UINT32( val, 1 );
|
|
1133 *buf++ = BREAK_UINT32( val, 2 );
|
|
\ ??CrossCallReturnLabel_28:
|
|
\ 000012 7410 MOV A,#0x10
|
|
\ 000014 78.. MOV R0,#?V4
|
|
\ 000016 12.... LCALL ?UL_SHR
|
|
\ 000019 8A82 MOV DPL,R2
|
|
\ 00001B 8B83 MOV DPH,R3
|
|
\ 00001D A3 INC DPTR
|
|
\ 00001E A3 INC DPTR
|
|
\ 00001F E5.. MOV A,?V4
|
|
\ 000021 F0 MOVX @DPTR,A
|
|
1134
|
|
1135 return buf;
|
|
\ 000022 EA MOV A,R2
|
|
\ 000023 2403 ADD A,#0x3
|
|
\ 000025 FA MOV R2,A
|
|
\ 000026 5001 JNC ??osal_buffer_uint24_0
|
|
\ 000028 0B INC R3
|
|
\ ??osal_buffer_uint24_0:
|
|
\ 000029 80.. SJMP ?Subroutine2
|
|
1136 }
|
|
1137
|
|
1138 /*********************************************************************
|
|
1139 * @fn osal_isbufset
|
|
1140 *
|
|
1141 * @brief
|
|
1142 *
|
|
1143 * Is all of the array elements set to a value?
|
|
1144 *
|
|
1145 * @param buf - buffer to check
|
|
1146 * @param val - value to check each array element for
|
|
1147 * @param len - length to check
|
|
1148 *
|
|
1149 * @return TRUE if all "val"
|
|
1150 * FALSE otherwise
|
|
1151 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
1152 uint8 osal_isbufset( uint8 *buf, uint8 val, uint8 len )
|
|
\ osal_isbufset:
|
|
1153 {
|
|
\ 000000 74F7 MOV A,#-0x9
|
|
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
|
|
\ 000005 ; Saved register size: 9
|
|
\ 000005 ; Auto size: 0
|
|
\ 000005 E9 MOV A,R1
|
|
\ 000006 FD MOV R5,A
|
|
1154 uint8 x;
|
|
1155
|
|
1156 if ( buf == NULL )
|
|
\ 000007 EA MOV A,R2
|
|
\ 000008 4B ORL A,R3
|
|
\ 000009 6018 JZ ??osal_isbufset_0
|
|
1157 {
|
|
1158 return ( FALSE );
|
|
1159 }
|
|
1160
|
|
1161 for ( x = 0; x < len; x++ )
|
|
\ 00000B 7800 MOV R0,#0x0
|
|
\ 00000D 8001 SJMP ??osal_isbufset_1
|
|
\ ??osal_isbufset_2:
|
|
\ 00000F 08 INC R0
|
|
\ ??osal_isbufset_1:
|
|
\ 000010 E8 MOV A,R0
|
|
\ 000011 C3 CLR C
|
|
\ 000012 9C SUBB A,R4
|
|
\ 000013 5012 JNC ??osal_isbufset_3
|
|
1162 {
|
|
1163 // Check for non-initialized value
|
|
1164 if ( buf[x] != val )
|
|
\ 000015 E8 MOV A,R0
|
|
\ 000016 FE MOV R6,A
|
|
\ 000017 EA MOV A,R2
|
|
\ 000018 2E ADD A,R6
|
|
\ 000019 F582 MOV DPL,A
|
|
\ 00001B E4 CLR A
|
|
\ 00001C 3B ADDC A,R3
|
|
\ 00001D F583 MOV DPH,A
|
|
\ 00001F E0 MOVX A,@DPTR
|
|
\ 000020 6D XRL A,R5
|
|
\ 000021 60EC JZ ??osal_isbufset_2
|
|
1165 {
|
|
1166 return ( FALSE );
|
|
\ ??osal_isbufset_0:
|
|
\ 000023 7900 MOV R1,#0x0
|
|
\ 000025 8002 SJMP ??osal_isbufset_4
|
|
1167 }
|
|
1168 }
|
|
1169 return ( TRUE );
|
|
\ ??osal_isbufset_3:
|
|
\ 000027 7901 MOV R1,#0x1
|
|
\ ??osal_isbufset_4:
|
|
\ 000029 02.... LJMP ??Subroutine31_0 & 0xFFFF
|
|
1170 }
|
|
1171
|
|
1172 /*********************************************************************
|
|
1173 * @fn osal_self
|
|
1174 *
|
|
1175 * @brief
|
|
1176 *
|
|
1177 * This function returns the task ID of the current (active) task.
|
|
1178 *
|
|
1179 * @param void
|
|
1180 *
|
|
1181 * @return active task ID or TASK_NO_TASK if no task is active
|
|
1182 */
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
1183 uint8 osal_self( void )
|
|
\ osal_self:
|
|
1184 {
|
|
\ 000000 C082 PUSH DPL
|
|
\ 000002 C083 PUSH DPH
|
|
\ 000004 ; Saved register size: 2
|
|
\ 000004 ; Auto size: 0
|
|
1185 return ( activeTaskID );
|
|
\ 000004 90.... MOV DPTR,#activeTaskID
|
|
\ 000007 E0 MOVX A,@DPTR
|
|
\ 000008 F9 MOV R1,A
|
|
\ 000009 02.... LJMP ?Subroutine0 & 0xFFFF
|
|
1186 }
|
|
|
|
\ In segment XDATA_ID, align 1, keep-with-next
|
|
\ `?<Initializer for activeTaskID>`:
|
|
\ 000000 FF DB 255
|
|
|
|
\ In segment XDATA_ROM_C, align 1
|
|
\ `?<Constant "">`:
|
|
\ 000000 00 DB ""
|
|
\ 000001 00000000 DB 0, 0, 0, 0, 0, 0, 0, 0
|
|
\ 00000000
|
|
\ 000009 00 DB 0
|
|
|
|
\ In segment XDATA_ROM_C, align 1
|
|
\ `?<Constant "">_1`:
|
|
\ 000000 00 DB ""
|
|
\ 000001 00000000 DB 0, 0, 0, 0, 0, 0, 0, 0
|
|
\ 00000000
|
|
\ 000009 00 DB 0
|
|
|
|
\ In segment XDATA_ROM_C, align 1
|
|
\ `?<Constant "">_2`:
|
|
\ 000000 00 DB ""
|
|
\ 000001 00000000 DB 0, 0, 0, 0, 0, 0, 0, 0
|
|
\ 00000000
|
|
\ 000009 00 DB 0
|
|
|
|
\ In segment XDATA_ROM_C, align 1
|
|
\ `?<Constant "0">`:
|
|
\ 000000 3000 DB "0"
|
|
|
|
\ In segment XDATA_ROM_C, align 1
|
|
\ __Constant_2710:
|
|
\ 000000 10270000 DD 10000
|
|
|
|
\ In segment XDATA_ROM_C, align 1
|
|
\ __Constant_5f5e100:
|
|
\ 000000 00E1F505 DD 100000000
|
|
1187
|
|
1188 /*********************************************************************
|
|
1189 */
|
|
|
|
Maximum stack usage in bytes:
|
|
|
|
ISTACK XSTACK Function
|
|
------ ------ --------
|
|
1 55 _ltoa
|
|
0 53 -> _itoa
|
|
0 53 -> strcat
|
|
0 53 -> strcpy
|
|
0 53 -> strlen
|
|
1 20 osal_buffer_uint24
|
|
1 20 osal_buffer_uint32
|
|
2 0 osal_build_uint16
|
|
0 16 osal_build_uint32
|
|
0 21 osal_clear_event
|
|
0 9 osal_init_system
|
|
0 9 -> osalInitTasks
|
|
0 9 -> osalTimerInit
|
|
0 9 -> osal_mem_alloc
|
|
0 9 -> osal_mem_init
|
|
0 9 -> osal_mem_kick
|
|
0 9 -> osal_memset
|
|
0 9 -> osal_pwrmgr_init
|
|
0 0 osal_int_disable
|
|
0 0 osal_int_enable
|
|
0 9 osal_isbufset
|
|
0 0 osal_isr_register
|
|
0 21 osal_memcmp
|
|
1 28 osal_memcpy
|
|
0 19 osal_memdup
|
|
0 16 -> osal_mem_alloc
|
|
0 19 -> osal_memcpy
|
|
0 21 osal_memset
|
|
0 12 -> memset
|
|
0 10 osal_msg_allocate
|
|
0 10 -> osal_mem_alloc
|
|
2 9 osal_msg_deallocate
|
|
2 0 -> osal_mem_free
|
|
0 10 osal_msg_dequeue
|
|
0 18 osal_msg_enqueue
|
|
0 10 osal_msg_enqueue_max
|
|
0 23 osal_msg_extract
|
|
2 0 osal_msg_find
|
|
0 9 osal_msg_push
|
|
0 14 osal_msg_receive
|
|
0 12 -> osal_clear_event
|
|
0 14 -> osal_msg_extract
|
|
0 12 -> osal_set_event
|
|
1 9 osal_msg_send
|
|
0 9 -> osal_msg_deallocate
|
|
0 9 -> osal_msg_enqueue
|
|
0 9 -> osal_set_event
|
|
2 0 osal_rand
|
|
2 0 -> Onboard_rand
|
|
1 12 osal_revmemcpy
|
|
0 10 osal_run_system
|
|
0 10 -> Hal_ProcessPoll
|
|
0 10 -> osalTimeUpdate
|
|
2 0 osal_self
|
|
0 21 osal_set_event
|
|
2 0 osal_start_system
|
|
2 0 -> osal_run_system
|
|
2 0 osal_strlen
|
|
2 0 -> strlen
|
|
|
|
|
|
Segment part sizes:
|
|
|
|
Bytes Function/Label
|
|
----- --------------
|
|
10 ?<Constant "">
|
|
10 ?<Constant "">_1
|
|
10 ?<Constant "">_2
|
|
2 ?<Constant "0">
|
|
1 ?<Initializer for activeTaskID>
|
|
2 ??Subroutine30_0
|
|
5 ??Subroutine31_0
|
|
6 ??Subroutine32_0
|
|
4 ??Subroutine33_0
|
|
6 ??Subroutine34_0
|
|
4 ??Subroutine35_0
|
|
3 ??Subroutine36_0
|
|
5 ??Subroutine37_0
|
|
5 ??Subroutine38_0
|
|
8 ??Subroutine39_0
|
|
7 ?Subroutine0
|
|
4 ?Subroutine1
|
|
8 ?Subroutine10
|
|
5 ?Subroutine11
|
|
10 ?Subroutine12
|
|
18 ?Subroutine13
|
|
13 ?Subroutine14
|
|
2 ?Subroutine15
|
|
9 ?Subroutine16
|
|
6 ?Subroutine17
|
|
4 ?Subroutine18
|
|
15 ?Subroutine19
|
|
5 ?Subroutine2
|
|
4 ?Subroutine20
|
|
15 ?Subroutine21
|
|
3 ?Subroutine22
|
|
6 ?Subroutine23
|
|
11 ?Subroutine24
|
|
11 ?Subroutine25
|
|
11 ?Subroutine26
|
|
9 ?Subroutine27
|
|
6 ?Subroutine28
|
|
1 ?Subroutine29
|
|
5 ?Subroutine3
|
|
7 ?Subroutine4
|
|
24 ?Subroutine5
|
|
6 ?Subroutine6
|
|
10 ?Subroutine7
|
|
6 ?Subroutine8
|
|
7 ?Subroutine9
|
|
1 _A_IEN0
|
|
4 __Constant_2710
|
|
4 __Constant_5f5e100
|
|
572 _ltoa
|
|
1 activeTaskID
|
|
43 osal_buffer_uint24
|
|
67 osal_buffer_uint32
|
|
25 osal_build_uint16
|
|
184 osal_build_uint32
|
|
51 osal_clear_event
|
|
66 osal_init_system
|
|
18 osal_int_disable
|
|
18 osal_int_enable
|
|
44 osal_isbufset
|
|
5 osal_isr_register
|
|
133 osal_memcmp
|
|
40 osal_memcpy
|
|
54 osal_memdup
|
|
29 osal_memset
|
|
69 osal_msg_allocate
|
|
34 osal_msg_deallocate
|
|
89 osal_msg_dequeue
|
|
62 osal_msg_enqueue
|
|
85 osal_msg_enqueue_max
|
|
91 osal_msg_extract
|
|
55 osal_msg_find
|
|
38 osal_msg_push
|
|
127 osal_msg_receive
|
|
78 osal_msg_send
|
|
2 osal_qHead
|
|
9 osal_rand
|
|
57 osal_revmemcpy
|
|
151 osal_run_system
|
|
12 osal_self
|
|
59 osal_set_event
|
|
9 osal_start_system
|
|
10 osal_strlen
|
|
2 tasksEvents
|
|
192 -- Other
|
|
|
|
|
|
2 680 bytes in segment BANKED_CODE
|
|
192 bytes in segment BANK_RELAYS
|
|
1 byte in segment SFR_AN
|
|
1 byte in segment XDATA_I
|
|
1 byte in segment XDATA_ID
|
|
40 bytes in segment XDATA_ROM_C
|
|
4 bytes in segment XDATA_Z
|
|
|
|
193 bytes of CODE memory
|
|
32 bytes of CONST memory (+ 8 bytes shared)
|
|
0 bytes of DATA memory (+ 1 byte shared)
|
|
2 680 bytes of HUGECODE memory
|
|
5 bytes of XDATA memory
|
|
|
|
Errors: none
|
|
Warnings: none
|