⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cache.lst

📁 AT89C51 MP3源程序AT89C51 MP3源程序 SD AT89C51 MP3源程序AT89C51 MP3源程序 SD
💻 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 + -