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

📄 filesystem.lst

📁 ENC28J60 System HTTP
💻 LST
📖 第 1 页 / 共 5 页
字号:
   1               		.file	"filesystem.c"
   2               	__SREG__ = 0x3f
   3               	__SP_H__ = 0x3e
   4               	__SP_L__ = 0x3d
   5               	__CCP__  = 0x34
   6               	__tmp_reg__ = 0
   7               	__zero_reg__ = 1
   8               		.global __do_copy_data
   9               		.global __do_clear_bss
  11               		.text
  12               	.Ltext0:
 118               	.global	filesystem_format
 120               	filesystem_format:
   1:io/filesystem.c **** /*
   2:io/filesystem.c **** ,-----------------------------------------------------------------------------------------.
   3:io/filesystem.c **** | io/filesystem
   4:io/filesystem.c **** |-----------------------------------------------------------------------------------------
   5:io/filesystem.c **** | this file implements a very very basic (custom) filesystem (->dataflash)
   6:io/filesystem.c **** | - 600 files max
   7:io/filesystem.c **** | - smallest file unit is 256 Byte
   8:io/filesystem.c **** | - store file as linked list across the whole dataflash
   9:io/filesystem.c **** | - file extension is always lowercase !!
  10:io/filesystem.c **** | - see below for filesystem information
  11:io/filesystem.c **** |
  12:io/filesystem.c **** | Author   : Simon Schulz / avr{AT}auctionant.de
  13:io/filesystem.c **** |
  14:io/filesystem.c **** | 
  15:io/filesystem.c **** |
  16:io/filesystem.c **** |-----------------------------------------------------------------------------------------
  17:io/filesystem.c **** | License:
  18:io/filesystem.c **** | This program is free software; you can redistribute it and/or modify it under
  19:io/filesystem.c **** | the terms of the GNU General Public License as published by the Free Software
  20:io/filesystem.c **** | Foundation; either version 2 of the License, or (at your option) any later
  21:io/filesystem.c **** | version.
  22:io/filesystem.c **** | This program is distributed in the hope that it will be useful, but
  23:io/filesystem.c **** |
  24:io/filesystem.c **** | WITHOUT ANY WARRANTY;
  25:io/filesystem.c **** |
  26:io/filesystem.c **** | without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  27:io/filesystem.c **** | PURPOSE. See the GNU General Public License for more details.
  28:io/filesystem.c **** |
  29:io/filesystem.c **** | You should have received a copy of the GNU General Public License along with
  30:io/filesystem.c **** | this program; if not, write to the Free Software Foundation, Inc., 51
  31:io/filesystem.c **** | Franklin St, Fifth Floor, Boston, MA 02110, USA
  32:io/filesystem.c **** |
  33:io/filesystem.c **** | http://www.gnu.de/gpl-ger.html
  34:io/filesystem.c **** `-----------------------------------------------------------------------------------------*/
  35:io/filesystem.c **** #include "filesystem.h"
  36:io/filesystem.c **** #include "dataflash.h"
  37:io/filesystem.c **** 
  38:io/filesystem.c **** //ACTIVATE DEBUG by editing this file:
  39:io/filesystem.c **** #include "debug.h"
  40:io/filesystem.c **** 
  41:io/filesystem.c **** #define FILESYSTEM_REVISION 0x01
  42:io/filesystem.c **** 
  43:io/filesystem.c **** /*
  44:io/filesystem.c **** store filesystem on dataflash
  45:io/filesystem.c **** 
  46:io/filesystem.c **** simple quick and dirty filesystem.
  47:io/filesystem.c **** store files in multiples of pagesize, every file chunk
  48:io/filesystem.c **** stores a pointer to the next data segment (linked list)
  49:io/filesystem.c **** 
  50:io/filesystem.c **** -------------------------------------------------------------------------------
  51:io/filesystem.c **** every file consists of blocks with 256+8 Byte (=pagesize)
  52:io/filesystem.c **** - byte   0-255: DATA
  53:io/filesystem.c **** - byte     256: free/used tag -- 0xE0 -> used page, everything else: free page 
  54:io/filesystem.c **** - byte     257: filesystem revision (starts with 0x01)
  55:io/filesystem.c **** - byte 258+259: file id (16bit uint) 
  56:io/filesystem.c **** - byte 260+261: pointer to next file block
  57:io/filesystem.c **** - byte     262: block tag: 0x00 = first block, 0xEE = last block -> blocktag != 0xEE -> read more
  58:io/filesystem.c **** - byte     262: how many bytes of this block are used
  59:io/filesystem.c **** 
  60:io/filesystem.c **** -------------------------------------------------------------------------------*/
  61:io/filesystem.c **** #define FILESYSTEM_FILE_FREETAG  0x100
  62:io/filesystem.c **** #define FILESYSTEM_FILE_REV      0x101
  63:io/filesystem.c **** #define FILESYSTEM_FILE_ID_HI    0x102
  64:io/filesystem.c **** #define FILESYSTEM_FILE_ID_LO    0x103
  65:io/filesystem.c **** #define FILESYSTEM_FILE_NEXT_HI  0x104
  66:io/filesystem.c **** #define FILESYSTEM_FILE_NEXT_LO  0x105
  67:io/filesystem.c **** #define FILESYSTEM_FILE_BLOCKTAG 0x106
  68:io/filesystem.c **** #define FILESYSTEM_FILE_BLOCK_USAGE 0x107
  69:io/filesystem.c **** 
  70:io/filesystem.c **** /*
  71:io/filesystem.c **** -------------------------------------------------------------------------------
  72:io/filesystem.c **** filesystem info table is stored in block 0-49
  73:io/filesystem.c **** - every entry has 24 bytes:
  74:io/filesystem.c ****   - byte  0- 1 : 16 bit file id (uint) (valid fileid: 1...549)
  75:io/filesystem.c ****   - byte  2- 5 : 32 bit timestamp (last modified)
  76:io/filesystem.c ****   - byte  6-16 : 11 byte filename (8+3 chars)
  77:io/filesystem.c ****   - byte 17-18 : address of first block
  78:io/filesystem.c ****   - byte 19-20 : address of last block
  79:io/filesystem.c ****   - byte 21-23 : RESERVED
  80:io/filesystem.c **** -------------------------------------------------------------------------------
  81:io/filesystem.c **** 
  82:io/filesystem.c **** !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  83:io/filesystem.c **** WARNING: we only support one open file (for writing) at one time !!!
  84:io/filesystem.c **** !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  85:io/filesystem.c **** 
  86:io/filesystem.c **** */
  87:io/filesystem.c **** 
  88:io/filesystem.c **** ///
  89:io/filesystem.c **** /// TODO: 
  90:io/filesystem.c **** /// - replace writing of 0s with dataflash erase cmd !!!!
  91:io/filesystem.c **** #define FILESYSTEM_TABLE_SIZE 50
  92:io/filesystem.c **** #define FILESYSTEM_BLOCK_COUNT 2048
  93:io/filesystem.c **** 
  94:io/filesystem.c **** #define FILESYSTEM_STATUS_IDLE      0x00
  95:io/filesystem.c **** #define FILESYSTEM_STATUS_FILE_OPEN 0x01
  96:io/filesystem.c **** 
  97:io/filesystem.c **** #define FILESYSTEM_FTABLE_ID_HI			   0
  98:io/filesystem.c **** #define FILESYSTEM_FTABLE_ID_LO			   1
  99:io/filesystem.c **** #define FILESYSTEM_FTABLE_TIMESTAMP_3  2
 100:io/filesystem.c **** #define FILESYSTEM_FTABLE_TIMESTAMP_2  3
 101:io/filesystem.c **** #define FILESYSTEM_FTABLE_TIMESTAMP_1  4
 102:io/filesystem.c **** #define FILESYSTEM_FTABLE_TIMESTAMP_0  5
 103:io/filesystem.c **** //position of filename start
 104:io/filesystem.c **** #define FILESYSTEM_FTABLE_FILENAME_START  6
 105:io/filesystem.c **** #define FILESYSTEM_FTABLE_BLOCK_START_HI 17
 106:io/filesystem.c **** #define FILESYSTEM_FTABLE_BLOCK_START_LO 18
 107:io/filesystem.c **** #define FILESYSTEM_FTABLE_BLOCK_COUNT_HI 19
 108:io/filesystem.c **** #define FILESYSTEM_FTABLE_BLOCK_COUNT_LO 20
 109:io/filesystem.c **** 
 110:io/filesystem.c **** volatile unsigned char filesystem_status;
 111:io/filesystem.c **** volatile unsigned int  filesystem_fileid;
 112:io/filesystem.c **** 
 113:io/filesystem.c **** volatile unsigned int  filesystem_first_block;
 114:io/filesystem.c **** volatile unsigned int  filesystem_current_block;
 115:io/filesystem.c **** volatile unsigned int  filesystem_block_count;
 116:io/filesystem.c **** 
 117:io/filesystem.c **** 
 118:io/filesystem.c **** volatile unsigned char filesystem_filename[8];
 119:io/filesystem.c **** volatile unsigned char filesystem_filename_ext[3];
 120:io/filesystem.c **** 
 121:io/filesystem.c **** unsigned char filesystem_buffer[256];
 122:io/filesystem.c **** 
 123:io/filesystem.c **** volatile unsigned char filesystem_file_pos;
 124:io/filesystem.c **** 
 125:io/filesystem.c **** //init
 126:io/filesystem.c **** void filesystem_init(){
 127:io/filesystem.c **** 	filesystem_status = FILESYSTEM_STATUS_IDLE;
 128:io/filesystem.c **** 	filesystem_fileid = 0;
 129:io/filesystem.c **** 	filesystem_first_block = 0;
 130:io/filesystem.c **** 	filesystem_current_block = 0;
 131:io/filesystem.c **** 
 132:io/filesystem.c **** 	filesystem_file_pos = 0;
 133:io/filesystem.c **** 
 134:io/filesystem.c **** 	//check if we need to format flash:
 135:io/filesystem.c **** 	dataflash_copy_page_to_buffer(0, 0);
 136:io/filesystem.c **** 	if ((dataflash_read_buffer(0, 0)==0xFF) && (dataflash_read_buffer(1, 0)==0xFF))
 137:io/filesystem.c **** 		filesystem_format();
 138:io/filesystem.c **** }
 139:io/filesystem.c **** 
 140:io/filesystem.c **** void filesystem_delete_file(unsigned int fileid){
 141:io/filesystem.c **** 	unsigned int tmp;
 142:io/filesystem.c **** 	unsigned int tmp_old;
 143:io/filesystem.c **** 	unsigned int pos;
 144:io/filesystem.c **** 
 145:io/filesystem.c **** 	//invalid fileid ?
 146:io/filesystem.c **** 	if (fileid == 0)
 147:io/filesystem.c **** 		return;
 148:io/filesystem.c **** 
 149:io/filesystem.c **** 	//copy lookuptable page to dataflash buffer 0
 150:io/filesystem.c **** 	dataflash_copy_page_to_buffer(((fileid-1)/11), 0);
 151:io/filesystem.c **** 	
 152:io/filesystem.c **** 	//pos inside page is ?
 153:io/filesystem.c **** 	pos = 24*((fileid-1) % 11);
 154:io/filesystem.c **** 
 155:io/filesystem.c **** 	#if FILESYSTEM_DEBUG
 156:io/filesystem.c **** 	softuart_puts_progmem("FS  : deleting #");
 157:io/filesystem.c **** 	softuart_put_uint16(fileid);
 158:io/filesystem.c **** 	softuart_puts_progmem("... ");
 159:io/filesystem.c **** 	#endif
 160:io/filesystem.c **** 
 161:io/filesystem.c **** 	//get first block:
 162:io/filesystem.c **** 	tmp  = dataflash_read_buffer(pos + FILESYSTEM_FTABLE_BLOCK_START_HI, 0)<<8;
 163:io/filesystem.c **** 	tmp |= dataflash_read_buffer(pos + FILESYSTEM_FTABLE_BLOCK_START_LO, 0);
 164:io/filesystem.c **** 
 165:io/filesystem.c **** 	//mark lookup table entry as empty:
 166:io/filesystem.c **** 	dataflash_write_to_page_buffer(pos+FILESYSTEM_FTABLE_ID_HI,0,0);
 167:io/filesystem.c **** 	dataflash_write_to_page_buffer(pos+FILESYSTEM_FTABLE_ID_LO,0,0);
 168:io/filesystem.c **** 
 169:io/filesystem.c **** 	//store lookuptable
 170:io/filesystem.c **** 	dataflash_copy_buffer_to_page(((fileid-1)/11), 0);
 171:io/filesystem.c **** 
 172:io/filesystem.c **** 	//clear buffer:
 173:io/filesystem.c **** 	for (unsigned int j=0; j<256+8; j++)
 174:io/filesystem.c **** 		dataflash_write_to_page_buffer(j,1,0);
 175:io/filesystem.c **** 
 176:io/filesystem.c **** 	while (tmp != 0x0000){
 177:io/filesystem.c **** 		#if FILESYSTEM_DEBUG
 178:io/filesystem.c **** 		softuart_putc('x');
 179:io/filesystem.c **** 		#endif
 180:io/filesystem.c **** 		//copy block to buffer0:
 181:io/filesystem.c **** 		dataflash_copy_page_to_buffer(tmp, 0);
 182:io/filesystem.c **** 
 183:io/filesystem.c **** 		//remember page to clear
 184:io/filesystem.c **** 		tmp_old = tmp;
 185:io/filesystem.c **** 
 186:io/filesystem.c **** 		//calc next block:
 187:io/filesystem.c **** 		tmp  = dataflash_read_buffer(FILESYSTEM_FILE_NEXT_HI, 0)<<8;
 188:io/filesystem.c **** 		tmp |= dataflash_read_buffer(FILESYSTEM_FILE_NEXT_LO, 0);
 189:io/filesystem.c **** 		
 190:io/filesystem.c **** 		//tmp should be zero if this is the last block. but we have a flag for last block, too:
 191:io/filesystem.c **** 		if (dataflash_read_buffer(FILESYSTEM_FILE_BLOCKTAG,0) == 0xEE)
 192:io/filesystem.c **** 			tmp = 0x0000; //last block!
 193:io/filesystem.c **** 		else
 194:io/filesystem.c **** 			dataflash_copy_buffer_to_page(tmp_old,1);
 195:io/filesystem.c **** 	}
 196:io/filesystem.c **** 	#if FILESYSTEM_DEBUG
 197:io/filesystem.c **** 	softuart_puts_progmem(" done");
 198:io/filesystem.c **** 	softuart_putnewline();
 199:io/filesystem.c **** 	#endif
 200:io/filesystem.c **** }
 201:io/filesystem.c **** 
 202:io/filesystem.c **** /*
 203:io/filesystem.c **** void filesystem_dump_file(unsigned int fileid){
 204:io/filesystem.c **** 	unsigned int tmp;
 205:io/filesystem.c **** 	unsigned int count;
 206:io/filesystem.c **** 	unsigned int pos;
 207:io/filesystem.c **** 
 208:io/filesystem.c **** 	//invalid fileid ?
 209:io/filesystem.c **** 	if (fileid == 0)
 210:io/filesystem.c **** 		return;
 211:io/filesystem.c **** 
 212:io/filesystem.c **** 	//copy lookuptable page to dataflash buffer 0
 213:io/filesystem.c **** 	dataflash_copy_page_to_buffer(((fileid-1)/11), 0);
 214:io/filesystem.c **** 	
 215:io/filesystem.c **** 	//pos inside page is ?
 216:io/filesystem.c **** 	pos = 24*((fileid-1) % 11);
 217:io/filesystem.c **** 
 218:io/filesystem.c **** 	#if FILESYSTEM_DEBUG
 219:io/filesystem.c **** 	softuart_puts_progmem("FS  : dumping #");
 220:io/filesystem.c **** 	softuart_put_uint16(fileid);
 221:io/filesystem.c **** 	softuart_puts_progmem(", loc on block ");
 222:io/filesystem.c **** 	softuart_put_uint16((fileid-1)/11);
 223:io/filesystem.c **** 	softuart_puts_progmem(", pos ");
 224:io/filesystem.c **** 	softuart_put_uint8(pos);
 225:io/filesystem.c **** 	softuart_putnewline();
 226:io/filesystem.c **** 	#endif
 227:io/filesystem.c **** 
 228:io/filesystem.c **** 	//get first block:
 229:io/filesystem.c **** 	tmp  = dataflash_read_buffer(pos + FILESYSTEM_FTABLE_BLOCK_START_HI, 0)<<8;
 230:io/filesystem.c **** 	tmp |= dataflash_read_buffer(pos + FILESYSTEM_FTABLE_BLOCK_START_LO, 0);
 231:io/filesystem.c **** 
 232:io/filesystem.c **** 
 233:io/filesystem.c **** 	while (tmp != 0x0000){
 234:io/filesystem.c **** 		//copy block to buffer0:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -