📄 cache.lst
字号:
1 .file "cache.c"
2 .arch atmega128
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
11 .text
12 .Ltext0:
80 .global cache
81 .global cache
82 .section .bss
85 cache:
86 0000 0000 0000 .skip 517,0
86 0000 0000
86 0000 0000
86 0000 0000
86 0000 0000
87 .text
89 .global _Z10Cache_Initv
91 _Z10Cache_Initv:
1:cache.c **** /*
2:cache.c **** ;**************************************************************************************************
3:cache.c **** ;* Copyright (c) 2006 by JiaoJinXing.
4:cache.c **** ;* All rights reserved.
5:cache.c **** ;*
6:cache.c **** ;*---- 文件信息 -----------------------------------------------------------------------------------
7:cache.c **** ;* 文 件 名 : Cache.c
8:cache.c **** ;* 创 建 人 : 焦进星
9:cache.c **** ;* 描 述 : 扇区缓存器文件
10:cache.c **** ;*
11:cache.c **** ;*---- 历史版本信息 -------------------------------------------------------------------------------
12:cache.c **** ;* 日 期 : 2008年 12 月 15 日
13:cache.c **** ;* 创 建 人 : 焦进星
14:cache.c **** ;* 描 述 : 建立版本 V1.0.0
15:cache.c **** ;*
16:cache.c **** ;*---- 联系方式 -----------------------------------------------------------------------------------
17:cache.c **** ;* Email : wyoujtg@163.com
18:cache.c **** ;* Web : http://wyoujtg.blog.163.com
19:cache.c **** ;**************************************************************************************************
20:cache.c **** ;*/
21:cache.c ****
22:cache.c **** #include "minifs.h"
23:cache.c ****
24:cache.c **** /*
25:cache.c **** ;**************************************************************************************************
26:cache.c **** ;* 描 述 : cache减少了对物理扇区的读写次数, 但应定时回写cache, 以免因意外情况造成数据丢失
27:cache.c **** ;**************************************************************************************************
28:cache.c **** ;*/
29:cache.c ****
30:cache.c **** /*
31:cache.c **** ;**************************************************************************************************
32:cache.c **** ;* 变量名称 : cache
33:cache.c **** ;* 描 述 : 扇区缓存器
34:cache.c **** ;**************************************************************************************************
35:cache.c **** ;*/
36:cache.c **** struct
37:cache.c **** {
38:cache.c **** uint32 Index; /* 缓冲的扇区号 */
39:cache.c **** uint8 WbFlag; /* 需回写扇区标识 */
40:cache.c **** uint8 Buf[512]; /* 缓冲区 */
41:cache.c **** } cache;
42:cache.c ****
43:cache.c **** /*
44:cache.c **** ;**************************************************************************************************
45:cache.c **** ;* 函数名称 : Cache_Init
46:cache.c **** ;* 描 述 : 扇区缓存器初始化
47:cache.c **** ;* 输 入 : 无
48:cache.c **** ;*
49:cache.c **** ;* 输 出 : 无
50:cache.c **** ;**************************************************************************************************
51:cache.c **** ;*/
52:cache.c **** void Cache_Init(void)
53:cache.c **** {
93 .LM1:
94 /* prologue: frame size=0 */
95 /* prologue end (size=0) */
96 .LBB2:
54:cache.c **** cache.Index = (uint32)(-1); /* 缓冲无效扇区 */
98 .LM2:
99 0000 8FEF ldi r24,lo8(-1)
100 0002 9FEF ldi r25,hi8(-1)
101 0004 AFEF ldi r26,hlo8(-1)
102 0006 BFEF ldi r27,hhi8(-1)
103 0008 8093 0000 sts cache,r24
104 000c 9093 0000 sts (cache)+1,r25
105 0010 A093 0000 sts (cache)+2,r26
106 0014 B093 0000 sts (cache)+3,r27
55:cache.c **** cache.WbFlag = 0; /* 无需回写 */
108 .LM3:
109 0018 1092 0000 sts cache+4,__zero_reg__
110 .LBE2:
111 /* epilogue: frame size=0 */
112 001c 0895 ret
113 /* epilogue end (size=1) */
114 /* function void Cache_Init() size 15 (14) */
118 .global _Z10OpenSectorm
120 _Z10OpenSectorm:
56:cache.c **** }
57:cache.c ****
58:cache.c **** /*
59:cache.c **** ;**************************************************************************************************
60:cache.c **** ;* 函数名称 : OpenSector
61:cache.c **** ;* 描 述 : 打开指定扇区
62:cache.c **** ;* 输 入 : SecIndex: 扇区号
63:cache.c **** ;*
64:cache.c **** ;* 输 出 : 扇区读写地址
65:cache.c **** ;**************************************************************************************************
66:cache.c **** ;*/
67:cache.c **** uint8 *OpenSector(uint32 SecIndex)
68:cache.c **** {
122 .LM4:
123 /* prologue: frame size=0 */
124 001e EF92 push r14
125 0020 FF92 push r15
126 0022 0F93 push r16
127 0024 1F93 push r17
128 0026 CF93 push r28
129 0028 DF93 push r29
130 /* prologue end (size=6) */
131 002a 7B01 movw r14,r22
132 002c 8C01 movw r16,r24
133 .LBB3:
69:cache.c **** if (cache.Index != SecIndex) /* 当前不是缓冲该扇区 */
135 .LM5:
136 002e A091 0000 lds r26,cache
137 0032 B091 0000 lds r27,(cache)+1
138 0036 C091 0000 lds r28,(cache)+2
139 003a D091 0000 lds r29,(cache)+3
140 003e A617 cp r26,r22
141 0040 B707 cpc r27,r23
142 0042 C807 cpc r28,r24
143 0044 D907 cpc r29,r25
144 0046 69F1 breq .L3
70:cache.c **** {
71:cache.c **** if (cache.WbFlag) /* 缓冲的扇区需要回写 */
146 .LM6:
147 0048 8091 0000 lds r24,cache+4
148 004c 8823 tst r24
149 004e 51F0 breq .L4
72:cache.c **** {
73:cache.c **** /* 回写缓冲区的内容到物理扇区 */
74:cache.c **** if (!WriteIDESector(cache.Index, cache.Buf))
151 .LM7:
152 0050 40E0 ldi r20,lo8(cache+5)
153 0052 50E0 ldi r21,hi8(cache+5)
154 0054 BD01 movw r22,r26
155 0056 CE01 movw r24,r28
156 0058 0E94 0000 call _Z14WriteIDESectormPh
157 005c 8823 tst r24
158 005e B1F0 breq .L7
75:cache.c **** {
76:cache.c **** return ((uint8 *)0);
77:cache.c **** }
78:cache.c **** cache.WbFlag = 0; /* 无需再回写 */
160 .LM8:
161 0060 1092 0000 sts cache+4,__zero_reg__
162 .L4:
79:cache.c **** }
80:cache.c **** if (!ReadIDESector(SecIndex, cache.Buf))
164 .LM9:
165 0064 40E0 ldi r20,lo8(cache+5)
166 0066 50E0 ldi r21,hi8(cache+5)
167 0068 C801 movw r24,r16
168 006a B701 movw r22,r14
169 006c 0E94 0000 call _Z13ReadIDESectormPh
170 0070 8823 tst r24
171 0072 79F4 brne .L6
81:cache.c **** {
82:cache.c **** cache.Index = (uint32)(-1); /* 缓冲区的内容可能已脏 */
173 .LM10:
174 0074 8FEF ldi r24,lo8(-1)
175 0076 9FEF ldi r25,hi8(-1)
176 0078 AFEF ldi r26,hlo8(-1)
177 007a BFEF ldi r27,hhi8(-1)
178 007c 8093 0000 sts cache,r24
179 0080 9093 0000 sts (cache)+1,r25
180 0084 A093 0000 sts (cache)+2,r26
181 0088 B093 0000 sts (cache)+3,r27
182 .L7:
83:cache.c **** return ((uint8 *)0);
184 .LM11:
185 008c 80E0 ldi r24,lo8(0)
186 008e 90E0 ldi r25,hi8(0)
187 0090 0AC0 rjmp .L2
188 .L6:
84:cache.c **** }
85:cache.c **** cache.Index = SecIndex; /* 当前缓冲该扇区 */
190 .LM12:
191 0092 E092 0000 sts cache,r14
192 0096 F092 0000 sts (cache)+1,r15
193 009a 0093 0000 sts (cache)+2,r16
194 009e 1093 0000 sts (cache)+3,r17
195 .L3:
86:cache.c **** }
87:cache.c **** return cache.Buf; /* 返回缓冲区地址 */
197 .LM13:
198 00a2 80E0 ldi r24,lo8(cache+5)
199 00a4 90E0 ldi r25,hi8(cache+5)
200 .L2:
201 .LBE3:
202 /* epilogue: frame size=0 */
203 00a6 DF91 pop r29
204 00a8 CF91 pop r28
205 00aa 1F91 pop r17
206 00ac 0F91 pop r16
207 00ae FF90 pop r15
208 00b0 EF90 pop r14
209 00b2 0895 ret
210 /* epilogue end (size=7) */
211 /* function uint8* OpenSector(uint32) size 75 (62) */
214 .global _Z11WriteSectorv
216 _Z11WriteSectorv:
88:cache.c **** }
89:cache.c ****
90:cache.c **** /*
91:cache.c **** ;**************************************************************************************************
92:cache.c **** ;* 函数名称 : WriteSector
93:cache.c **** ;* 描 述 : 写已打开的扇区
94:cache.c **** ;* 输 入 : 无
95:cache.c **** ;*
96:cache.c **** ;* 输 出 : 无
97:cache.c **** ;**************************************************************************************************
98:cache.c **** ;*/
99:cache.c **** void WriteSector(void)
100:cache.c **** {
218 .LM14:
219 /* prologue: frame size=0 */
220 /* prologue end (size=0) */
221 .LBB4:
101:cache.c **** cache.WbFlag = 1; /* 切换时需回写扇区 */
223 .LM15:
224 00b4 81E0 ldi r24,lo8(1)
225 00b6 8093 0000 sts cache+4,r24
226 .LBE4:
227 /* epilogue: frame size=0 */
228 00ba 0895 ret
229 /* epilogue end (size=1) */
230 /* function void WriteSector() size 4 (3) */
233 .global _Z14CacheWriteBackv
235 _Z14CacheWriteBackv:
102:cache.c **** }
103:cache.c ****
104:cache.c **** /*
105:cache.c **** ;**************************************************************************************************
106:cache.c **** ;* 函数名称 : CacheWriteBack
107:cache.c **** ;* 描 述 : 回写已打开的扇区
108:cache.c **** ;* 输 入 : 无
109:cache.c **** ;*
110:cache.c **** ;* 输 出 : TRUE OR FALSE
111:cache.c **** ;**************************************************************************************************
112:cache.c **** ;*/
113:cache.c **** uint8 CacheWriteBack(void)
114:cache.c **** {
237 .LM16:
238 /* prologue: frame size=0 */
239 /* prologue end (size=0) */
240 .LBB5:
115:cache.c **** if (cache.WbFlag) /* 需回写扇区 */
242 .LM17:
243 00bc 8091 0000 lds r24,cache+4
244 00c0 8823 tst r24
245 00c2 99F0 breq .L10
116:cache.c **** {
117:cache.c **** /* 回写缓冲区的内容到物理扇区 */
118:cache.c **** if (!WriteIDESector(cache.Index, cache.Buf))
247 .LM18:
248 00c4 40E0 ldi r20,lo8(cache+5)
249 00c6 50E0 ldi r21,hi8(cache+5)
250 00c8 6091 0000 lds r22,cache
251 00cc 7091 0000 lds r23,(cache)+1
252 00d0 8091 0000 lds r24,(cache)+2
253 00d4 9091 0000 lds r25,(cache)+3
254 00d8 0E94 0000 call _Z14WriteIDESectormPh
255 00dc 8823 tst r24
256 00de 19F4 brne .L11
119:cache.c **** {
120:cache.c **** return FALSE;
258 .LM19:
259 00e0 80E0 ldi r24,lo8(0)
260 00e2 90E0 ldi r25,hi8(0)
261 00e4 0895 ret
262 .L11:
121:cache.c **** }
122:cache.c **** cache.WbFlag = 0; /* 无需再回写 */
264 .LM20:
265 00e6 1092 0000 sts cache+4,__zero_reg__
266 .L10:
123:cache.c **** }
124:cache.c **** return TRUE;
268 .LM21:
269 00ea 81E0 ldi r24,lo8(1)
270 00ec 90E0 ldi r25,hi8(1)
271 .LBE5:
125:cache.c **** }
273 .LM22:
274 00ee 0895 ret
275 /* epilogue: frame size=0 */
276 00f0 0895 ret
277 /* epilogue end (size=1) */
278 /* function uint8 CacheWriteBack() size 27 (26) */
281 .text
283 Letext:
284 /* File "cache.c": code 121 = 0x0079 ( 105), prologues 6, epilogues 10 */
DEFINED SYMBOLS
*ABS*:00000000 cache.c
*ABS*:0000003f __SREG__
*ABS*:0000003e __SP_H__
*ABS*:0000003d __SP_L__
*ABS*:00000000 __tmp_reg__
*ABS*:00000001 __zero_reg__
C:\Users\ADMINI~1\AppData\Local\Temp/cccVaaaa.s:85 .bss:00000000 cache
C:\Users\ADMINI~1\AppData\Local\Temp/cccVaaaa.s:91 .text:00000000 _Z10Cache_Initv
C:\Users\ADMINI~1\AppData\Local\Temp/cccVaaaa.s:120 .text:0000001e _Z10OpenSectorm
C:\Users\ADMINI~1\AppData\Local\Temp/cccVaaaa.s:216 .text:000000b4 _Z11WriteSectorv
C:\Users\ADMINI~1\AppData\Local\Temp/cccVaaaa.s:235 .text:000000bc _Z14CacheWriteBackv
C:\Users\ADMINI~1\AppData\Local\Temp/cccVaaaa.s:283 .text:000000f2 Letext
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
_Z14WriteIDESectormPh
_Z13ReadIDESectormPh
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -