############################################################################### # # 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 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 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 `?` \ 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,#`?` \ 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,#`?_1` \ 000031 740A MOV A,#0xa \ 000033 12.... LCALL ?MOVE_LONG8_XDATA_XDATA \ 000036 90.... MOV DPTR,#`?_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,#`?` & 0xff \ 000112 7D.. MOV R5,#(`?` >> 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,#`?` & 0xff \ 000144 7D.. MOV R5,#(`?` >> 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,#`?` & 0xff \ 0001EC 7D.. MOV R5,#(`?` >> 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,#`?` & 0xff \ 000225 7D.. MOV R5,#(`?` >> 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 \ `?`: \ 000000 FF DB 255 \ In segment XDATA_ROM_C, align 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 \ `?_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 \ `?_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 \ `?`: \ 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 ? 10 ?_1 10 ?_2 2 ? 1 ? 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