📄 po_kernel.lst
字号:
##############################################################################
# #
# IAR ARM ANSI C/C++ Compiler V4.31A/W32 EVALUATION 29/Nov/2007 16:54:01 #
# Copyright 1999-2005 IAR Systems. All rights reserved. #
# #
# Cpu mode = interwork #
# Endian = little #
# Stack alignment = 4 #
# Source file = G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\COMMON_FS_MS\po_Ke #
# rnel.c #
# Command line = G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\COMMON_FS_MS\po_Ke #
# rnel.c -D AT91SAM7X256 -D PULL_UP_USB -D USE_LED #
# -lC "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mas #
# s Storage\compil\Binary\List\" -o #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\Binary\Obj\" -z9 --debug --cpu_mode #
# thumb --endian little --cpu ARM7TDMI --stack_align #
# 4 --interwork -e --fpu None --dlib_config #
# "C:\Program Files\IAR Systems\Embedded Workbench #
# 4.0 Evaluation\ARM\LIB\dl4tptinl8f.h" -I #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\srcIAR\" -I #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\..\src\" -I #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\..\..\" -I #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\..\..\FILESYSTEM\inc\" -I #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\..\..\MASSSTORAGE\inc\" -I #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\..\..\AT91SAM7X256\" -I #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\..\inc\" -I #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\..\..\mmc_sd\" -I #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\..\..\COMMON_FS_MS\" -I "C:\Program #
# Files\IAR Systems\Embedded Workbench 4.0 #
# Evaluation\ARM\INC\" #
# List file = G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\Binary\List\po_Kernel.lst #
# Object file = G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\Binary\Obj\po_Kernel.r79 #
# #
# #
##############################################################################
G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\COMMON_FS_MS\po_Kernel.c
1 // ----------------------------------------------------------------------------
2 // ATMEL Microcontroller Software Support - ROUSSET -
3 // ----------------------------------------------------------------------------
4 // DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
5 // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
6 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
7 // DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
8 // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
9 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
10 // OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
11 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
12 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
13 // EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
14 // ----------------------------------------------------------------------------
15 // File Name : po_kernel.c
16 // Object : Encapsulation of specific kernel functions
17 // Creation : JCB 15/apr/2005
18 // Modif :
19 // ----------------------------------------------------------------------------
20 #include <stdlib.h> // malloc etc...
21 #include <string.h> // memcpy, memset, etc...
22
23 #include "trace.h"
24 #include "po_types.h"
25 #include "po_kernel.h"
26
27
\ In segment DATA_Z, align 4, align-sorted
28 ULONG CPT_LOCK = 0;
\ CPT_LOCK:
\ 00000000 DS8 4
29
30 /******************************************************************
31 *
32 * SUB-ROUTINE po_unlock
33 *
34 *------------------------------------------------------------------
35 *
36 * purpose : releases a spin lock and restores the original IRQL at
37 * which the caller was running.
38 *
39 * input parameters :
40 *
41 * output parameters :
42 *
43 * global data :
44 *
45 ******************************************************************/
46 #ifdef ADS_COMPIL
47 void po_unlock()
48 #else
\ In segment CODE_I, align 4, keep-with-next
49 __ramfunc void po_unlock()
50 #endif
51 {
\ po_unlock:
\ 00000000 00B5 PUSH {LR}
52 CPT_LOCK--;
\ 00000002 .... LDR R0,??DataTable1 ;; CPT_LOCK
\ 00000004 0168 LDR R1,[R0, #+0]
\ 00000006 491E SUB R1,R1,#+1
\ 00000008 0160 STR R1,[R0, #+0]
53 if( 0 == CPT_LOCK )
\ 0000000A 01D1 BNE ??po_unlock_0
54 {
55 AT91F_enable_interrupt();
\ 0000000C ........ _BLF AT91F_enable_interrupt,??AT91F_enable_interrupt??rT?CODE_I
56 }
57 }
\ ??po_unlock_0:
\ 00000010 01BC POP {R0}
\ 00000012 0047 BX R0 ;; return
58
59 /******************************************************************
60 *
61 * SUB-ROUTINE po_lock
62 *
63 *------------------------------------------------------------------
64 *
65 * purpose : acquires a spin lock so the caller can synchronize access
66 * to shared data in a multiprocessor-safe way by raising IRQL.
67 *
68 * input parameters :
69 *
70 * output parameters :
71 *
72 * global data :
73 *
74 ******************************************************************/
75 #ifdef ADS_COMPIL
76 void po_lock()
77 #else
\ In segment CODE_I, align 4, keep-with-next
78 void po_lock()
79 #endif
80 {
\ po_lock:
\ 00000000 10B5 PUSH {R4,LR}
81 if( 0 == CPT_LOCK )
\ 00000002 .... LDR R4,??DataTable1 ;; CPT_LOCK
\ 00000004 2068 LDR R0,[R4, #+0]
\ 00000006 0028 CMP R0,#+0
\ 00000008 01D1 BNE ??po_lock_0
82 {
83 AT91F_disable_interrupt();
\ 0000000A ........ _BLF AT91F_disable_interrupt,??AT91F_disable_interrupt??rT?CODE_I
84 }
85 CPT_LOCK++;
\ ??po_lock_0:
\ 0000000E 2068 LDR R0,[R4, #+0]
\ 00000010 401C ADD R0,R0,#+1
\ 00000012 2060 STR R0,[R4, #+0]
86 }
\ 00000014 .... B ?Subroutine13
\ In segment CODE_I, align 4, keep-with-next
\ ?Subroutine13:
\ 00000000 10BC POP {R4}
\ 00000002 01BC POP {R0}
\ 00000004 0047 BX R0 ;; return
87
88 /******************************************************************
89 *
90 * SUB-ROUTINE po_malloc
91 *
92 *------------------------------------------------------------------
93 *
94 * purpose : kernel memory allocation in non paged poool
95 *
96 * input parameters : size to allocate
97 *
98 * output parameters : pointer on allocated memory zone.
99 *
100 * global data : no
101 *
102 ******************************************************************/
\ In segment CODE, align 4, keep-with-next
103 void* po_malloc( ULONG size )
104 {
\ po_malloc:
\ 00000000 00B5 PUSH {LR}
105 TRACE_DEBUG_H( "malloc %d\n\r", (int)size );
106 return malloc( (unsigned int)size );
\ 00000002 ........ _BLF __data_malloc,??__data_malloc??rT
\ 00000006 02BC POP {R1}
\ 00000008 0847 BX R1 ;; return
107 }
108
109 /******************************************************************
110 *
111 * SUB-ROUTINE po_free
112 *
113 *------------------------------------------------------------------
114 *
115 * purpose : Kernel memory free routine
116 *
117 * input parameters : buffer to free
118 *
119 * output parameters :
120 *
121 * global data :
122 *
123 ******************************************************************/
\ In segment CODE, align 4, keep-with-next
124 void po_free( void* buffer )
125 {
\ po_free:
\ 00000000 00B5 PUSH {LR}
126 TRACE_DEBUG_H( "free buff\n\r" );
127 free( buffer );
\ 00000002 ........ _BLF __data_free,??__data_free??rT
128 }
\ 00000006 01BC POP {R0}
\ 00000008 0047 BX R0 ;; return
129
130 /******************************************************************
131 *
132 * SUB-ROUTINE po_memcpy
133 *
134 *------------------------------------------------------------------
135 *
136 * purpose : memcpy
137 *
138 * input parameters : dest
139 * src
140 * len
141 *
142 * output parameters :
143 *
144 * global data :
145 *
146 ******************************************************************/
147 #ifdef ADS_COMPIL
148 void po_memcpy( void *dest, void *src, unsigned int len )
149 #else
\ In segment CODE_I, align 4, keep-with-next
150 __ramfunc void po_memcpy( void *dest, void *src, unsigned int len )
151 #endif
152 {
153 unsigned char *_dst = dest;
154 const unsigned char *_src1 = src;
\ po_memcpy:
\ 00000000 03E0 B ??po_memcpy_0
155
156 // memcpy(dest,src,len);
157 while( len-- > 0 )
158 {
159 *_dst++ = *_src1++;
\ ??po_memcpy_1:
\ 00000002 0B78 LDRB R3,[R1, #+0]
\ 00000004 0370 STRB R3,[R0, #+0]
\ 00000006 491C ADD R1,R1,#+1
\ 00000008 401C ADD R0,R0,#+1
160 }
\ ??po_memcpy_0:
\ 0000000A 131C MOV R3,R2
\ 0000000C 521E SUB R2,R2,#+1
\ 0000000E 002B CMP R3,#+0
\ 00000010 F7D1 BNE ??po_memcpy_1
161 }
\ 00000012 00B0 ADD SP,#+0
\ 00000014 7047 BX LR ;; return
162
163 /******************************************************************
164 *
165 * SUB-ROUTINE po_rngNBytes
166 *
167 *------------------------------------------------------------------
168 *
169 * purpose : return number of bytes in rounding buffer
170 *
171 * input parameters : rounding buffer
172 *
173 *
174 *
175 * output parameters :
176 *
177 * global data :
178 *
179 ******************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -