Files
OldPeopleHome/zigbee/ZStack-CC2530-r200/Projects/SappWsn/RouterEB/List/OSAL.lst
LitterDryFish 6b0d1c0743 add node
2019-08-23 12:26:53 +08:00

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