📄 fs_comm.h
字号:
/*
$Log: fs_comm.h,v $
Revision 1.15 2008/01/07 12:52:17 Huangshilin
no message
Revision 1.14 2008/01/03 04:56:26 Penghuacheng
媒体库、资源管理器大更新
Revision 1.13 2007/12/24 07:56:10 Lingzhaojun
同步蓝魔版本基本模块
Revision 1.12 2007/12/12 02:39:04 Fangzhenfu
文件系统更新! FLASH 底层更新!
Revision 1.11 2007/11/13 14:28:04 Fangzhenfu
文件系统BUG修改! FLASH 底层修改,解决媒体库多次更新造成文件
系统破坏,文件名大小写转换问题!
Revision 1.10 2007/11/07 07:26:25 Fangzhenfu
USB 提速(小文件提速,目前速度写 3M 左右,读 6.5M左右, 4K PAGE FLASH 可到 5M,8M),
文件系统修改!
加入 FLASH 访问时序 API ! 见 flash_dev.h 中
FlashTimingCfg(uint32 Freq) Freq 为总线频率---打包
第一次调用 FlashTimingCfg()时请在 FS_Init() 之后调用,其它在总线频率变化时调用!
Revision 1.9 2007/11/02 02:40:56 Fangzhenfu
文件系统更新!fs_comm.h (V15000)!
文件句柄采用 MALLOC !
Revision 1.8 2007/10/30 08:35:20 Penghuacheng
增加文件打开个数限制,排序时同时打开多个文件
Revision 1.7 2007/10/25 07:52:44 Fangzhenfu
USB 模块 OS 嵌入!初次上传!
请将 修改板子 上的 VBUS 的连接方式!
每个盘的 盘符 请根据需要自行修改(每个设备的 dec.c中)!
如下:
const FS_DEVICE_TYPE FS_SdmmcDevice={
"C:\",
SdmmcGetStatus,
SdmmcReadSec,
SdmmcWriteSec,
SdmmcIoCtl,
SdmmcMediumInit,
&SdFatCache,
&SdFdtCache,
&SdDataCache
};
别外请将 FLASH 的写保护直接上拉,否则写不了FLASH!
初次使用时请将 SD 卡设置为 C 盘,系统从SD启动后将 FLASH 格式
化后,COPY 所需的 资源文件 到 FLASH 中的 第一个盘中(目前保留
容量为 60M),再修改FLASH SYS 的盘符为 C 盘,即可从FLASH 启动
系统!
目前提交的版本比较不规范,有待以后改进!
Revision 1.6 2007/10/20 04:46:31 Huangshilin
for RK2700
Revision 1.5 2007/10/11 04:08:09 Huangshilin
System\os
Revision 1.4 2007/10/08 02:58:14 Lingzhaojun
添加版本自动注释脚本
*/
#ifndef _FS_COMM_H_
#define _FS_COMM_H_
//定义工程所在的仿真环境
#define DEMO_BOARD 0x01 /* 开发板上的仿真环境 */
#define PC_VC_EMU 0x02 /* VC 仿真环境 */
#define ARM_ADS_EMU 0x03 /* AXD 仿真环境, FS 单独编译使用 */
#if (defined(BOARD))
#define FS_EMU_ENT DEMO_BOARD
#elif (defined(ROCK_FS))
#define FS_EMU_ENT PC_VC_EMU
#else
#define FS_EMU_ENT PC_VC_EMU
#endif
//定义工程所用的 MEMMAP 表
#define PORSCHE9_IO_MEMMAP 0 /* RK27XX DEMO 板(目前不用) */
#define LDK_MMU_DISABLE 1 /* LDK 板 MMU 关闭 */
#define LDK_MMU_ENABLE 2 /* LDK 板 MMU 开启 */
#define _USE_ADS_CLIB_ //定义是否使用 ADS 常用的 C 库(详见 fs_clib.c)
#define FS_VERSION 18000UL //文件系统版本号1.00.00
#define FS_MALLOC_HANDLE_SP 1 //定义是否使用 Malloc
#define FLASH_DISK 1 //定义FLASH盘使能
#ifndef SETUP
#define SD_CARD_EN 1 //定义SD卡使能
#define FS_OS_SUPPORT //定义OS下的文件系统
#endif
#define FS_IN_RK27XX_SYS
//#define BOOT_ONLY //定义是否生成引导代码
#define FS_FILE_HANDLE_MALLOC 1
#define FS_MAX_VOLUME 8
#define FS_MAX_OPEN_FILE 16 // changed by phc, 排序时同时打开多个文件
#define FS_MAX_LFN_ENTRIES 0x14 /*最长就3*13个字符*/
#define FS_MAX_NAME_LENGTH 256 /*文件或目录名字(包括路径)的最大长度*/
#define FS_MAX_DIR_DEPTH 8
#define FS_MAX_FILENAME_LEN ((FS_MAX_LFN_ENTRIES * 13 * 2 + 2)/2) //结尾的NUL占用2B
#define FS_LFN_SEQ_MASK 0x3f
#define FS_MAX_PATH_LEN (2+FS_MAX_DIR_DEPTH*12+4) // 短路径名长度
#if(FS_EMU_ENT == PC_VC_EMU)
#define __packed
#endif
#if(FS_EMU_ENT == ARM_ADS_EMU)
#undef FS_OS_SUPPORT
#undef FS_IN_RK27XX_SYS
#endif
#ifdef FS_IN_RK27XX_SYS
#include "stdio.h"
#include "Typedef.h"
#include "sysGlobal.h"
#include "hw_include.h"
#include "Support.h"
#define RK27XX_IO_MEMMAP PORSCHE9_IO_MEMMAP
#define uint8 INT8U
#define int8 INT8S
#define uint16 INT16U
#define int16 INT16S
#define uint32 INT32U
#define int32 INT32S
#define uint64 INT64U
#define int64 INT64S
#define bool BOOL
// #define size_t;
#else
#define RK27XX_IO_MEMMAP LDK_MMU_DISABLE
typedef unsigned char uint8;
typedef signed char int8;
typedef unsigned short uint16;
typedef signed short int16;
typedef unsigned long uint32;
typedef signed long int32;
typedef unsigned long long uint64;
typedef signed long long int64;
typedef unsigned char bool;
typedef unsigned int size_t;
#endif
#if 1
#ifndef read_XDATA8
#define read_XDATA8(address) (*((unsigned char volatile*)(address)))
#endif
#ifndef read_XDATA16
#define read_XDATA16(address) (*((unsigned short volatile*)(address)))
#endif
#ifndef write_XDATA8
#define write_XDATA8(address, value) (*((unsigned char volatile*)(address)) = value)
#endif
#ifndef write_XDATA16
#define write_XDATA16(address, value) (*((unsigned short volatile*)(address)) = value)
#endif
#ifndef read_XDATA32
#define read_XDATA32(address) (*((unsigned int volatile*)(address)))
#endif
#ifndef write_XDATA32
#define write_XDATA32(address, value) (*((unsigned int volatile*)(address)) = value)
#endif
#endif
#ifndef NULL
#define NULL 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
#ifndef OK
#define OK 0
#endif
#ifndef ERROR
#define ERROR (1)
#endif
#define FS_FAT_SEC_SIZE 512
#define FS_LBL_MEDIACHANGED 0x0001
/* FDT文件属性 */
#define FS_ATTR_READ_ONLY 0x01
#define FS_ATTR_HIDDEN 0x02
#define FS_ATTR_SYSTEM 0x04
#define FS_ATTR_VOLUME_ID 0x08
#define FS_ATTR_LFN_ENTRY 0x0F /* LFN entry attribute */
#define FS_ATTR_DIRECTORY 0x10
#define FS_ATTR_ARCHIVE 0x20
/* Global error codes */
#define FS_ERR_OK (int16)0x0000
#define FS_ERR_EOF (int16)0xfff0
#define FS_ERR_DISKFULL (int16)0xffe0
#define FS_ERR_INVALIDPAR (int16)0xffd0
#define FS_ERR_WRITEONLY (int16)0xffc0
#define FS_ERR_READONLY (int16)0xffb0
#define FS_ERR_READERROR (int16)0xffa0
#define FS_ERR_WRITEERROR (int16)0xff90
#define FS_ERR_DISKCHANGED (int16)0xff80
#define FS_ERR_CLOSE (int16)0xff70
//文件跳转宏定义,与标准C语言定义保持一至
#define FS_SEEK_SET 0
#define FS_SEEK_CUR 1
#define FS_SEEK_END 2
#define FS_SEEK_REF 3
#define FS_O_RDONLY 0x001
#define FS_O_RDWR 0x002
#define FS_O_WRONLY 0x004
#define FS_O_CREAT 0x008
#define FS_O_APPEND 0x010
#define FS_O_TRUNC 0x020
#define FS_O_BINARY 0x040
#define FS_O_TEXT 0x080
#define FS_O_WFLAG 0x100
/* FDT类型 */
#define FS_FILE_NOT_EXIST 0
#define FS_FILE_DELETED 0xe5
#define FS_ESC_FDT 0x05
/* 函数返回值 */
#define FS_RETURN_OK 0x00 /* 操作成功*/
#define FS_NOT_FIND_DISK 0x01 /* 逻辑盘不存在*/
#define FS_DISK_FULL 0x02 /* 逻辑盘满*/
#define FS_SECTOR_NOT_IN_CACHE 0x03 /* 扇区没有被cache */
#define FS_NOT_EMPTY_CACHE 0x04 /* 没有空闲cache*/
#define FS_SECTOR_READ_ERR 0x05 /* 读扇区错误*/
#define FS_CLUSTER_NOT_IN_DISK 0x06 /* 逻辑盘中没有此簇 */
#define FS_NOT_FIND_FDT 0x07 /* 没有发现文件(目录)*/
#define FS_NOT_FAT_DISK 0x08 /* 非FAT文件系统*/
#define FS_FDT_OVER 0x09 /* FDT索引超出范围*/
#define FS_FDT_EXISTS 0x0a /* 文件(目录)已经存在*/
#define FS_ROOT_FDT_FULL 0x0b /* 根目录满*/
#define FS_DIR_EMPTY 0x0C /* 目录空*/
#define FS_DIR_NOT_EMPTY 0x0d /* 目录不空*/
#define FS_PATH_NOT_FIND 0x0e /* 路径未找到*/
#define FS_FAT_ERR 0x0f /* FAT表错误*/
#define FS_FILE_NAME_ERR 0x10 /* 文件(目录)名错误*/
#define FS_FILE_EOF 0x11 /* 文件结束*/
#define FS_FILE_LOCK 0x12 /* 文件被锁定*/
#define FS_NOT_FIND_FILE 0x13 /* 没有发现指定文件*/
#define FS_NOT_FIND_DIR 0x14 /* 没有发现指定目录*/
#define FS_NOT_RUN 0xfd /* 命令未执行*/
#define FS_BAD_COMMAND 0xfe /* 错误命令*/
#define FS_PARAMETER_ERR 0xff /* 非法参数*/
#define FS_LBL_READ_ERR (int)0xFC
#define FS_LBL_WRITE_ERR (int)0xFB
#define FS_LBL_READ_API_ERR (int)0xFA
#define FS_LBL_WRITE_API_ERR (int)0xF9
#define FS_LBL_IOCTL_ERR (int)0xF8
#define FS_LBL_IOCTL_API_ERR (int)0xF7
#define FS_LBL_READ_CACHE_ERR (int)0xF6
#define FS_LBL_WRITE_CACHE_ERR (int)0xF5
#define FS_LBL_CACHE_NULL_ERR (int)0xF4
#define FS_LBL_MEDIA_INIT_ERR (int)0xF3
#define FS_LBL_MEDIA_INIT_API_ERR (int)0xF2
#define FS_FDT_WRITE_ERR (int)0xE0
#define FS_API_GET_LFN_ERR (int)0xE1
#define FS_FAT_CREATE_ERR (int)0xE0
/* 簇类型 */
#define FS_EMPTY_CLUS 0
#define FS_EMPTY_CLUS_1 1
#define FS_BAD_CLUS 0x0ffffff7L
#define FS_EOF_CLUS_1 0x0ffffff8L
#define FS_EOF_CLUS_END 0x0fffffffL
#define FS_FAT12 12
#define FS_FAT16 16
#define FS_FAT32 32
#define MEDIUM_STATUS_RDY 0x00
#define MEDIUM_STATUS_BUSY 0x01
#define MEDIUM_STATUS_NOON 0x02
#define IO_CTL_GET_CAPACITY 0x01
#define IO_CTL_GET_MEDIUM_START_SEC 0x02
#define IO_CTL_CACHE_WRITE_BACK 0x03
#define IO_CTL_MEDIUM_CHANGE 0x04
#define IO_CTL_GET_MEDIUM_STATUS 0x05
#define IO_CTL_FLUSH_CACHE 0x06
#ifdef FS_OS_SUPPORT
#define FS_OBTAIN_FILE_SEM RockSemObtain(&gFatFlashSem)
#define FS_RELEASE_FILE_SEM RockSemRelease(&gFatFlashSem)
#else
#define FS_OBTAIN_FILE_SEM
#define FS_RELEASE_FILE_SEM
#endif
#ifdef FS_OS_SUPPORT
#if(defined(BOARD))
#define OBTAIN_FLASH_CS_SEM OSSchedLock(); //{RockSemObtain(&gHwIOmuxI2CSem);}
#define RELEASE_FLASH_CS_SEM OSSchedUnlock();//{RockSemRelease(&gHwIOmuxI2CSem);}
#else
#define OBTAIN_FLASH_CS_SEM
#define RELEASE_FLASH_CS_SEM
#endif
#else
#define OBTAIN_FLASH_CS_SEM
#define RELEASE_FLASH_CS_SEM
#endif
#include "fs_clib.h"
#include "fs_dev.h"
#include "fs_lbl.h"
#include "fs_api.h"
#include "fs_fat.h"
#include "fs_fdt.h"
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -