📄 osal_memory.lst
字号:
##############################################################################
# #
# IAR 8051 C/C++ Compiler V7.20H/W32 06/Nov/2008 11:13:08 #
# Copyright 2004-2006 IAR Systems. All rights reserved. #
# #
# Core = plain #
# Code model = banked #
# Data model = large #
# Calling convention = xdata reentrant #
# Constant location = data #
# Dptr setup = 1,16 #
# Source file = E:\解决\路由\Components\osal\common\OSAL_Memory.c #
# Command line = -f E:\解决\路由\Projects\zstack\Samples\SampleApp #
# \CC2430DB\..\..\..\Tools\CC2430DB\f8wCoord.cfg #
# (-DCPU32MHZ -DFORCE_MAC_NEAR -DROOT=__near_func #
# -DMAC_CFG_APP_PENDING_QUEUE=TRUE #
# -DZDO_COORDINATOR -DRTR_NWK -DBLINK_LEDS #
# "-DCONST=const __code" -DGENERIC=__generic) -f #
# E:\解决\路由\Projects\zstack\Samples\SampleApp\CC #
# 2430DB\..\..\..\Tools\CC2430DB\f8wConfig.cfg #
# (-DSECURE=0 -DDEFAULT_CHANLIST=0x00000800 #
# -DZDAPP_CONFIG_PAN_ID=0xFFFF #
# -DNWK_START_DELAY=100 -DEXTENDED_JOINING_RANDOM_M #
# ASK=0x007F -DBEACON_REQUEST_DELAY=100 #
# -DBEACON_REQ_DELAY_MASK=0x00FF #
# -DROUTE_EXPIRY_TIME=30 -DAPSC_ACK_WAIT_DURATION_P #
# OLLED=3000 -DNWK_INDIRECT_MSG_TIMEOUT=7 #
# -DMAX_RREQ_ENTRIES=10 -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=20 #
# -DNWK_MAX_BINDING_ENTRIES=10 #
# -DMAX_BINDING_CLUSTER_IDS=5 #
# "-DDEFAULT_KEY={0x01, 0x03, 0x05, 0x07, 0x09, #
# 0x0B, 0x0D, 0x0F, 0x00, 0x02, 0x04, 0x06, 0x08, #
# 0x0A, 0x0C, 0x0D}" -DRFD_RCVC_ALWAYS_ON=FALSE #
# -DPOLL_RATE=1000 -DQUEUED_POLL_RATE=100 #
# -DRESPONSE_POLL_RATE=100 -DREJOIN_POLL_RATE=440 #
# -DTOP_BOOT_PAGES=0) -I "D:\Program Files\IAR #
# Systems\Embedded Workbench 4.05 Evaluation #
# version\8051\inc\" -I "D:\Program Files\IAR #
# Systems\Embedded Workbench 4.05 Evaluation #
# version\8051\inc\clib\" -I #
# E:\解决\路由\Projects\zstack\Samples\SampleApp\CC #
# 2430DB\ -I E:\解决\路由\Projects\zstack\Samples\S #
# ampleApp\CC2430DB\..\Source\ -I #
# E:\解决\路由\Projects\zstack\Samples\SampleApp\CC #
# 2430DB\..\..\..\ZMain\TI2430DB\ -I #
# E:\解决\路由\Projects\zstack\Samples\SampleApp\CC #
# 2430DB\..\..\..\..\..\Components\mt\ -I #
# E:\解决\路由\Projects\zstack\Samples\SampleApp\CC #
# 2430DB\..\..\..\..\..\Components\hal\include\ -I #
# E:\解决\路由\Projects\zstack\Samples\SampleApp\CC #
# 2430DB\..\..\..\..\..\Components\hal\target\CC243 #
# 0DB\ -I E:\解决\路由\Projects\zstack\Samples\Samp #
# leApp\CC2430DB\..\..\..\..\..\Components\osal\mcu #
# \ccsoc\ -I E:\解决\路由\Projects\zstack\Samples\S #
# ampleApp\CC2430DB\..\..\..\..\..\Components\osal\ #
# include\ -I E:\解决\路由\Projects\zstack\Samples\ #
# SampleApp\CC2430DB\..\..\..\..\..\Components\stac #
# k\af\ -I E:\解决\路由\Projects\zstack\Samples\Sam #
# pleApp\CC2430DB\..\..\..\..\..\Components\stack\n #
# wk\ -I E:\解决\路由\Projects\zstack\Samples\Sampl #
# eApp\CC2430DB\..\..\..\..\..\Components\stack\sec #
# \ -I E:\解决\路由\Projects\zstack\Samples\SampleA #
# pp\CC2430DB\..\..\..\..\..\Components\stack\sys\ #
# -I E:\解决\路由\Projects\zstack\Samples\SampleApp #
# \CC2430DB\..\..\..\..\..\Components\stack\zdo\ #
# -I E:\解决\路由\Projects\zstack\Samples\SampleApp #
# \CC2430DB\..\..\..\..\..\Components\zmac\f8w\ -I #
# E:\解决\路由\Projects\zstack\Samples\SampleApp\CC #
# 2430DB\..\..\..\..\..\Components\zmac\ -I #
# E:\解决\路由\Projects\zstack\Samples\SampleApp\CC #
# 2430DB\..\..\..\..\..\Components\services\saddr\ #
# -I E:\解决\路由\Projects\zstack\Samples\SampleApp #
# \CC2430DB\..\..\..\..\..\Components\services\sdat #
# a\ -I E:\解决\路由\Projects\zstack\Samples\Sample #
# App\CC2430DB\..\..\..\..\..\Components\mac\includ #
# e\ -I E:\解决\路由\Projects\zstack\Samples\Sample #
# App\CC2430DB\..\..\..\..\..\Components\mac\high_l #
# evel\ -I E:\解决\路由\Projects\zstack\Samples\Sam #
# pleApp\CC2430DB\..\..\..\..\..\Components\mac\low #
# _level\srf03\ -I E:\解决\路由\Projects\zstack\Sam #
# ples\SampleApp\CC2430DB\..\..\..\..\..\Components #
# \mac\low_level\srf03\single_chip\ -D CC2430DB #
# -lC E:\解决\路由\Projects\zstack\Samples\SampleAp #
# p\CC2430DB\CoordinatorDB\List\ -lA #
# E:\解决\路由\Projects\zstack\Samples\SampleApp\CC #
# 2430DB\CoordinatorDB\List\ --diag_suppress #
# Pe001,Pa010 --diag_remark pe550 -o #
# E:\解决\路由\Projects\zstack\Samples\SampleApp\CC #
# 2430DB\CoordinatorDB\Obj\ -e #
# --require_prototypes -z9 --no_code_motion #
# --debug --core=plain --dptr=16,1 #
# --data_model=large --code_model=banked #
# --calling_convention=xdata_reentrant #
# --place_constants=data --nr_virtual_regs 8 #
# E:\解决\路由\Components\osal\common\OSAL_Memory.c #
# List file = E:\解决\路由\Projects\zstack\Samples\SampleApp\CC #
# 2430DB\CoordinatorDB\List\OSAL_Memory.lst #
# Object file = E:\解决\路由\Projects\zstack\Samples\SampleApp\CC #
# 2430DB\CoordinatorDB\Obj\OSAL_Memory.r51 #
# #
# #
##############################################################################
E:\解决\路由\Components\osal\common\OSAL_Memory.c
1 /*********************************************************************
2 Filename: OSAL_Memory.c
3 Revised: $Date: 2006-10-26 11:15:57 -0700 (Thu, 26 Oct 2006) $
4 Revision: $Revision: 12421 $
5
6 Description: OSAL Heap Memory management functions.
7
8 Copyright (c) 2006 by Texas Instruments, Inc.
9 All Rights Reserved. Permission to use, reproduce, copy, prepare
10 derivative works, modify, distribute, perform, display or sell this
11 software and/or its documentation for any purpose is prohibited
12 without the express written consent of Texas Instruments, Inc.
13 *********************************************************************/
14
15 /*********************************************************************
16 * INCLUDES
17 */
18
19 #include "ZComDef.h"
20 #include "OSAL_Memory.h"
21 #include "OnBoard.h"
22 #include "hal_assert.h"
23
24 #if ( MAXMEMHEAP >= 32768 )
25 #error MAXMEMHEAP is too big to manage!
26 #endif
27
28 // Minimum wasted bytes to justify splitting a block before allocation.
29 #if !defined ( OSALMEM_MIN_BLKSZ )
30 #define OSALMEM_MIN_BLKSZ 4
31 #endif
32
33 /* Profiling memory allocations showed that a significant % of very high
34 * frequency allocations/frees are for block sizes less than or equal to 16.
35 */
36 #if !defined ( OSALMEM_SMALL_BLKSZ )
37 #define OSALMEM_SMALL_BLKSZ 16
38 #endif
39
40 #if !defined ( OSALMEM_NODEBUG )
41 #define OSALMEM_NODEBUG TRUE
42 #endif
43
44 #if !defined ( OSALMEM_PROFILER )
45 #define OSALMEM_PROFILER FALSE
46 #endif
47
48 #if !defined ( OSALMEM_GUARD )
49 #define OSALMEM_GUARD TRUE // TBD - Hacky workaround til Bugzilla 1252 is fixed!
50 #define OSALMEM_READY 0xE2
51 #endif
52
53 #if ( OSALMEM_PROFILER )
54 #define OSALMEM_INIT 'X'
55 #define OSALMEM_ALOC 'A'
56 #define OSALMEM_REIN 'F'
57 #endif
58
59 /*********************************************************************
60 * MACROS
61 */
62
63 /*
64 * The MAC_ASSERT macro is for use during debugging.
65 * The given expression must evaluate as "true" or else fatal error occurs.
66 * At that point, the call stack feature of the debugger can pinpoint where
67 * the problem occurred.
68 *
69 * To disable this feature and save code size, the project should define
70 * OSALMEM_NODEBUG to TRUE.
71 */
72 #if ( OSALMEM_NODEBUG )
73 #define OSALMEM_ASSERT( expr )
74 #define OSALMEM_DEBUG( statement )
75 #else
76 #define OSALMEM_ASSERT( expr) HAL_ASSERT( expr )
77 #define OSALMEM_DEBUG( statement) st( statement )
78 #endif
79
80 /*********************************************************************
81 * TYPEDEFS
82 */
83
84 typedef uint16 osalMemHdr_t;
85
86 /*********************************************************************
87 * CONSTANTS
88 */
89
90 #define OSALMEM_IN_USE 0x8000
91
92 /* This number sets the size of the small-block bucket. Although profiling
93 * shows max simultaneous alloc of 16x18, timing without profiling overhead
94 * shows that the best worst case is achieved with the following.
95 */
96 #define SMALLBLKHEAP 232
97
98 // To maintain data alignment of the pointer returned, reserve the greater
99 // space for the memory block header.
100 #define HDRSZ ( (sizeof ( halDataAlign_t ) > sizeof( osalMemHdr_t )) ? \
101 sizeof ( halDataAlign_t ) : sizeof( osalMemHdr_t ) )
102
103 /*********************************************************************
104 * GLOBAL VARIABLES
105 */
106
107 /*********************************************************************
108 * EXTERNAL VARIABLES
109 */
110
111 /*********************************************************************
112 * EXTERNAL FUNCTIONS
113 */
114
115 /*********************************************************************
116 * LOCAL VARIABLES
117 */
118
119 #if ( OSALMEM_GUARD )
\ In segment XDATA_Z, align 1, keep-with-next
\ 000000 REQUIRE __INIT_XDATA_Z
120 static byte ready = 0;
\ ??ready:
\ 000000 DS 1
121 #endif
122
\ In segment XDATA_Z, align 1, keep-with-next
\ 000000 REQUIRE __INIT_XDATA_Z
123 static osalMemHdr_t *ff1; // First free block in the small-block bucket.
\ ??ff1:
\ 000000 DS 2
\ In segment XDATA_Z, align 1, keep-with-next
\ 000000 REQUIRE __INIT_XDATA_Z
124 static osalMemHdr_t *ff2; // First free block after the small-block bucket.
\ ??ff2:
\ 000000 DS 2
125
126 #if ( OSALMEM_METRICS )
127 static uint16 blkMax; // Max cnt of all blocks ever seen at once.
128 static uint16 blkCnt; // Current cnt of all blocks.
129 static uint16 blkFree; // Current cnt of free blocks.
130 static uint16 memAlo; // Current total memory allocated.
131 static uint16 memMax; // Max total memory ever allocated at once.
132 #endif
133
134 #if ( OSALMEM_PROFILER )
135 #define OSALMEM_PROMAX 8
136 /* The profiling buckets must differ by at least OSALMEM_MIN_BLKSZ; the
137 * last bucket must equal the max alloc size. Set the bucket sizes to
138 * whatever sizes necessary to show how your application is using memory.
139 */
140 static uint16 proCnt[OSALMEM_PROMAX] = {
141 OSALMEM_SMALL_BLKSZ, 48, 112, 176, 192, 224, 256, 65535 };
142 static uint16 proCur[OSALMEM_PROMAX] = { 0 };
143 static uint16 proMax[OSALMEM_PROMAX] = { 0 };
144 static uint16 proTot[OSALMEM_PROMAX] = { 0 };
145 static uint16 proSmallBlkMiss;
146 #endif
147
148 // Memory Allocation Heap.
149 #if defined( EXTERNAL_RAM )
150 static byte *theHeap = (byte *)EXT_RAM_BEG;
151 #else
\ In segment XDATA_Z, align 1, keep-with-next
\ 000000 REQUIRE __INIT_XDATA_Z
152 static halDataAlign_t _theHeap[ MAXMEMHEAP / sizeof( halDataAlign_t ) ];
\ ??_theHeap:
\ 000000 DS 4096
\ In segment XDATA_I, align 1, keep-with-next
153 static byte *theHeap = (byte *)_theHeap;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -